【问题标题】:Highlighting boundaries of certain shapes in a binary image in MATLAB在 MATLAB 中突出显示二进制图像中某些形状的边界
【发布时间】:2013-08-12 21:08:30
【问题描述】:

我有一个任务需要分析一个填充有彩色形状的图像并突出显示图像中的蓝色圆圈。为此,我将图像拆分为其 RGB 通道,并创建了仅包含蓝色像素的二值图像。使用斑点检测,我设法分割图像并找到每个形状的圆度。但是,当我尝试在圆形上放置边界线时,它会将边界放置在所有形状周围,而不仅仅是圆形。相关部分代码如下所示;

imshow(BBinEro)
for cnt = 1:length(BlueProps)
    %disp(score);
    if score(cnt) >= 0.98 %
        text(BlueProps(cnt).Centroid(1),BlueProps(cnt).Centroid(2),num2str(score(cnt)),'color','red');

        boundaries = bwboundaries(BBinEro); 
        numberOfBoundaries = size(boundaries);
        hold on
        for k = 1 : numberOfBoundaries
            thisBoundary = boundaries{k};
            if score(cnt) >= 0.98 %Only showing for circles
            plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);
            end
        end
        hold off
    end    

end

“分数”是对 blob 圆形度的度量。分数为 1 表示该 blob 是完美的圆形。程序显示圆形在其质心处的圆度;使用相同的 if 语句,我尝试在它们周围插入一条边界线。任何关于如何修复此代码以使其仅显示圆圈边界的建议或意见将不胜感激。

所附图片显示了程序当前正在执行的操作。我想摆脱三角形和正方形周围的绿色边界。

【问题讨论】:

  • 您应该更具体地了解代码中变量的含义,并特别指出哪些变量是特定于单个形状的,哪些是引用所有形状的向量。

标签: matlab image-processing binary blob boundary


【解决方案1】:

这似乎解决了你的问题:

[B,L,N,A] = bwboundaries(BBinEro);
for k=1:length(B)
    text(BlueProps(k).Centroid(1),BlueProps(k).Centroid(2),num2str(score(k)),'color','red');
    if(~sum(A(k,:))) & score(k) >= 0.98
        boundary = B{k};
        plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2);
    end
end 

我刚刚将条件 & score(k) >= 0.98 添加到 matlab 文档 here 中的示例中。这假设分数数组的排序方式与bwboundaries 生成的对象数组相同。如果score 中的对象的排序方式与regionprops 生成的对象的排序方式相同,那么这是可以的,因为regionpropsbwboundaries 以相同的顺序索引对象。

您的代码中的错误在于您在外循环的每次迭代中都重新计算了bwboundaries(BBinEro)。大概您正在尝试在每次新迭代中计算每个新对象的边界,但是您正在计算 整个 图像(我猜是BBinEro)。希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-06-05
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多