說我有一個形象的一個矩陣,我要做到以下幾點:Matlab的 - 8x8的窗口,發現平均
- 幻燈片的
8x8
窗口在矩陣 - 計算平均爲每個像素矩陣
如何在matlab
中做到這一點,前提是我對matlab中的編碼有所瞭解。
謝謝。
說我有一個形象的一個矩陣,我要做到以下幾點:Matlab的 - 8x8的窗口,發現平均
8x8
窗口在矩陣如何在matlab
中做到這一點,前提是我對matlab中的編碼有所瞭解。
謝謝。
您可以使用conv2
和ones(8)
過濾器,如I2 = conv2(I, 1.0/64.0 * ones(8), 'valid');
。由於「過濾器」沒有標準化,我們除以64.0。
謝謝你的回覆。這將工作在矩陣上滑動窗口嗎? – Simplicity
是的,@ natan和我的解決方案都會在矩陣上滑動均值濾波器。 'conv2'會稍快一點,但兩種解決方案都是正確的。 –
@ s.bandra,你不會使用'same'而不是'valid'嗎?使用'same'可以保持原始圖像的大小...這不是'有效'在數學上是錯誤的,只是讓生活更容易下游 – bla
您還可以使用nlfilter
:
fun = @(x) mean(x(:));
ans= nlfilter(img,[8 8],fun);
但作爲@ s.bandara建議的,conv2
是多更快只是計算平均... 注意矩陣大小將使用時改變conv2
與valid
。
nlfilter
經過時間0.433989秒。
conv2
已用時間爲0.000803秒。
所以很明顯,對於尋找平均值的任務,conv2
要快得多。
嘗試提取圖像的第一子矩陣也喜歡在這裏:MATLAB Submatrix
然後用mean(A)功能對每個子矩陣
你有沒有考慮過你想要的邊緣附近發生了什麼? – Dan
我猜你想做一個像[中值過濾器](http://www.mathworks.nl/help/images/ref/medfilt2.html),但是然後使用'mean'作爲內核? –