作者waterCoka (Coka)
看板MATLAB
标题[问题] 只针对矩阵中的某个区域做运算
时间Sat Jan 17 20:15:19 2015
有个5x5矩阵M如下:
M = [ A B C o o ;
D E F o o ;
G H I o o ;
o o o o o ;
o o o o o ;
]
A B C
D E F
如果我想针对 G H I 的3x3区域做运算,让E跟它邻近的值做计算後存回去
例如把(E*A)/2、(E*B)/2、(E*C)/2、...、(E*I)/2的值加总起来,接着把加总的值
除以这些邻居的数量,最後存回E中
最後的需求是矩阵中的每个位置都套用此方法run过一便,就像是matlab中的imfilter
不希望使用到回圈的原因是,当矩阵过大时,耗时会很久
(1)这有点类似於imfilter的概念,请问该如何做会比较好?
(2)另外想到的问题,拿上面的例子来说,假设已经有一个3x3的R矩阵可以让目前的
位置跟它的邻居做计算。但如果我把这个R矩阵套用到A的位置时,要怎麽得知A的
附近只有B、D、E这3个邻居呢? (p.s.这样做上面提到的运算时才知道要除以几)
希望各位先进能够给点建议或方法
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.123.218.122
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1421496929.A.40E.html
※ 编辑: waterCoka (140.123.218.122), 01/18/2015 04:01:46
1F:推 shane: conv2, kernel=[1 1 1;1 0 1;1 1 1] 01/19 02:25
谢谢你的回覆,我想问一下有关的问题
如果把Kernel中的1,改为矩阵中的E值,感觉还是需要一个回圈把矩阵中一系列中心的值
copy过去,或者说有更快的方法,可以做到这个行为?
[E E E; [F F F;
E 0 E; F 0 F;
假设这次的kernel是 E E E],那麽下次往右扫时会变成kernel F F F],每次kernel的1都
用目前扫到的中心点来取代
※ 编辑: waterCoka (140.123.218.122), 01/19/2015 05:00:20
2F:推 shane: .*M/2./[3 5 5 5 3; 5 8 8 8 5;5 8 8 8 5;...] 01/19 18:30
3F:→ waterCoka: 谢谢你 我已经了解了 01/19 20:34