50 lines
1.4 KiB
Matlab
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 |