因为我想找到边缘,所以我使用'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
[请注意,我在这里回答的是 OP 的潜在问题,而不是实际提出的问题。]
这是测量物体周长的方法:
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