$\bf 摘要$: 本文给出了王大凯等编的《图像处理中的偏微分方程方法》第 4.4 节的详细论述.

$\bf 关键词$: 图像分割; 活动轮廓模型; matlab 编程

1 模型的建立

在图像中, 对象与背景的区别有时表现为平均灰度的明显不同. 由于这类图像既没有明显的边缘 ($\sev{\n I}$ 大), 也缺乏明显的纹理 (texture, 灰度变化有一定的规律, 并形成一定的 patten), 故测地线活动轮廓 (geodesic active contour, GAC, 或 snake) 模型不能成功地实现图像分割.

为此, T. Chan 与 L. Vese 提出了如下的能量泛函: $$\bee\label{1:E} E(c_1,c_2,C)\equiv \mu\oint_C\rd s +\lambda_1\iint_{\Omega_1} (I-c_1)^2\rd x\rd y +\lambda_2\iint_{\Omega_2} (I-c_2)^2\rd x\rd y, \eee$$ 其中

(1) $\mu>0$, $\lambda_1$, $\lambda_2>0$ 是各比分的权重;

(2) 曲线 $C$ 是简单的, 并将这个图像区域 $\Omega$ 分为内外两部分, 分别记为 $\Omega_1$, $\Omega_2$;\

(3) $c_1$, $c_2$ 是两常数, 表分片常数图像.

此模型的特点是

(1)    一方面使边界曲线最短;

(2)    另一方面使背景 $(\Omega_2)$ 与对象 $(\Omega_1)$ 区别开来 (\eqref{1:E} 中的后两项). 这称作无边缘活动轮廓 (active contour without edge, C-V, 或 GAR) 模型.

引入 $\delta$ 函数, 将 $E$ 写成 $$\bee\label{1:Eu}\bea E(c_1,c_2,u) &=\mu\iint_\Omega \delta(u)\sev{\n u}\rd x\rd y\\ &\quad+\lambda_1\iint_{\Omega_1}(I-c_1)^2\sez{1-H(u)}\rd x\rd y +\lambda_2\iint_{\Omega_2}(I-c_2)^2H(u)\rd x\rd y, \eea\eee$$ 其中

(1) $\delta(\cdot)$ 为 Dirac $\delta$ 函数, 其有光滑逼近元 $$\bex \delta_\ve(x)=\frac{1}{\pi}\cdot\frac{\ve}{x^2+\ve^2}\quad \sex{0<\ve\ll 1}; \eex$$

(2) $\sev{\n u}$ 是变换之 Jacobian;

(3) $H(\cdot)$ 是 Heaviside 函数: $$\bex H(z)=\left\{\ba{ll} 1,&z\geq 0,\\ 0,&z<0, \ea\right. \eex$$ 其有光滑逼近元 $$\bex H_\ve(z)=\frac{1}{2}+\frac{1}{\pi}\arctan \frac{z}{\ve}, \eex$$ 且 $$\bex H'(z)=\delta(z),\quad\mbox{ 在 }\mathcal{D}'(\bbR)\mbox{ 上}. \eex$$

(4) 在函数 $u$ 固定的条件下, 由 $$\bex \iint_{\Omega_1} (I-c_1)^2\rd x\rd y =c_1^2\iint_{\Omega_1}\rd x\rd y -2c_1\iint_{\Omega_1}I\rd x\rd y +\iint_{\Omega_1}I^2\rd x\rd y, \eex$$ $$\bex \iint_{\Omega_2} (I-c_2)^2\rd x\rd y =c_2^2\iint_{\Omega_2}\rd x\rd y -2c_2\iint_{\Omega_2}I\rd x\rd y +\iint_{\Omega_2}I^2\rd x\rd y, \eex$$ 及二次函数的性质知当且仅当 $$\bee\label{1:c1c2} c_1=\frac{\iint_{\Omega_1}I\rd x\rd y}{\iint_{\Omega_1}\rd x\rd y},\quad c_2=\frac{\iint_{\Omega_2}I\rd x\rd y}{\iint_{\Omega_2}\rd x\rd y} \eee$$ 时, $E$ 取得最小.

现在, 写出 \eqref{1:Eu} 的变分 (variation) 如下 $$\bex \frac{\delta E}{\delta u} =-\mu \delta(u)\Div\sex{\frac{\n u}{\sev{\n u}}} -\lambda_1\delta(u)(I-c_1)^2 +\lambda_2\delta(u)(I-c_2)^2. \eex$$

从而梯度下降流为 $$\bee\label{1:gdf} \frac{\p u}{\p t} =-\frac{\delta E}{\delta u} =\mu \delta(u)\Div\sex{\frac{\n u}{\sev{\n u}}} +\lambda_1\delta(u)(I-c_1)^2 -\lambda_2\delta(u)(I-c_2)^2. \eee$$

2.数值算法

为计算方便, 须离散化, 而用 $\delta_\ve$ 替代 $\delta$. 这样, 用半隐式 (semi-implicit) 方案: $$\bee\label{2:scheme} u^{n+1}_{ij} =u^n_{ij} +\tau \delta_\ve(u^n_{ij}) \sez{\mu Q(u^{n+1}_{ij})+(I_{ij}-c^n_1)^2-(I_{ij}-c^n_2)^2}, \eee$$ 其中已选 $\lambda_1=\lambda_2=1$, $Q(u^{n+1}_{ij})$ 采用向前向后差分相结合的格式: $$\bex Q(u_{ij}) &=D^{(+)}_x\sex{g_{ij}D^{(-)}_x u_{ij}} +D^{(+)}_y\sex{g_{ij}D^{(-)}_yu_{ij}}\quad\sex{g_{ij}=\frac{1}{\sev{\n u}_{ij}}}\\ &=g_{i,j+1}D^{(-)}_xu_{i,j+1} -g_{i,j}D^{(-)}_xu_{ij} +g_{i+1,j}D^{(-)}_yu_{i+1,j} -g_{ij}D^{(-)}_yu_{ij}\\ &=g_{i,j+1}\sex{u_{i,j+1}-u_{ij}} -g_{ij}\sex{u_{ij}-u_{i,j-1}}\\ &  +g_{i+1,j}\sex{u_{i+1,j}-u_{ij}} -g_{ij}\sex{u_{ij}-u_{i-1,j}}\\ &=\sez{g_{i,j+1}u_{i,j+1}+g_{ij}u_{i,j-1} +g_{i+1,j}u_{i+1,j}+g_{ij}u_{i-1,j}}\\ & -\sex{g_{i,j+1}+g_{ij}+g_{i+1,j}+g_{i,j}}u_{ij}, \eex$$ 且为保证计算的稳定性, 我们采用半隐式方案求解: $$\bee\label{2:Q}\bea Q(u^{n+1}_{ij}) &=\sez{g^n_{i,j+1}u^n_{i,j+1}+g^n_{ij}u^n_{i,j-1} +g^n_{i+1,j}u^n_{i+1,j}+g^n_{ij}u^n_{i-1,j}}\\ & +\sex{g^n_{i,j+1}+g^n_{ij}+g^n_{i+1,j}+g^n_{i,j}}u^{n+1}_{ij},  \eea\eee$$ 其中 $g^n_{ij}$ 的选取如下 (依赖于其对应的 $u_{ij}$, 一个方向上用向前或向后差分, 另一个方向上用中心差分):

(1)$u^n_{i,j+1}$ 的系数 $$\bex C_1\equiv g_{i,j+1} =\frac{1}{\sqrt{\sex{ u_{i,j+1}-u_{ij} }^2+\sex{\frac{ u_{i+1,j+1}-u_{i-1,j+1} }{2}}^2}}; \eex$$

(2)$u^n_{i,j-1}$ 的系数 $$\bex C_1\equiv g_{i,j+1} =\frac{1}{\sqrt{\sex{ u_{ij}-u_{i,j-1} }^2+\sex{\frac{ u_{i+1,j-1}-u_{i-1,j-1} }{2}}^2}}; \eex$$

(3)$u^n_{i+1,j}$ 的系数 $$\bex C_1\equiv g_{i,j+1} =\frac{1}{\sqrt{\sex{ u_{i+1,j}-u_{ij} }^2+\sex{\frac{ u_{i+1,j+1}-u_{i+1,j-1} }{2}}^2}}; \eex$$

(4)$u^n_{i-1,j}$ 的系数 $$\bex C_1\equiv g_{i,j+1} =\frac{1}{\sqrt{\sex{ u_{ij}-u_{i-1,j} }^2+\sex{\frac{ u_{i-1,j+1}-u_{i-1,j-1} }{2}}^2}}. \eex$$ 把 \eqref{2:Q} 代入 \eqref{2:scheme}, 得 $$\bex & \sez{1+\mu\tau \delta_\ve(u^n_{ij})} u^{n+1}_{ij}=u^n_{ij} +\tau \delta_\ve(u^n_{ij})\cdot\\ & \quad\cdot \sez{ \mu\sex{ C_1u^n_{i,j+1} +C_2u^n_{i,j-1} +C_3u^n_{i+1,j} +C_4u^n_{i-1,j} } +(I_{ij}-c^n_1)^2 -(I_{ij}-c^n_2)^2 }, \eex$$ 其中 $c^n_1$, $c^n_2$ 由 \eqref{1:c1c2} 离散化而来: $$\bex c^n_1 =\frac{ \sum_{ij}I_{ij}\sez{1-H_\ve\sex{u^n_{ij}}} }{ \sum_{ij}\sez{1-H_\ve\sex{u^n_{ij}}} },\quad c^n_2 =\frac{ \sum_{ij}I_{ij}H_\ve\sex{u^n_{ij}} }{ \sum_{ij}H_\ve\sex{u^n_{ij}} }. \eex$$

3. 数值试验

选取 $\ve=1.0$, $\mu=250$, $\tau=0.1$, 则通过如下的 matlab 代码: clear all;

close all;

clc;

Img=imread('brain.bmp');

Img=double(RGB2gray(Img));

figure(1);

imshow(uint8(Img));

[ny,nx]=size(Img);%获取图像大小

%%将初始曲线设为圆

%初始圆的圆心

c_i=floor(ny/2);

c_j=floor(nx/2);

%初始圆的半径

r=c_i/3;

%%初始化u为距离函数

u=zeros([ny,nx]);

for i=1:ny

for j=1:nx

u(i,j)=r-sqrt((i-c_i).^2+(j-c_j).^2);

end

end

%%将初始圆形曲线叠加在原始图片上

figure(2);

imshow(uint8(Img));

hold on;

[c,h]=contour(u,[0 0],'r');

%%初始化参数

epsilon=1.0;%Heaviside函数参数设置

mu=250;%弧长的权重

dt=0.1;%时间步长

nn=0;%输出图像个数初始化

%%迭代计算开始

for n=1:1000

%%计算正则化的Heaviside函数

H_u=0.5+1/pi.*atan(u/epsilon);

%%由当前u计算出参数c1,c2

c1=sum(sum((1-H_u).*Img))/sum(sum(1-H_u));

c2=sum(sum(H_u.*Img))/sum(sum(H_u));

%%用当前c1,c2更新u

delta_epsilon=1/pi*epsilon/(pi^2+epsilon^2);%delta函数的正则化

m=dt*delta_epsilon;%临时参数m存储时间步长与delta函数的乘积

%%计算四邻点的权重

C1=1./sqrt(eps+(u(:,[2:nx,nx])-u).^2

+0.25*(u([2:ny,ny],:)-u([1,1:ny-1],:)).^2);

C2=1./sqrt(eps+(u-u(:,[1,1:nx-1])).^2

+0.25*(u([2:ny,ny],[1,1:nx-1])-u([1,1:ny-1],[1,1:nx-1])).^2);

C3=1./sqrt(eps+(u([2:ny,ny],:)-u).^2

+0.25*(u([2:ny,ny],[2:nx,nx])-u([2:ny,ny],[1,1:nx-1])).^2);

C4=1./sqrt(eps+(u-u([1,1:ny-1],:)).^2

+0.25*(u([1,1:ny-1],[2:nx,nx])-u([1,1:ny-1],[1,1:nx-1])).^2);

C=1+mu*m.*(C1+C2+C3+C4);

u=(u+m*

(mu*(C1.*u(:,[2:nx,nx])+C2.*u(:,[1,1:nx-1])

+C3.*u([2:ny,ny],:)+C4.*u([1,1:ny-1],:))

+(Img-c1).^2-(Img-c2).^2)

)./C;

%%每运行两百次显示曲线和分片常数曲线

if mod(n,200)==0

nn=nn+1;

f=Img;

f(u>0)=c1;

f(u<0)=c2;

figure(nn+2);

subplot(1,2,1);imshow(uint8(f));

subplot(1,2,2);imshow(uint8(Img));

hold on;

[c,h]=contour(u,[0,0],'r');

hold off;

end

end

就可实现对人的大脑切片的分割, 见下图:

注记:

1.为书写方便, matlab 程序中有的部分已经分断开来, 比如 $C_1,\cdots,C_4$ 及 $u$, 您在书写的时候可不能分段哦.

2.从上述程序可以看到在 matlab 中多用矩阵运算比单纯的迭代运算起来快得多.

4. 致谢

The author would like to thank Dr. S.J. Li and Dr. P. Li for suggesting the book by D.K. Wang and etc. And special thank goes to Dr. P. Li for exploiting this matlab procedure.

[家里蹲大学数学杂志]第054期图像分割中的无边缘活动轮廓模型相关推荐

  1. [家里蹲大学数学杂志]第057期图像复原中的改进 TV 模型

    $\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 6.2 节的详细论述. $\bf 关键词$: 图像复原; TV 模型; matlab 编程 1. 前言 图像在形 ...

  2. [家里蹲大学数学杂志]第390期中国科学院大学2014-2015-1微积分期末考试试题参考解答...

    1. ($5'$) 利用 $\ve-N$ 语言证明 $$\bex \vlm{n}\frac{2015\cdot 2^n+20\sin n}{n!}=0. \eex$$ 证明: 对 $\forall\ ...

  3. [家里蹲大学数学杂志]第264期武汉大学2013年数学分析考研试题参考解答

    因为还是有人到处传来传去,所以收回了, 要见请看: 家里蹲大学数学杂志目录

  4. [家里蹲大学数学杂志]第265期武汉大学2013年高等代数考研试题参考解答

    因为还是有人到处传来传去,所以收回了, 要见请看: 家里蹲大学数学杂志目录

  5. [家里蹲大学数学杂志]第266期中南大学2013年高等代数考研试题参考解答

    因为还是有人到处传来传去,所以收回了, 要见请看: 家里蹲大学数学杂志目录

  6. [家里蹲大学数学杂志]第048期普林斯顿高等研究所的疯子们

    文心孤竹发帖, 张祖锦整理如下 1 头号大疯子---Albert Einstein(爱因斯坦) 最近在构思写一写普林斯顿高等研究所的疯子们. 本来想先谈谈第一任院长, 可以没找到照片, 所以转而谈里面 ...

  7. [家里蹲大学数学杂志]第410期定积分难题

    1. (1). 设 $x\geq 0$, $n$ 为自然数, 证明: $$\bex x^n\geq n(x-1)+1; \eex$$ (2). $\forall\ n$, 求证: $$\bex \in ...

  8. [家里蹲大学数学杂志]第284期李大潜秦铁虎编著物理学与偏微分方程笔记

    上册 [物理学与PDEs]第1章 电动力学 [物理学与PDEs]第1章习题参考解答 [物理学与PDEs]第2章 流体力学 [物理学与PDEs]第2章习题参考解答 [物理学与PDEs]第3章 磁流体力学 ...

  9. [家里蹲大学数学杂志]第254期第五届[2013年]全国大学生数学竞赛[数学类]试题

    1 ($15'$) 平面 $\bbR^2$ 上两个半径为 $r$ 的圆 $C_1$ 和 $C_2$ 外切于 $P$ 点, 将圆 $C_2$ 沿 $C_1$ 的圆周 (无滑动) 滚动一周, 这时, $C ...

最新文章

  1. linux系统运行flash3d,真正的3D操作系统,太强了
  2. OSPF如何选举DR/BDR规则
  3. SAP Cloud Connector的介绍
  4. java学习(165):inetaddress和inetsocketaddress
  5. 我的第一句__asm 语句[很简单]
  6. Centos7 安装 maven
  7. 离散元 python_离散元在土木工程领域的应用前景如何?
  8. 数据结构与算法面试题80道(35)
  9. win10开机,内存占用过高
  10. c++11 多线程编程(五)------unique_lock
  11. svn指定版本代码对比的方法
  12. 【2021自我知识蒸馏】Extracting knowledge from features with multilevel abstraction
  13. 无人机飞行模式(Ardupilot和MAVLink协议)(STABILIZE、ALTITUDE HOLD、LOITER、GUIDE、AUTO、LAND、RTL)
  14. Python解二元一次方程
  15. 回收站删除的文件怎么恢复?
  16. 删除文本中重复的单词
  17. 广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
  18. 全球与中国高尔夫旅游市场现状及未来发展趋势
  19. Unrecognized option: --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED 解决办法
  20. 智能家居前装好还是后装好?哪个才是全屋智能更好的选择?

热门文章

  1. 计算机专业毕业实习重要吗?计算机专业实习方向
  2. yolo3训练时的问题
  3. 浅谈二维码和一维码有何区别
  4. 【创业项目】懒人科技16平台多功能挂机软件广告掘金项目,单机一天20+【挂机脚本+技术教程】
  5. K13186 点兵点将2
  6. LAGRANGIAN FLUID SIMULATION WITH CONTINUOUS CONVOLUTIONS
  7. 智能化无线网关安全审计系统
  8. java枚举类型多属性的应用
  9. Cache – 主存的地址映射及相关计算问题
  10. android 动态向下箭头,向上/向下箭头添加到android numberpicker