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

ゝ一世哀愁。 2022-09-22 03:43 219阅读 0赞

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

  1. 梯度下降法

有关基础知识,这里不赘述了,有关代码转过来,备份一下。

原作地址: http://www.tuicool.com/articles/e6VzIz

steepest.m

  1. function [k ender]=steepest(f,x,e)
  2. %梯度下降法,f为目标函数(两变量x1x2),x为初始点,如[3;4]
  3. syms x1 x2 m; %m为学习率
  4. d=-[diff(f,x1);diff(f,x2)]; %分别求x1x2的偏导数,即下降的方向
  5. flag=1; %循环标志
  6. k=0; %迭代次数
  7. while(flag)
  8. d_temp=subs(d,x1,x(1)); %将起始点代入,求得当次下降x1梯度值
  9. d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
  10. nor=norm(d_temp); %范数
  11. if(nor>=e)
  12. x_temp=x+m*d_temp; %改变初始点x的值
  13. f_temp=subs(f,x1,x_temp(1)); %将改变后的x1x2代入目标函数
  14. f_temp=subs(f_temp,x2,x_temp(2));
  15. h=diff(f_temp,m); %对m求导,找出最佳学习率
  16. m_temp=solve(h); %求方程,得到当次m
  17. x=x+m_temp*d_temp; %更新起始点x
  18. k=k+1;
  19. else
  20. flag=0;
  21. end
  22. end
  23. ender=double(x); %终点
  24. end

调用的方法这样的:

案例一:

  1. syms x1 x2;
  2. f=(x1-2)^2+2*(x2-1)^2;
  3. x=[1;3];
  4. e=10^(-20);
  5. [k ender]=steepest(f,x,e)

结果是:

  1. k =
  2. 27
  3. ender =
  4. 2
  5. 1

案例二:

  1. syms x1 x2;
  2. f=x1-x2+2*x1^2+2*x1*x2+x2^2;
  3. x=[0;0];
  4. e=10^(-20);
  5. [k ender]=steepest(f,x,e)

结果:

  1. k =
  2. 58
  3. ender =
  4. -1.0000
  5. 1.5000

案例三:

  1. syms x1 x2;
  2. f=3/2*x1^2+1/2*x2^2-x1*x2-2*x1;
  3. x=[0;0];
  4. e=10^(-2);
  5. [k ender]=steepest(f,x,e)

结果:

  1. k =
  2. 9
  3. ender =
  4. 0.9959
  5. 0.9877

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读

    相关 基于Gabor滤波器的纹理分割

    Gabor变换是一种短时傅里叶变换方法,其实质是在傅里叶变换中加入一个窗函数,通过窗函数来实现信号的时频分析。当选取高斯函数作为窗函数时,短时傅里叶变换称为Gabor变换。在一

    相关 Snake 算法

    分享一下我老师大神的人工智能教程!零基础,通俗易懂![http://blog.csdn.net/jiangjunshow][http_blog.csdn.net_jiangju