gpt4 book ai didi

matlab - 如何在 MATLAB 中选择最大的轮廓

转载 作者:行者123 更新时间:2023-12-04 01:50:41 26 4
gpt4 key购买 nike

enter image description here

在我的进度工作中,我必须检测寄生虫。我用 HSV 找到了寄生虫,后来把它做成灰度图像。现在我也做了边缘检测。我需要一些代码告诉 MATLAB 找到最大的轮廓(寄生虫)并将其余区域设为黑色像素。

最佳答案

您可以通过填充每个轮廓周围的孔来选择“最大”轮廓,找出哪个形状给您最大的区域,然后使用最大区域的位置并将其复制到最终图像。正如 Benoit_11 所建议的那样,使用 regionprops - 特别是 AreaPixelList 标志。像这样:

im = imclearborder(im2bw(imread('http://i.stack.imgur.com/a5Yi7.jpg')));
im_fill = imfill(im, 'holes');
s = regionprops(im_fill, 'Area', 'PixelList');
[~,ind] = max([s.Area]);
pix = sub2ind(size(im), s(ind).PixelList(:,2), s(ind).PixelList(:,1));
out = zeros(size(im));
out(pix) = im(pix);
imshow(out);

第一行代码直接从 StackOverflow 读取图像。由于某种原因,该图像也是 RGB 图像,所以我通过 im2bw 将其转换为二进制图像.图像周围还有一个白色边框。您很可能已在 figure 中打开此图像并保存了图中的图像。我通过使用 imclearborder 摆脱了这个删除白色边框。

接下来,我们需要填充轮廓包围的区域,所以使用 imfill使用 holes 标志。接下来,使用 regionprops 来分析图像中不同的填充对象 - 特别是 Area 以及填充图像中每个对象属于哪些像素。一旦我们获得这些属性,找到给你最大面积的填充轮廓,然后访问正确的 regionprops 元素,提取属于对象的像素位置,然后使用这些并复制像素输出图像并显示结果。

我们得到:

enter image description here

或者,您可以使用 Perimeter 标志(正如 Benoit_11 所建议的那样),并简单地找到与最大轮廓相对应的最大周长。这仍然应该给你你想要的。因此,只需将代码的第三行和第四行中的 Area 标志替换为 Perimeter,您应该仍会得到相同的结果。

关于matlab - 如何在 MATLAB 中选择最大的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614074/

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