更改滑动窗口内的像素-Matlab

时间:2014-05-22 16:54:03

标签: matlab image-processing

您好我在matlab中使用以下代码在图像上实现了一个滑动窗口:

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(:)); 
      window(r, c).average=average;


     % if mean pixel intensity is greater than 200 then keep the window for
     % further inspection. If not then discard the window.

     if average<200
       imgWindow=false;
     end 

  end 
end 


figure(2);
imshow(Z);

此代码的目的是检查每个滑动窗口内的平均强度,如果平均强度小于200,则将窗口内的像素调为黑色。

然而,当我尝试在滑动窗口之后查看生成的图像并移动整个图像时,我只是再次看到原始图像。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果窗口强度小于200,上面的代码缺少实际将图像的滑动窗口部分设置为黑色的功能。有以下块:

if average<200
   imgWindow=false;
 end 

但是没有相应的代码行将图像 Z 中的原始块设置为零。

我认为您要做的是创建原始图像的副本:

ZWindowed = Z;

然后像以前一样继续,从 Z 抓住窗口。当窗口强度小于200时,请执行以下操作:

if average<200
   % zero out the data corresponding to the window
   ZWindowed(row:min(end,row+N-1), col:min(end,col+N-1)) = 0;
 end 

然后显示图像减去那些强度小于200的窗口:

imshow(ZWindowed);

以上代码假定图像仅为mxn(因此不是RGB)。