纹理分割(四)Snakes相关知识备份

来源:互联网 发布:linux mysqldump 导入 编辑:程序博客网 时间:2024/05/17 02:05


这里主要是备份一些算法,和基础知识点,基本都是有关蛇模型/主动轮廓模型。


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;  endendender=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 =  27ender =   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 =  58ender =   -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 =  9ender =    0.9959    0.9877


0 0
原创粉丝点击