我想创建一个可以计算图像中对象数量的程序。除了具有以下内容的图像外,一切都很顺利:
- 具有超过 1 种颜色的对象。
- 重叠的对象。
以下是我的程序,它只能计算图像中对象只有一种颜色且不重叠的对象数量。我使用功能bwlabel
。
a=imread('Tumpukan Buku2.jpg');
a_citra_keabuan = rgb2gray(a);
threshold = graythresh(a_citra_keabuan);
a_bww = im2bw(a_citra_keabuan,threshold);
a_bw=~a_bww;
[labeled,numObjects]=bwlabel(a_bw);
[m,n]=size(a_bw);
s = regionprops(labeled, 'Centroid');
B = bwboundaries(a_bw);
imshow(a_bw)
hold on
for k = 1:numel(s)
c = s(k).Centroid;
text(c(1), c(2), sprintf('%d', k), ...
'HorizontalAlignment', 'center', ...
'VerticalAlignment', 'middle');
end
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end
hold off
这是具有 1 种颜色对象的图像的结果:
对于具有> 1颜色并重叠的对象的图像,这是错误的结果:
如何解决这个问题呢?