在matlab图像上滑动窗口

时间:2014-04-17 16:57:43

标签: matlab image-processing

我需要在图像Z上创建一个32x32的滑动窗口。然后我需要检查图像上每个窗口的平均强度。

我可以使用: N = [32,32] h = fspecial('average',n); filter2(h,img)

N = 32;
info = repmat(struct, ceil(size(Z, 1) / N), ceil(size(Z, 2) / N)); 
for row = 1:N:size(Z, 1)%loop through each pixel in the image matrix
   for col = 1:N:size(Z, 2)
     r = (row - 1) / N + 1;
     c = (col - 1) / N + 1;
     imgWindow = Z(row:min(end,row+N-1), col:min(end,col+N-1));
    average = mean(imgWindow(:)) %calculate the mean intensity of pixels within each window
   end
end

然而,这只会产生12x30。谁能找到我出错的地方?

2 个答案:

答案 0 :(得分:2)

您的图片为364x350,窗口大小为32x32。会发生什么:

enter image description here

请注意,在最后一列中,窗口为32x30,最后一行窗口为12x32,最后一个窗口(右下角)为12x30。这是最后一次计算,以及为什么在代码停止运行时获得该值。

我在这里看到三个选项:

  1. 在最后一列填充两列像素,最后一行填充20行像素(可能用零填充?)
  2. 丢弃最后一列和最后一行。
  3. 将窗口大小更改为MxN,其中M是364的除数,N是350的除数。

答案 1 :(得分:1)

在for循环之前初始化

e=1;

然后在for循环中启动计数器并输入此代码

imgWindow (:,:,e)= Z(row:min(end,row+N-1), col:min(end,col+N-1));

而不是

imgWindow = Z(row:min(end,row+N-1), col:min(end,col+N-1));

希望它会对你有所帮助。 此致