2013-01-22 80 views
2

說我有一個形象的一個矩陣,我要做到以下幾點:Matlab的 - 8x8的窗口,發現平均

  • 幻燈片的8x8窗口在矩陣
  • 計算平均爲每個像素矩陣

如何在matlab中做到這一點,前提是我對matlab中的編碼有所瞭解。

謝謝。

+1

你有沒有考慮過你想要的邊緣附近發生了什麼? – Dan

+0

我猜你想做一個像[中值過濾器](http://www.mathworks.nl/help/images/ref/medfilt2.html),但是然後使用'mean'作爲內核? –

回答

4

您可以使用conv2ones(8)過濾器,如I2 = conv2(I, 1.0/64.0 * ones(8), 'valid');。由於「過濾器」沒有標準化,我們除以64.0。

+0

謝謝你的回覆。這將工作在矩陣上滑動窗口嗎? – Simplicity

+0

是的,@ natan和我的解決方案都會在矩陣上滑動均值濾波器。 'conv2'會稍快一點,但兩種解決方案都是正確的。 –

+0

@ s.bandra,你不會使用'same'而不是'valid'嗎?使用'same'可以保持原始圖像的大小...這不是'有效'在數學上是錯誤的,只是讓生活更容易下游 – bla

4

您還可以使用nlfilter

fun = @(x) mean(x(:)); 
ans= nlfilter(img,[8 8],fun); 

但作爲@ s.bandara建議的,conv2更快只是計算平均... 注意矩陣大小將使用時改變conv2valid

enter image description here

nlfilter經過時間0.433989秒。

conv2已用時間爲0.000803秒。

所以很明顯,對於尋找平均值的任務,conv2要快得多。

+0

我認爲他想要一個滑動窗口,而不是平鋪。 –

+0

謝謝,糾正... – bla

+0

@ natan.Thanks您的答覆。這將工作在矩陣上滑動窗口嗎? – Simplicity

0

嘗試提取圖像的第一子矩陣也喜歡在這裏:MATLAB Submatrix

然後用mean(A)功能對每個子矩陣