基于PDE的图像分割

基于偏微分方程的图像分割

比较常见的用于图像分割的 PDE 模型有蛇(Snake)模型、测地线活动轮廓模型(Geodesic activate contour, GAC)和 CV 模型。以下介绍这三种模型以及它们对应的梯度下降流。

一、蛇模型

蛇模型的方程为
E ( C ( p ) ) = ∫ 0 1 α ∣ C p ( p , t ) ∣ + β ∣ C p p ( p , t ) ∣ 2 − λ ∣ ∇ I ( C ( p ) ) ∣ d p E(C(p))=\int_0^1\alpha |C_p(p,t)|+\beta |C_{pp}(p,t)|^2-\lambda |\nabla I(C(p))|dp E(C(p))=01αCp(p,t)+βCpp(p,t)2λ∣∇I(C(p))dp
第一项是曲线弧长积分,最小化能量泛函也就是使得找到的闭合曲线尽可能的短。第二项是曲率,此项要求曲线尽可能光滑。第三项是找到使得图像梯度达到极大值的曲线,即使曲线停在图像的边缘上。因此最小化整个能量泛函可找到分割曲线。

matlab 实现

% =========================================================================  
%                   Snakes:Active Contour Models  
% =========================================================================  
% By gujinjin 2012/12/10-12  Sunny  
% 基于KASS等的论文思想  
% 参考文献:  
% [1] KASS etc.Snakes:Active Contour Models  
% [2] CSDN 博客 - Author:乐不思蜀Tone  
% [3] Ritwik Kumar(Harvard University),D.Kroon(Twente University)的程序  
% [4] 《数学建模与数学实验》  
% ------  忘了参考的那篇博客找到的代码了。。。。。如有作者看到,可以标记上参考。
clc;clf;clear all;  
  
% =========================================================================  
%                      获取手动取点坐标  
% =========================================================================  
% 读取显示图像  
%I = imread('Coronary_MPR.jpg');  
I =  imread('t2.jpg');  
% 转化为双精度型  
%I = im2double(I);   
% 若为彩色,转化为灰度  
if(size(I,3)==3), I=rgb2gray(I); end  
figure(1),imshow(I);  
%---------------------------  
%        高斯滤波  
%---------------------------  
sigma=1.0;  
% 创建特定形式的二维高斯滤波器H  
H = fspecial('gaussian',ceil(3*sigma), sigma);  
% 对图像进行高斯滤波,返回和I等大小矩阵  
Igs = filter2(H,I,'same');  
%---------------------------  
%      获取Snake的点坐标  
%---------------------------  
figure(2),imshow(Igs);  
x=[];y=[];c=1;N=100; %定义取点个数c,上限N  
% 获取User手动取点的坐标  
% [x,y]=getpts  
while c<N  
    [xi,yi,button]=ginput(1);  
    % 获取坐标向量  
    x=[x xi];  
    y=[y yi];  
    hold on  % 用来保持要画的图坐标不变
    % text(xi,yi,'o','FontSize',10,'Color','red');  
    plot(xi,yi,'ro');  
    % 若为右击,则停止循环  
    if(button==3), break; end  
    c=c+1;  
end  
  
% 将第一个点复制到矩阵最后,构成Snake环  
xy = [x;y];  
c=c+1;  
xy(:,c)=xy(:,1);  
% 样条曲线差值  
t=1:c;  
ts = 1:0.1:c;  
xys = spline(t,xy,ts);  % 按后面ts为查询点进行插值
xs = xys(1,:);  
ys = xys(2,:);  
% 样条差值效果  
hold on  
temp=plot(x(1),y(1),'ro',xs,ys,'b.');  
legend(temp,'原点','插值点');  
  
% =========================================================================  
%                     Snakes算法实现部分  
% =========================================================================  
NIter =1000; % 迭代次数  
alpha=0.2; beta=0.2; gamma = 1; kappa = 0.1;  
wl = 0; we=0.4; wt=0;  
[row col] = size(Igs);  
  
% 图像力-线函数  
Eline = Igs;  
% 图像力-边函数  
[gx,gy]=gradient(Igs);  
Eedge = -1*sqrt((gx.*gx+gy.*gy));  % 边缘
% 图像力-终点函数  
% 卷积是为了求解偏导数,而离散点的偏导即差分求解  
m1 = [-1 1];   
m2 = [-1;1];  
m3 = [1 -2 1];   
m4 = [1;-2;1];  
m5 = [1 -1;-1 1];  
cx = conv2(Igs,m1,'same');  
cy = conv2(Igs,m2,'same');  
cxx = conv2(Igs,m3,'same');  
cyy = conv2(Igs,m4,'same');  
cxy = conv2(Igs,m5,'same');  
  
for i = 1:row  
    for j= 1:col  
        Eterm(i,j) = (cyy(i,j)*cx(i,j)*cx(i,j) -2 *cxy(i,j)*cx(i,j)*cy(i,j) + cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j) + cy(i,j)*cy(i,j))^1.5);  
    end  
end  
  
%figure(3),imshow(Eterm);  
%figure(4),imshow(abs(Eedge));  
% 外部力 Eext = Eimage + Econ  
Eext = wl*Eline + we*Eedge + wt*Eterm;  
% 计算梯度  
[fx,fy]=gradient(Eext);  
  
xs=xs';  
ys=ys';  
[m n] = size(xs);  
[mm nn] = size(fx);  
  
% 计算五对角状矩阵  
% 附录: 公式(14) b(i)表示vi系数(i=i-2 到 i+2)  
b(1)=beta;  
b(2)=-(alpha + 4*beta);  
b(3)=(2*alpha + 6 *beta);  
b(4)=b(2);  
b(5)=b(1);  
  
A=b(1)*circshift(eye(m),2);  % circshift(A,K, m) 是循环移位函数,使得矩阵A移位K个,m决定行移位或列移位,m=1是列移,m=2是行移
A=A+b(2)*circshift(eye(m),1);  
A=A+b(3)*circshift(eye(m),0);  
A=A+b(4)*circshift(eye(m),-1);  
A=A+b(5)*circshift(eye(m),-2);  
% 以上操作构成了矩阵A
% 计算矩阵的逆  
[L U] = lu(A + gamma.* eye(m));  
Ainv = inv(U) * inv(L);   
  
% =========================================================================  
%                      画图部分  
% =========================================================================  
%text(10,10,'+','FontName','Time','FontSize',20,'Color','red');  
% 迭代计算  
figure(3)  
for i=1:NIter;  
    ssx = gamma*xs - kappa*interp2(fx,xs,ys);  % 二维网格数据插值,根据 xs ys对fx进行插值得到fx
    ssy = gamma*ys - kappa*interp2(fy,xs,ys);  
   
    % 计算snake的新位置  
    xs = Ainv * ssx;  
    ys = Ainv * ssy;  
      
    % 显示snake的新位置  
    imshow(I);   
    hold on;  
    plot([xs; xs(1)], [ys; ys(1)], 'r-');  
    hold off;  
    pause(0.001)      
end  

二、GAC模型

曲线演化理论的研究表明,曲线尽可能短的过程中就会逐渐光滑。因此蛇模型的第二项可以删去。另一方面,蛇模型不仅依赖曲线 C C C 的形状,还依赖于自由参数 p p p,这提升了方程的求解难度。1997年,V. Caselles等人提出了不含自由参数的 GAC 模型。具体如下:

首先,将自由参数用弧长参数 s s s 代替,有 d s = ∣ C p ∣ d p ds=|C_p|dp ds=Cpdp,此时,蛇模型的第一项便成为常值。另外,为了避免能量泛函中使用符号,引入单减非负函数 g g g 放入第三项。得到 GAC 模型
E ( C ( s ) ) = ∫ 0 L ( C ) g ( ∇ I ( C ( s ) ) ) d s E(C(s))=\int_0^{L(C)}g(\nabla I(C(s)))ds E(C(s))=0L(C)g(I(C(s)))ds
最小化 E ( C ( s ) ) E(C(s)) E(C(s)) 得到使得曲线落在使得图像 ∣ ∇ I ∣ |\nabla I| ∣∇I 极大值的位置,也就是图像边缘,从而达到分割的目的。

1、GAC 的梯度下降流

假设模型的解可以从某一初始位置迭代到达局部极小值,则求解模型的梯度下降流是必不可少的一步。

梯度下降流类似随机梯度下降法中的梯度,计算能量随时间的变化量,决定曲线演化的下一步方向及大小。

我们仍旧利用参数法表示闭合曲线 C , C ( p ) : [ 0 , 1 ] → R 2 , C ( 0 ) = C ( 1 ) C, C(p):[0,1]\rightarrow R^2, C(0)=C(1) C,C(p):[0,1]R2C(0)=C(1),则 GAC 模型重新写为
E ( C ( p ) ) = ∫ 0 1 g ( C ( p ) ) ∣ C p ∣ d p E(C(p))=\int_0^1g(C(p))|C_p|dp E(C(p))=01g(C(p))Cpdp
为了表示曲线随时间演化,引入时间变量 t t t
E ( C ( p , t ) ) = ∫ 0 1 g ( C ( p , t ) ) ∣ C p ( p , t ) ∣ d p E(C(p,t))=\int_0^1g(C(p, t))|C_p(p,t)|dp E(C(p,t))=01g(C(p,t))Cp(p,t)dp
求梯度
∂ E ∂ t = ∫ 0 1 d d t g ( C ( p , t ) ) ∣ C p ( p , t ) ∣ + g ( C ( p , t ) ) ⋅ d d t ∣ C p ( p , t ) ∣ d p = ∫ 0 1 ∇ g ⋅ C t ⋅ ∣ C p ∣ + g ⋅ C p ⋅ C p t ∣ C p ∣ d p = ∫ 0 1 ∇ g ⋅ C t ⋅ ∣ C p ∣ + g ⋅ T ⋅ C p t d p \begin{aligned} \frac{\partial E}{\partial t}&=\int_0^1\frac{d}{dt}g(C(p,t))|C_p(p,t)|+g(C(p,t))\cdot \frac{d}{dt}|C_p(p,t)|dp\\ &=\int_0^1\nabla g\cdot C_t\cdot |C_p|+g\cdot \frac{C_p\cdot C_{pt}}{|C_p|}dp\\ &=\int_0^1\nabla g\cdot C_t\cdot |C_p|+g\cdot \textbf T\cdot C_{pt}dp \end{aligned} tE=01dtdg(C(p,t))Cp(p,t)+g(C(p,t))dtdCp(p,t)dp=01gCtCp+gCpCpCptdp=01gCtCp+gTCptdp
T \textbf T T 表示曲线 C C C 的单位切向量,对上式第二项做分布积分,
∫ 0 1 g ⋅ T ⋅ C p t d p = ∫ 0 1 − { g ⋅ T } p ⋅ C t d t = ∫ 0 1 − ∇ g ⋅ C p ⋅ T ⋅ C t − g ⋅ T p ⋅ C t d p \begin{aligned} \int_0^1g\cdot \textbf T\cdot C_{pt}dp&=\int_0^1-\{g\cdot \textbf T\}_p\cdot C_tdt \\ &=\int_0^1-\nabla g\cdot C_p\cdot \textbf T \cdot C_t-g\cdot \textbf T_p\cdot C_tdp \end{aligned} 01gTCptdp=01{gT}pCtdt=01gCpTCtgTpCtdp
将此式带入上面梯度中,再有弧长参数 s s s 代替 p p p,得
∂ E ∂ t = ∫ 0 L ( C ) ( ∇ g − [ ∇ g ⋅ T ] T − g ⋅ T s ) ⋅ C t d s \frac{\partial E}{\partial t}=\int_0^{L(C)}(\nabla g-[\nabla g\cdot \textbf T]\textbf T-g\cdot \textbf T_s)\cdot C_tds tE=0L(C)(g[gT]TgTs)Ctds
由于
∇ g − [ ∇ g ⋅ T ] T = [ ∇ g ⋅ N ] N , T s = k N \nabla g-[\nabla g\cdot \textbf T]\textbf T=[\nabla g\cdot \textbf N]\textbf N, \textbf T_s=k\textbf N g[gT]T=[gN]N,Ts=kN
在这里插入图片描述
于是
∂ E ∂ t = ∫ 0 L ( C ) ( [ ∇ g ⋅ N ] N − g ⋅ k N ) ⋅ C t d s \frac{\partial E}{\partial t}=\int_0^{L(C)}([\nabla g\cdot \textbf N]\textbf N -g\cdot k\textbf N)\cdot C_tds tE=0L(C)([gN]NgkN)Ctds
当能量泛函达到稳定状态,即 ∂ E ∂ t = 0 \frac{\partial E}{\partial t}=0 tE=0 C t C_t Ct 需要满足
∂ C ∂ t = g ⋅ k N − [ ∇ g ⋅ N ] N \frac{\partial C}{\partial t}=g\cdot k\textbf N-[\nabla g\cdot \textbf N]\textbf N tC=gkN[gN]N
也就是负梯度方向。这就是 GAC 模型的梯度下降流。采用水平集方法进行求解。具体如下:
按水平集方法, β = g k − ∇ g ⋅ N , k = − d i v ( N ) = − d i v ( ∇ u ∣ ∇ u ∣ ) \beta=gk-\nabla g\cdot \textbf N, k=-div(\textbf N)=-div(\frac{\nabla u}{|\nabla u|}) β=gkgN,k=div(N)=div(∣∇uu),因此嵌入函数的梯度为
∂ u ∂ t = β ∣ ∇ u ∣ = ( g k − ∇ g ⋅ ∇ u ∣ ∇ u ∣ ) ⋅ ∣ ∇ u ∣ = ( − g d i v ( ∇ u ∣ ∇ u ∣ ) − ∇ g ⋅ ∇ u ∣ ∇ u ∣ ) ⋅ ∣ ∇ u ∣ = − d i v ( g ⋅ ∇ u ∣ ∇ u ∣ ) ⋅ ∣ ∇ u ∣ \begin{aligned} \frac{\partial u}{\partial t}&=\beta |\nabla u|=(gk-\nabla g\cdot \frac{\nabla u}{|\nabla u|})\cdot |\nabla u|\\ &=(-gdiv(\frac{\nabla u}{|\nabla u|})-\nabla g\cdot \frac{\nabla u}{|\nabla u|})\cdot |\nabla u|\\ &=-div(g\cdot \frac{\nabla u}{|\nabla u|})\cdot |\nabla u| \end{aligned} tu=β∣∇u=(gkg∣∇uu)∣∇u=(gdiv(∣∇uu)g∣∇uu)∣∇u=div(g∣∇uu)∣∇u
我这里的推导与书上差一个负号,不知道差在哪儿了。
以上方程即为水平集演化方程,接下来针对此方程进行数值离散,编码迭代计算即可求解。

2、matlab 实现

% 借鉴网址:https://www.math.hkust.edu.hk/~masyleung/Teaching/CAS/
function phi = GeodesicActiveContour( A, b, tfinal )

fileout = 5;    % number of intermediate output

dtout = tfinal/fileout;
time=0;
[m,n,p]=size(A);
xi=2:m+1;
yi=2:n+1;
phi=zeros(m+2,n+2);
B=zeros(m+2,n+2);
B(xi,yi)=A;

[x,y]=meshgrid(1:m,1:n);
xc=m/2;
yc=n/2;
r=min(m,n)/2*0.8;
phi(xi,yi) = sqrt((x-xc).^2+(y-yc).^2)-r; % 这里应该是做初始化
        
% g(I)
    
C = gaussian(B,2,5); % 做高斯滤波去噪
[gn,ge,gs,gw]=g(C,b);
    
imshow(uint8(A))
hold on
contour(phi(xi,yi),[0 0],'b')

while time < tfinal
    
    % du/dn=0 on the boundary
    
    phi(1,yi)= phi(2,yi);
    phi(end,yi)= phi(end-1,yi);
    phi(xi,1)= phi(xi,2);
    phi(xi,end)= phi(xi,end-1);
    
    Bn = phi(xi,yi+1);
    Be = phi(xi+1,yi);
    Bs = phi(xi,yi-1);
    Bw = phi(xi-1,yi);
    Bc = phi(xi,yi);
    
    [Gn,Ge,Gs,Gw] = NormGrad(phi,1e-5);    
    Gn = gn./Gn;
    Ge = ge./Ge;
    Gs = gs./Gs;
    Gw = gw./Gw;    
        
    % phi^k+1 = phi^k + dt * div[ g(I) grad(phi) / |grad(phi)| ] * |grad(phi)|
    
    temp = Gn.*Bn + Ge.*Be + Gs.*Bs + Gw.*Bw ...
        - (Gn+Ge+Gs+Gw).*Bc;
    
    temp = temp.* sqrt( (Bn-Bs).^2+(Be-Bw).^2 )/2;
    
    dt = 0.45;        
    dt = min(dt,tfinal-time);    
    time=time+dt;
    [time dt tfinal]
    
    phi(xi,yi)=phi(xi,yi)+dt*temp;

    % check for intermediate output
    
    if (floor(time/dtout) ~= floor((time-dt)/dtout) )
        figure
        imshow(uint8(A))
        hold on
        contour(phi(xi,yi),[0 0],'b')
    end
    
end

phi=phi(2:end-1,2:end-1);

return

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [gn,ge,gs,gw]=g(u,b)

% g(u)= 1/ (1+b |grad(u)|^2)

[m,n]=size(u);
xi=[2:m-1];
yi=[2:n-1];

uxp=u(xi+1,yi);
uxm=u(xi-1,yi);
uyp=u(xi,yi+1);
uym=u(xi,yi-1);
uc=u(xi,yi);

duxp=uxp-uc;
duxm=uc-uxm;
duyp=uyp-uc;
duym=uc-uym;

duxc=(duxp+duxm)/2;
duyc=(duyp+duym)/2;

gn=1./(1+b*(duxc.^2+duyp.^2));
ge=1./(1+b*(duxp.^2+duyc.^2));
gs=1./(1+b*(duxc.^2+duym.^2));
gw=1./(1+b*(duxm.^2+duyc.^2));

return

function [gn,ge,gs,gw]=NormGrad(u,eps)

% NormGrad(u)= |grad(u)|_eps

[m,n]=size(u);
xi=[2:m-1];
yi=[2:n-1];

uxp=u(xi+1,yi);
uxm=u(xi-1,yi);
uyp=u(xi,yi+1);
uym=u(xi,yi-1);
uc=u(xi,yi);

duxp=uxp-uc;
duxm=uc-uxm;
duyp=uyp-uc;
duym=uc-uym;

duxc=(duxp+duxm)/2;
duyc=(duyp+duym)/2;

gn=sqrt(duxc.^2+duyp.^2+eps^2);
ge=sqrt(duxp.^2+duyc.^2+eps^2);
gs=sqrt(duxc.^2+duym.^2+eps^2);
gw=sqrt(duxm.^2+duyc.^2+eps^2);

return

三、CV 模型

在图像中,对象与背景的区别可能会表现在平均灰度值的明显不同,因此 T.Chan 和 L.Vese 提出了以下能量泛函:
E ( c 1 . c 2 . C ) = μ ∮ C d s + λ 1 ∬ Ω 1 ( I − c 1 ) 2 d x d y + λ 2 ∬ Ω 2 ( I − c 2 ) 2 d x d y E(c_1.c_2. C)=\mu\oint_Cds+\lambda_1 \iint_{\Omega_1}(I-c_1)^2dxdy+\lambda_2 \iint_{\Omega_2}(I-c_2)^2dxdy E(c1.c2.C)=μCds+λ1Ω1(Ic1)2dxdy+λ2Ω2(Ic2)2dxdy
第二项、第三项分别计算实际图像与假定的“分片图像”之间的平均灰度值差异。下图显示了曲线 C C C 在不同位置时第二项与第三项的取值,可以看到只有当曲线 C C C 在对象边缘附近时,这两项同时达到最小值。
在这里插入图片描述
此图像来自知乎,也是 CV 模型进行说明时的经典图像。
CV 模型是基于区域的图像分割方法,也称为测地线活动区域(Geodesic activate region, GAR)模型.

CV 模型的梯度下降流

根据变分水平集方法,引入 Heaviside 函数
E ( c 1 , c 2 , C ) = μ ∬ Ω δ ( u ) ∣ ∇ u ∣ d x d y + λ 1 ∬ Ω 1 ( I − c 1 ) 2 H ( u ) d x d y + λ 2 ∬ Ω 2 ( I − c 2 ) 2 ( 1 − H ( u ) ) d x d y \begin{aligned} E(c_1,c_2, C)&=\mu\iint_\Omega \delta(u)|\nabla u|dxdy\\ &+\lambda_1 \iint_{\Omega_1}(I-c_1)^2H(u)dxdy\\ &+\lambda_2 \iint_{\Omega_2}(I-c_2)^2(1-H(u))dxdy \end{aligned} E(c1,c2,C)=μΩδ(u)∣∇udxdy+λ1Ω1(Ic1)2H(u)dxdy+λ2Ω2(Ic2)2(1H(u))dxdy
根据 c 1 , c 2 c_1, c_2 c1,c2 最小化上式
c i = ∬ Ω i I d x d y ∬ Ω i d x d y , i = 1 , 2 c_i=\frac{\iint_{\Omega_i}Idxdy}{\iint_{\Omega_i}dxdy},i=1,2 ci=ΩidxdyΩiIdxdy,i=1,2
每次迭代, c 1 , c 2 c_1, c_2 c1,c2是已知的,因此 c 1 , c 2 c_1, c_2 c1,c2固定时,上式的梯度下降流为
E ( u + ϵ v ) = μ ∬ Ω δ ( u + ϵ v ) ∣ ∇ ( u + ϵ v ) ∣ d x d y + λ 1 ∬ Ω 1 ( I − c 1 ) 2 H ( u + ϵ v ) d x d y + λ 2 ∬ Ω 2 ( I − c 2 ) 2 ( 1 − H ( u + ϵ v ) ) d x d y \begin{aligned} E(u+\epsilon v)&=\mu\iint_\Omega \delta(u+\epsilon v)|\nabla (u+\epsilon v)|dxdy\\ &+\lambda_1 \iint_{\Omega_1}(I-c_1)^2H(u+\epsilon v)dxdy\\ &+\lambda_2 \iint_{\Omega_2}(I-c_2)^2(1-H(u+\epsilon v))dxdy \end{aligned} E(u+ϵv)=μΩδ(u+ϵv)∣∇(u+ϵv)dxdy+λ1Ω1(Ic1)2H(u+ϵv)dxdy+λ2Ω2(Ic2)2(1H(u+ϵv))dxdy
E ϵ ′ = μ ∬ Ω δ ( u ) ∇ u + ϵ ∇ v ∣ ∇ u + ϵ ∇ v ∣ ⋅ ∇ v d x d y + λ 1 ∬ Ω 1 ( I − c 1 ) 2 δ ( u + ϵ v ) v d x d y − λ 2 ∬ Ω 2 ( I − c 2 ) 2 δ ( u + ϵ v ) ) v d x d y \begin{aligned} E^{'}_{\epsilon}&=\mu\iint_\Omega \delta(u)\frac{\nabla u+\epsilon \nabla v}{|\nabla u+\epsilon \nabla v|}\cdot \nabla vdxdy\\ &+\lambda_1 \iint_{\Omega_1}(I-c_1)^2\delta(u+\epsilon v)vdxdy\\ &-\lambda_2 \iint_{\Omega_2}(I-c_2)^2\delta(u+\epsilon v))vdxdy\\ \end{aligned} Eϵ=μΩδ(u)∣∇u+ϵvu+ϵvvdxdy+λ1Ω1(Ic1)2δ(u+ϵv)vdxdyλ2Ω2(Ic2)2δ(u+ϵv))vdxdy
E ϵ = 0 ′ = μ ∬ Ω − δ ( u ) d i v ( ∇ u ∣ ∇ u ∣ ) ⋅ v d x d y + λ 1 ∬ Ω 1 ( I − c 1 ) 2 δ ( u ) v d x d y − λ 2 ∬ Ω 2 ( I − c 2 ) 2 δ ( u ) ) v d x d y \begin{aligned} E^{'}_{\epsilon=0}&=\mu\iint_\Omega -\delta(u)div(\frac{\nabla u}{|\nabla u|})\cdot vdxdy\\ &+\lambda_1 \iint_{\Omega_1}(I-c_1)^2\delta(u)vdxdy\\ &-\lambda_2 \iint_{\Omega_2}(I-c_2)^2\delta(u))vdxdy\\ \end{aligned} Eϵ=0=μΩδ(u)div(∣∇uu)vdxdy+λ1Ω1(Ic1)2δ(u)vdxdyλ2Ω2(Ic2)2δ(u))vdxdy
对应的梯度下降流为
∂ u ∂ t = δ ϵ ( μ d i v ( ∇ u ∣ ∇ u ∣ ) − λ 1 ( I − c 1 ) 2 + λ 2 ( I − c 2 ) 2 ) \frac{\partial u}{\partial t}=\delta_\epsilon(\mu div(\frac{\nabla u}{|\nabla u|})-\lambda_1(I-c_1)^2+\lambda_2(I-c_2)^2) tu=δϵ(μdiv(∣∇uu)λ1(Ic1)2+λ2(Ic2)2)
最后同 GAC 模型一样,数值离散后迭代求解上式即可。变分水平集介绍即使用参见水平集方法

参考文献:《图像处理的偏微分方程方法》,王大凯,候榆青等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值