[問題] 只針對矩陣中的某個區域做運算

看板MATLAB作者 (Coka)時間10年前 (2015/01/17 20:15), 10年前編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
有個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://www.ptt.cc/bbs/MATLAB/M.1421496929.A.40E.html ※ 編輯: waterCoka (140.123.218.122), 01/18/2015 04:01:46

01/19 02:25, , 1F
conv2, kernel=[1 1 1;1 0 1;1 1 1]
01/19 02:25, 1F
謝謝你的回覆,我想問一下有關的問題 如果把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

01/19 18:30, , 2F
.*M/2./[3 5 5 5 3; 5 8 8 8 5;5 8 8 8 5;...]
01/19 18:30, 2F

01/19 20:34, , 3F
謝謝你 我已經了解了
01/19 20:34, 3F
文章代碼(AID): #1Kkb9XGE (MATLAB)
文章代碼(AID): #1Kkb9XGE (MATLAB)