【问题标题】:Matlab Shape LabellingMatlab 形状标注
【发布时间】:2014-09-07 00:29:42
【问题描述】:

我在图像中有一组形状,我想根据它们的面积进行标记,我使用 bwboundaries 来找到它们,并使用 regionprops 来确定它们的面积。我想给它们贴上标签,以便根据它们的面积是高于还是低于我确定的阈值来标记它们。

我考虑过使用inserObjectAnnotation,但不知道如何在函数中添加基于其区域的条件?

【问题讨论】:

    标签: matlab image-processing shape area annotate


    【解决方案1】:

    假设TH 是阈值区域,BW 是二值图像,如果您可以将它们标记为o'sx'smatlab figure text 在它们的中心(准确地说是质心) ,根据阈值,看看这是否满足您的需求 -

    stats = regionprops(BW,'Area')
    stats2 = regionprops(BW,'Centroid')
    
    figure,imshow(BW)
    for k = 1:numel(stats)
        xy = stats2(k).Centroid
        if (stats(k).Area>TH)
            text(xy(1),xy(2),'L') %// Large Shape
        else
            text(xy(1),xy(2),'S') %// Small Shape
        end
    end
    

    样本输出 -

    【讨论】:

    • 有效!但不幸的是,我的形状有点太小,无法清楚地包含字母,有没有办法给它们着色而不是插入文字?
    • @KRS-fun 给你的意思的形状上色,即用一些颜色填充形状?
    • @KRS-fun 所以在输出图像中我们只有两种颜色的形状,一种颜色用于小于阈值区域的形状,其余的形状将用第二种颜色填充?
    • 你已经回答了我原来的问题,我已经勾选了你的答案
    【解决方案2】:

    你可以使用CC = bwconncomp(BW,conn)

    要获取每个连接组件的像素数,您可以使用:

    numPixels = cellfun(@numel,CC.PixelIdxList);
    

    CC.PixelIdxList 中,您拥有所有找到的对象的列表以及属于组件的像素的索引。我想给你的区域贴上标签,你可以这样做:

    for ind = 1:size(CC.PixelIdxList,2)
       Image(CC.PixelIdxList{ind}) = ind;
    end
    

    【讨论】:

    • 通过标签,OP可能意味着注释,这就是为什么提到insertobjectannotation
    • 好的,听起来正确。我了解标签的其他内容,因为我不知道 insertobjectannotation(我在 Matlab 2012a 中没有)。
    • 是的,我理解你所做的一样,直到我看到那个长词。事实上,您可以查看它的在线文档 - mathworks.in/help/vision/ref/insertobjectannotation.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多