如何计算重叠的对象和超过1种颜色的对象?

时间:2013-07-06 11:29:56

标签: image matlab image-processing

我想创建一个可以计算图像中对象数量的程序。一切顺利,除了图像:

  1. 具有多于1种颜色的对象。
  2. 重叠对象。
  3. 以下是我的程序,它只能计算图像中对象只有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种颜色对象的图像的结果:

    RESULT

    这是对象具有>的图像的错误结果1种颜色并重叠:

    WRONG RESULT

    如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,您需要清楚地定义输入数据 - 您要检测哪些类型的对象(书籍,人物,任何类型的对象?),环境条件的范围是什么(平滑背景与纹理,照明) ,观点)。

然后尝试various image segmentation techniques并查看适用于您的输入数据范围的内容。没有“正确”的答案 - 这完全取决于您的数据。

您还可以尝试合并之前的信息 - 在评估场景时您知道的事情,计算机仅通过评估像素就不会知道。

例如,也许所有对象都具有一些最小尺寸。因此,您的算法可以过滤仅返回具有pixelArea > minArea的对象。也许你只期望每种颜色的一个对象。因此,如果两个检测到的对象的颜色直方图与给定容差内的匹配,请将它们视为同一对象。