[問題] 大矩陣的部份區域平均化

看板MATLAB作者時間11年前 (2014/03/17 15:12), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
假設我有個 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)

03/17 16:36, , 1F
A = blockproc(A, [3, 3], @(block_struct) ...
03/17 16:36, 1F

03/17 16:37, , 2F
mean(block_struct.data(:)) * ones(3));
03/17 16:37, 2F

03/17 16:45, , 3F
感恩!
03/17 16:45, 3F

03/17 17:15, , 4F
Octave裡沒block_struct.data 是直接用block_struct
03/17 17:15, 4F

03/18 09:57, , 5F
fun=@(x) mean2(x); B=blkproc(A, [1 1], [1 1], fun);
03/18 09:57, 5F
blkproc在2010b被移除了 blockproc有個缺點是, 在你vortex box的m n, 和原圖的 m0 n0, 不能被整除時, 出來的 矩陣大小會和原來的不一樣 (較大) ※ 編輯: DavisX 來自: 140.110.200.122 (03/18 16:26)

03/19 09:53, , 6F
改成 B=blockproc(A, [1 1], fun, 'BordeSize', [1 1]);
03/19 09:53, 6F

03/19 10:30, , 7F
大小差異是padding造成的,做一下實驗確認位置,砍掉即可.
03/19 10:30, 7F

03/19 13:06, , 8F
ohoh 感謝 來試試
03/19 13:06, 8F

03/19 13:18, , 9F
Octave還是沒有...orz 我改成抓和原區大小資料來用好了
03/19 13:18, 9F
文章代碼(AID): #1J9g1KGU (MATLAB)
文章代碼(AID): #1J9g1KGU (MATLAB)