portfolio/cellule/Fillsk.m
2026-08-27 15:48:19 +02:00

50 lines
1.4 KiB
Matlab

function [varargout ] = Fillsk( varargin )
%Fillsk retourn les label present entre deux point du squelette
narginchk(0,3);% skelton,point_Extreme,
[sk,xclik,yclik] = varargin{1:3};
[indices_extremunSk, ~, ~, ~]=computePPV(sk,xclik,yclik);
% recherche du fillament conportent les deux point ou au moins un
CC=bwconncomp(sk);
[Lsk, num ]= bwlabel(sk);
choix={};
idchoix=0;
for k=1:num
[r, c] = find(Lsk==k);
P=[r, c];
nbchoix=0;
for l=1:length(P)
A=P(l,:);
d1=distance(A,indices_extremunSk(1,:));%
d2=distance(A,indices_extremunSk(2,:));%
a = (A(1)== indices_extremunSk(1,1)) & (A(2)== indices_extremunSk(1,2));
b =(A(2)== indices_extremunSk(2,1)) & (A(2)== indices_extremunSk(2,2));
c = a|b;
if(a == 1 )
nbchoix=nbchoix+1;
end
if(b ==1)
nbchoix=nbchoix+1;
end
if ( c)
idchoix=idchoix+1;
skbw = Lsk;
skbw(CC.PixelIdxList{k}) = 0;
skbw=sk-skbw;
choix{idchoix,1}=skbw;
choix{idchoix,2}=CC.PixelIdxList{k};
end
end
end
varargout = choix(:,1);
end
function d=distance(A,B)
%distance entre deux point A et b
d =sqrt( (A(1)- B(1)).^2 + (A(2)- B(2)).^2 ); % euclidiant ()
%une distance de manathan serai a tester pour de meilleur resul
% d = abs(A(1)- B(1)) + abs(A(2)- B(2));
end