紋理分割(四)Snakes相關知識備份
阿新 • • 發佈:2018-11-02
這裡主要是備份一些演算法,和基礎知識點,基本都是有關蛇模型/主動輪廓模型。
1. 梯度下降法
有關基礎知識,這裡不贅述了,有關程式碼轉過來,備份一下。
原作地址: http://www.tuicool.com/articles/e6VzIz
steepest.m
function [k ender]=steepest(f,x,e) %梯度下降法,f為目標函式(兩變數x1和x2),x為初始點,如[3;4] syms x1 x2 m; %m為學習率 d=-[diff(f,x1);diff(f,x2)]; %分別求x1和x2的偏導數,即下降的方向 flag=1; %迴圈標誌 k=0; %迭代次數 while(flag) d_temp=subs(d,x1,x(1)); %將起始點代入,求得當次下降x1梯度值 d_temp=subs(d_temp,x2,x(2)); %將起始點代入,求得當次下降x2梯度值 nor=norm(d_temp); %範數 if(nor>=e) x_temp=x+m*d_temp; %改變初始點x的值 f_temp=subs(f,x1,x_temp(1)); %將改變後的x1和x2代入目標函式 f_temp=subs(f_temp,x2,x_temp(2)); h=diff(f_temp,m); %對m求導,找出最佳學習率 m_temp=solve(h); %求方程,得到當次m x=x+m_temp*d_temp; %更新起始點x k=k+1; else flag=0; end end ender=double(x); %終點 end
呼叫的方法這樣的:
案例一:
syms x1 x2;
f=(x1-2)^2+2*(x2-1)^2;
x=[1;3];
e=10^(-20);
[k ender]=steepest(f,x,e)
結果是:
k =
27
ender =
2
1
案例二:
syms x1 x2;
f=x1-x2+2*x1^2+2*x1*x2+x2^2;
x=[0;0];
e=10^(-20);
[k ender]=steepest(f,x,e)
結果:
k =
58
ender =
-1.0000
1.5000
案例三:
syms x1 x2; f=3/2*x1^2+1/2*x2^2-x1*x2-2*x1; x=[0;0]; e=10^(-2); [k ender]=steepest(f,x,e)
結果:
k =
9
ender =
0.9959
0.9877