水平集方法(李春明)代码研究
最近研究了下水平集方法(李春明),记录代码运行笔记
算法流程:
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的更新,使得能量逐渐变小->图像分割
每天快乐敲代码,快乐生活