如何使用两个以上的顶点分割连接的分量,以及如何为CC的每个像素识别其连接的像素

我已经对初始图像3.jpg进行了分割,以便获得下面表示的小卵石的边缘(彩色线是组成每个分量的像素数的函数)Edges of the pebble identified through the Canny algorithm。由于卵石周围的阴影,该算法未检测到边缘的一部分(红色曲线)。我正在考虑的一种可能的解决方案是,从最长的一个(红色曲线)开始,合并所有最接近卵石边缘的连接组件(蓝色像素),并根据一系列条件重复合并其他连接的组件。主要问题之一是某些连接的组件是分叉的,因此我的算法不能简单地沿一条直线移动,而应决定采用哪条路径。我想在第一阶段避免这种情况。 Zoom on the forked connected component。如何根据一系列路径(线)的长度(从最大到最小)将连接的具有两个以上顶点的组件拆分成一系列路径(线)?

此外,是否有一种方法可以为连接的组件的每个像素标识与其连接的像素?基本上,我希望能够沿着从一个顶点到另一顶点的路径遵循连续坐标。

非常感谢您的帮助。

这是我的代码:

img=imread('3.jpg');

gray=rgb2gray(img); 
gray=imgaussfilt(gray,0.8);
N=size(gray);
n_row=N(1);
n_col=N(2);
se = strel('disk',15,8); 
    Ge = imerode(gray,se); 
Gobr = imreconstruct(Ge,gray);
imshow(Gobr)
se1=strel('disk',10,8);
Gobrd = imdilate(Gobr,se1);
Gobrcbr = imreconstruct(imcomplement(Gobrd),imcomplement(Gobr)); 
Gobrcbr = imcomplement(Gobrcbr); 
imshow(Gobrcbr)
E=edge(Gobrcbr,'Canny');
E=bwmorph(E,'skel'); 
    figure(1)
    imshow(labeloverlay(gray,E));
cc=bwlabel(E,8);
cc_rgb=label2rgb(cc);
figure
imshow(cc_rgb)
props=regionprops(cc(:,:),'Area');
props=struct2cell(props);
props=cell2mat(props);
N_props=size(props);
n_p=N_props(2);
cc_rgb=label2rgb(cc);
figure
imshow(cc_rgb)
props=regionprops(cc(:,'Area');
props=struct2cell(props);
props=cell2mat(props);
N_props=size(props);
n_p=N_props(2);
Area=zeros(n_row,n_col);
for i=1:n_row
    for j=1:n_col
        for r=1:n_p
            if cc(i,j)==r
               Area(i,j)=props(1,r);
            end 
        end
    end
end
E2_rgb=label2rgb(Area);
E2_GRAY= rgb2gray(E2_rgb);
figure
a=imshow(gray)
 hold on 
a=imshow(E2_rgb)
hold off
alpha(a,255-E2_GRAY)  
fangchufeng 回答:如何使用两个以上的顶点分割连接的分量,以及如何为CC的每个像素识别其连接的像素

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2376972.html

大家都在问