我有一个灰度图像。我希望使用8个邻居从左到右,从上到下逐个像素地扫描图像。 我想检查有多少邻居是1或更大,邻居的价值是多少?我想根据邻居的值
标记像素[m n]=size(Img)
kernel = [-1 -1 -1; -1 8 -1; -1 -1 -1];
outputImage = conv2(I, kernel);
for i=1:m
for j=1:n
if(Img(I,j)==1) check neighbours
end
end
如果我有图像
D =
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 1 0 1
0 0 0 1 0 0
邻居的数量被视为
邻居=
1 3 2 3 2 2
3 2 3 3 3 2
1 3 2 2 1 1
2 4 2 3 1 1
1 2 3 2 3 1
1 1 2 1 3 1
从左到右扫描D(1,1)== 1和邻居(1,1)> = 1因此将其标记为1,因为没有标记邻居。如果其中一个邻居已标记,则复制它,如果更多比一个邻居标记然后复制其中一个标签并将其标记为等效
我在此图片上尝试了您的代码
但所有标签都是1.但bwlabel会产生不同的结果
答案 0 :(得分:0)
首先使用阈值1
对图像进行二值化应用正确的内核,因此卷积将导致"激活"邻居
Img_binarized = double(Img >= 1);
kernel = [1 1 1; 1 0 1; 1 1 1];
Img2 = conv2(Img_binarized, kernel);
% here each pixel of Img2 contains the number of neighbours >= 1