答案 0 :(得分:2)
您可以通过循环图像中的唯一值,使用该值创建对象的蒙版,并为每个此类蒙版执行bwlabel
来实现此目的。这将为该掩码中的每个连接组件提供唯一标签,您可以通过添加先前已找到的标签数量来收集所有掩码中的标签:
img = imread('i5WLA.png');
index = zeros(size(img));
for iGray = unique(img(:)).' %'
mask = (img == iGray);
L = bwlabel(mask, 4);
index(mask) = L(mask)+max(index(:));
end
subplot(2,1,1);
imshow(img, []);
title('Original');
subplot(2,1,2);
imshow(index, []);
title('Each region labeled uniquely');
以下是这样的情节:
您现在可以看到每个连接的对象都有自己唯一的灰色值。然后,您可以使用ind2rgb
或label2rgb
从这个新的索引图像创建彩色图像,并选择要使用的色彩图(此处我使用hsv
):
rgbImage = ind2rgb(index, hsv(max(index(:))));
imshow(rgbImage);
% Or...
rgbImage = label2rgb(index, @hsv);
imshow(rgbImage);
答案 1 :(得分:0)
除非已经有一个可以满足您想要的功能,否则您可以自己编写。
如果我不得不这样做,我会考虑使用union-find算法将所有相等颜色的相邻/连接像素分组成组,然后为这些组分配标签。
使用伪代码实现的一种天真(效率较低但不需要联合查找):
# assume pixels are stored in numpy array. Use your imagination to adjust as required.
put each pixel into its own set.
for pixel in pixels:
neighbors = adjacent_same_color_pixels(pixel)
find the sets that contain pixel, and the sets that contain the neighbors
join all those sets together, delete the original sets
now there's one set for each connected same-color shape.
assign labels as desired.