Matlab - 8x8窗口并找到意思

时间:2013-01-22 08:29:01

标签: matlab matrix window mean

假设我有一个图像矩阵,我想要执行以下操作:

  • 在矩阵上滑动8x8窗口
  • 计算矩阵中每个像素的平均值

如果我不熟悉matlab编码,我怎么能在matlab中做到这一点。

感谢。

3 个答案:

答案 0 :(得分:4)

您可以将conv2ones(8)过滤器一起使用,与I2 = conv2(I, 1.0 / 64.0 * ones(8), 'valid');中一样。我们除以64.0因为“过滤器”没有标准化。

答案 1 :(得分: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要快得多。

答案 2 :(得分:0)

尝试首先提取图像的子矩阵,如下所示:MATLAB Submatrix

然后对每个子矩阵使用mean(A)函数