作者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