gpt4 book ai didi

matlab - 在 MATLAB 中突出显示二进制图像中某些形状的边界

转载 作者:行者123 更新时间:2023-12-04 04:46:04 27 4
gpt4 key购买 nike

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

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 语句,我尝试在它们周围插入一条边界线。关于如何修复此代码以便它仅显示圆圈边界的任何建议或意见将不胜感激。

附加的图像显示了程序当前正在做什么。我想摆脱三角形和正方形周围的绿色边界。
enter image description here

最佳答案

这似乎可以解决您的问题:

[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 )。希望这能解决您的问题。

关于matlab - 在 MATLAB 中突出显示二进制图像中某些形状的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com