假设我有一个图像矩阵,我想要执行以下操作:
8x8
窗口如果我不熟悉matlab编码,我怎么能在matlab
中做到这一点。
感谢。
答案 0 :(得分:4)
您可以将conv2
与ones(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
多更快,因为只计算平均值...
请注意,将conv2
与valid
一起使用时,矩阵大小会发生变化。
nlfilter
经过的时间是0.433989秒。
conv2
经过的时间是0.000803秒。
因此很明显,对于找到均值的任务,conv2
要快得多。
答案 2 :(得分:0)
尝试首先提取图像的子矩阵,如下所示:MATLAB Submatrix
然后对每个子矩阵使用mean(A)函数