作者DavisX ()
看板MATLAB
标题[问题] 大矩阵的部份区域平均化
时间Mon Mar 17 15:12:18 2014
假设我有个 9 by 9 的矩阵A, 我需要在3 by 3这移动块做平均, 所以A会被分
成9个区做平均, 并将平均值丢回A的原区域. 有不用for做的方法吗?
用for跑起来好慢orz.
谢谢
*找到medfilt2好像可以做, 不过如果矩阵中间有不要做平均的部份要怎避开?
*medfilt2做起来不是我想要的方法orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.110.203.63
※ 编辑: DavisX 来自: 140.110.203.63 (03/17 16:01)
※ 编辑: DavisX 来自: 140.110.203.63 (03/17 16:23)
1F:推 CBET:A = blockproc(A, [3, 3], @(block_struct) ... 03/17 16:36
2F:→ CBET:mean(block_struct.data(:)) * ones(3)); 03/17 16:37
3F:→ DavisX:感恩! 03/17 16:45
4F:→ DavisX:Octave里没block_struct.data 是直接用block_struct 03/17 17:15
5F:推 YoursEver:fun=@(x) mean2(x); B=blkproc(A, [1 1], [1 1], fun); 03/18 09:57
blkproc在2010b被移除了
blockproc有个缺点是, 在你vortex box的m n, 和原图的 m0 n0, 不能被整除时, 出来的
矩阵大小会和原来的不一样 (较大)
※ 编辑: DavisX 来自: 140.110.200.122 (03/18 16:26)
6F:→ YoursEver:改成 B=blockproc(A, [1 1], fun, 'BordeSize', [1 1]); 03/19 09:53
7F:→ YoursEver:大小差异是padding造成的,做一下实验确认位置,砍掉即可. 03/19 10:30
8F:→ DavisX:ohoh 感谢 来试试 03/19 13:06
9F:→ DavisX:Octave还是没有...orz 我改成抓和原区大小资料来用好了 03/19 13:18