2013-01-22 81 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)功能对每个子矩阵