水平集方法(李春明)代码研究

最近研究了下水平集方法(李春明),记录代码运行笔记


算法流程:
1.图像灰度化,归一化,乘以255得到Img.
2.初始化水平集方程

initialLSF = c0*ones(size(Img));
initialLSF(30:90,50:90) = -c0;
u=initialLSF;

3.初始化偏置域b
4.KI:对图像高斯滤波,KONE:对偏置进行高斯滤波

5.循环执行lse_bfe函数
能量最小化分为三个部分:
a)更新c

C =updateC(Img, u, KB1, KB2, epsilon);
第二行是公式23
C_new(kk) = sum(Nm2(:))/sum(Dn2(:));

KB1同KONE,KB2是对偏置域b的平方的高斯滤波

b)更新u(水平集方程)

u = updateLSF(Img,u, C, KONE_Img, KB1, KB2, mu, nu, timestep, epsilon, iter_lse);
% 公式17
e(:,:,kk) = KONE_Img - 2*Img.*C(kk).*KB1 + C(kk)^2*KB2;
 %公式22右边第一部分
ImageTerm=-DiracU.*(e(:,:,1)-e(:,:,2));
penalizeTerm=mu*(4*del2(u)-K);
%公式22右边第二部分     
lengthTerm=nu.*DiracU.*K;
u=u+timestep*(lengthTerm+penalizeTerm+ImageTerm);

c)更新b(偏置域)

b =updateB(Img, C, M,  Ksigma);
%方程24
b = KNm1./KDn1;

原图:

分割图:

偏置b校正后图像:

总结:
程序在每个循环进行水平集方程、c、b的更新,使得能量逐渐变小->图像分割

posted @ 2020-11-06 10:18  快乐码小农  阅读(870)  评论(0编辑  收藏  举报