]> AND Private Git Repository - these_gilles.git/blob - THESE/codes/snake/basic_code/SnakeMoveIteration2D.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
final
[these_gilles.git] / THESE / codes / snake / basic_code / SnakeMoveIteration2D.m
1 function P=SnakeMoveIteration2D(B,P,Fext,gamma,kappa,delta)\r
2 % This function will calculate one iteration of contour Snake movement\r
3 %\r
4 % P=SnakeMoveIteration2D(S,P,Fext,gamma,kappa)\r
5 %\r
6 % inputs,\r
7 %   B : Internal force (smoothness) matrix\r
8 %   P : The contour points N x 2;\r
9 %   Fext : External vector field (from image)\r
10 %   gamma : Time step\r
11 %   kappa : External (image) field weight\r
12 %   delta : Balloon Force weight\r
13 %\r
14 % outputs,\r
15 %   P : The (moved) contour points N x 2;\r
16 %\r
17 % Function is written by D.Kroon University of Twente (July 2010)\r
18 \r
19 % Clamp contour to boundary\r
20 P(:,1)=min(max(P(:,1),1),size(Fext,1));\r
21 P(:,2)=min(max(P(:,2),1),size(Fext,2));\r
22 \r
23 % Get image force on the contour points\r
24 Fext1(:,1)=kappa*interp2(Fext(:,:,1),P(:,2),P(:,1));\r
25 Fext1(:,2)=kappa*interp2(Fext(:,:,2),P(:,2),P(:,1));\r
26 % Interp2, can give nan's if contour close to border\r
27 Fext1(isnan(Fext1))=0;\r
28 \r
29 % Calculate the baloonforce on the contour points\r
30 N=GetContourNormals2D(P);\r
31 Fext2=delta*N;\r
32 \r
33 % Update contour positions\r
34 ssx = gamma*P(:,1) + Fext1(:,1) + Fext2(:,1);\r
35 ssy = gamma*P(:,2) + Fext1(:,2) + Fext2(:,2);\r
36 P(:,1) = B * ssx;\r
37 P(:,2) = B * ssy;\r
38 \r
39 % Clamp contour to boundary\r
40 P(:,1)=min(max(P(:,1),1),size(Fext,1));\r
41 P(:,2)=min(max(P(:,2),1),size(Fext,2));\r
42 \r
43     \r