如何逐像素扫描灰度图像并在不使用bwlabel的情况下为像素分配标签?

时间:2017-05-03 12:22:55

标签: matlab image-processing

我有一个灰度图像。我希望使用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,因为没有标记邻居。如果其中一个邻居已标记,则复制它,如果更多比一个邻居标记然后复制其中一个标签并将其标记为等效

我在此图片上尝试了您的代码

enter image description here

但所有标签都是1.但bwlabel会产生不同的结果

1 个答案:

答案 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
相关问题