Как разделить связанный компонент более чем на две вершины и как определить для каждого пикселя CC те, к которым он подключен - PullRequest
0 голосов
/ 23 апреля 2020

Я сегментировал исходное изображение 3.jpg , чтобы получить края гальки, представленные ниже (цветные линии как функция количества пикселей, составляющих каждый компонент) Края галька, идентифицированная с помощью алгоритма Канни . Из-за тени вокруг гальки часть края (красная кривая) не обнаруживается этим алгоритмом. Одним из возможных решений, о котором я думал, было бы объединить все подключенные компоненты (синие пиксели), которые наилучшим образом приближают к краю гальки, начиная с самого длинного (красная кривая), и многократно объединяя дополнительные подключенные компоненты в соответствии с рядом критериев. Одна из основных проблем заключается в том, что некоторые из подключенных компонентов разветвлены, и поэтому мой алгоритм не может просто следовать по одной линии, но должен решить, какой путь выбрать. Я хотел бы избежать этого на первом этапе. Увеличение разветвленного подключенного компонента . Как я могу разделить связанный компонент, который имеет более двух вершин в серии путей (линий) в соответствии с их длиной (от максимальной до минимальной)?

Кроме того, есть ли способ идентификации для каждого пикселя подключенного компонента те, к которым он подключен? По сути, я хотел бы иметь возможность следовать непрерывной координате вдоль пути от одной вершины к противоположной.

большое спасибо за вашу помощь.

Это мой код:

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)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...