连接图像 Matlab 中的边

问题描述 投票:0回答:1

我有以下图片

因为我想找到边缘,所以我使用'edge'函数(A是上图) BW = edge(A, 'sobel'); 我得到以下图像

但是当我缩放时,我发现并不是所有的边都是连接的。我能做些什么来连接所有这些? 我试过使用 b = bwmorph(BW, 'bridge') 但它并没有连接所有这些。

我现在的代码:

A = im2double(imread('image.png'));
BW = imbinarize(A);
BW = edge(BW, 'sobel');
imshow(BW)

PS:问题描述是aks求孤立成员。孤立成员(在此示例中)是边长等于 403 +- 18 的成员。此特定情况的解决方案是 1 个成员,但我得到 0.

图片链接 -> https://ibb.co/ZMV08xC

matlab computer-vision edges
1个回答
0
投票

[请注意,我在这里回答的是 OP 的潜在问题,而不是实际提出的问题。]

这是测量物体周长的方法:

  1. 分割对象
  2. 使用
    regionprops
    测量“周长”特征。

分割通常是最难的部分。在这种情况下,

imbinarize
本身可以很好地将对象与背景分开,但由于对象重叠,因此每个区域都代表多个对象。很难将这些对象分成不同的区域。人们通常会尝试使用分水岭来制作这样的图像。

无论如何,找到物体的边缘在这里没有用,它不会导致边界长度的精确估计。检测到的边缘通常不会形成连续的、封闭的轮廓,但即使它们是,下一步无偏差地估计它们的长度也并不简单(计算边界像素会导致有偏差的估计)。

img = imread('https://i.stack.imgur.com/KcRkZ.jpg');
img = img(:,:,1);

bin = ~imbinarize(img);  % negate so that objects are `true` and background is `false`
props = regionprops(bin, {"Centroid", "Perimeter"});

imshow(bin)
for ii = 1:numel(props)
   text(props(ii).Centroid(1), ...
        props(ii).Centroid(2), ...
        string(props(ii).Perimeter), ...
        'color', 'r');
end
© www.soinside.com 2019 - 2024. All rights reserved.