您好我在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,则将窗口内的像素调为黑色。
然而,当我尝试在滑动窗口之后查看生成的图像并移动整个图像时,我只是再次看到原始图像。
有人可以帮我解决这个问题吗?
答案 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)。