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

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

$\bf 关键词$: 图像复原; TV 模型; matlab 编程

1. 前言

图像在形成、传输和存储过程中中, 图像质量可能退化 (degradation). 而退化的图像可用数学模型: $$\bee\label{1:d} u_0=h_d*f+n \eee$$来描述, 其中

(1)$f(x,y)$ 是理想的图像;

(2)$h_d(x,y)$ 是成像系统的点弥散函数 (point-spread function, PSF), 理想的 PSF 为 $\delta(\cdot)$, 实际的 PSF 分为

(a)由散焦 (电子束扫描的点大小改变) 引起的模糊: $$\bex h_d(x,y)=e^{-\frac{x^2+y^2}{2\sigma^2}}, \eex$$

(b)大气湍流 (小尺度的扰动产生大尺度的运动状态的改变) 的影响: $$\bex \calF(h_d)(u,v)\equiv H(u,v)=e^{-k(u^2+v^2)^\frac{5}{6}}, \eex$$

(c)运动模糊: $$\bex H_d(u,v)=T\frac{\sin[\pi (au+bv)]}{\pi (au+bv)}e^{-j\pi (au+bv)}, \eex$$ 其中 $T$ 是快门 (shutter, 控制照相机曝光时间的机件) 时间, $(a,b)$ 是物体的速度;

(3)$n(x,y)$ 是加性噪声, 本文中采用以均值为零, 方差为 $\sigma$ 的 Gaussian 白噪声 (white gaussian noise, wgn).

图像复原 (image restoration) 就是根据已记录下的 $u_0$ 来恢复原始 $f$. 传统的复原方法主要是逆滤波 (inverse filtering) 或称去卷积 (deconvolution) (比如 Wiener 的去卷积滤波理论) 与有约束的最小二乘法.

现在简单介绍一下与 PDE 复原相关的有约束最小二乘法. 它的出发点是: 输出图像在满足 $$\bex \iint_\Omega \sev{h_d*u-u_0}^2\rd x\rd y=\const \eex$$ 的约束下 (输出图像比待处理图像更不模糊(图像处理的要求么), 所以模糊一下应该与待处理图像相差无几) 应尽可能光滑.

这样, 光滑的量度就是最小二乘法的关键. 传统的方法是以 $\dps{\iint_\Omega \sev{\n u}^2\rd x\rd y}$ 作为光滑量度, 但它与图像的固有特征——存在突变 (边缘)——不相容. 为此, Rudin, Osher 和 Fatime 首先提出以 $\dps{\iint_\Omega \sev{Du}}$ 作为光滑量度, 开创了全变分 (total variation, TV) 复原方法, 或称 ROF 方法. TV 方法的有点在于 BV 函数容许跳跃, 而二值图像 (或更一般的分片常数图像) 就为其一成员 ($\dps{\chi_E\in BV(\Omega)}$ 但 $\dps{\chi_E\not\in W^{1,2}(\Omega)}$).

2. 模型的建立

以 $\dps{\iint_\Omega\sev{Du}}$ 作为光滑量度的 TV 模型可表达为求以下泛函 $$\bee\label{2:E} E(u)=\iint_\Omega \sev{Du}+\frac{\lambda}{2} \iint_\Omega \sev{h_d*u-u_0}^2\rd x\rd y, \eee$$其中 $\lambda$ 是 Lagrange 乘子. 利用公式 $$\bex h(x)=h(-x)\ra \int f\cdot (g*h) =\int (f*h)\cdot g \eex$$ 我们知 \eqref{2:E} 之 Euler-Lagrange 方程为 $$\bee\label{2:s} -\Div\sex{\frac{\n u}{\sev{\n u}}} +\lambda h_d*\sex{h_d*u-u_0}=0, \eee$$对应的梯度下降流 (gradient descent flow, GDF) 为 $$\bee\label{2:e} \frac{\p u}{\p t}=\Div\sex{\frac{\n u}{\sev{\n u}}} -\lambda h_d*\sex{h_d*u-u_0}. \eee$$用 PDE \eqref{2:e} 来图像复原, 虽然有其优势 (相对于以 $\dps{\iint_\Omega\sev{\n u}^2\rd x\rd y}$ 为光滑量度的最小二乘法), 但

(1)一方面, 其时间步长须小, 而 CPU 开销大;

(2)另一方面, 不完全符合图像处理的形态学原则, 会产生阶梯 (staircase) 效应 ($\dps{\chi_E\in BV(\Omega)}$). 为了缓解上述两缺陷, Marquina 和 Osher 提出了如下改进: $$\bee\label{2:e_im} \frac{\p u}{\p t}=\sev{\n u}\Div\sex{\frac{\n u}{\sev{\n u}}} -\lambda \sev{\n u} h_d*\sex{h_d*u-u_0}. \eee$$\eqref{2:e_im} 的优势在于

(1)$\dps{\sev{\n u}\Div\sex{\frac{\n u}{\sev{\n u}}}=\kappa\sev{\n u}}$ 是非线性扩散项, 其与第二项——Hamilton-Jacobi (HJ) 项相结合, 数值计算所需的 CFL 条件放宽 (扩散项采用中心差分 (central difference), 而 HJ 项采用迎风格式 (upwind scheme));

(2)\eqref{2:e_im} 在单调灰度变换下保持不变, 而形态学原则近似满足(\eqref{2:e_im} 每项均含 $\sev{\n u}$, 这是图像的固有特征——边缘), 阶梯效应得以缓解.

3. 数值算法

\eqref{2:e_im} 可直接用显式方案 (explicit scheme) 求解: $$\bex u^{n+1}_{ij} =u^n_{ij} +\lap t\sex{P^n_{ij}+Q^n_{ij}}, \eex$$ 其中

(1)$P^n_{ij}$ 是扩散项中心差分的结果: $$\bex P^n_{ij} =\frac{ \sex{D^{(0)}_yu^n_{ij}}^2\cdot D^{(0)}_{xx}u^n_{ij} -2D^{(0)}_xu^n_{ij}\cdot D^{(0)}_yu^n_{ij} \cdot D^{(0)}_{xy}u^n_{ij} +\sex{D^{(0)}_xu^n_{ij}}^2 \cdot D^{(0)}_{yy}u^n_{ij} }{ \sex{D^{(0)}_xu^n_{ij}}^2 +\sex{D^{(0)}_yu^n_{ij}}^2 +\ve }; \eex$$

(2)$Q^n_{ij}$ 是 HJ 项迎风格式的结果: $$\bex Q^n_{ij} &=&-\lambda \beta^n_{ij}\sev{\delta u^n_{ij}}, \eex$$ $$\bex \beta^n_{ij}=\sex{h_d*\sex{h_d*u^n-u_0}}_{ij}, \eex$$ $$\bex \sev{\delta u^n_{ij}} &=&\max\sex{\beta^n_{ij},0}\\ & & \cdot\sqrt{\max\sex{D^{(-)}_xu^n_{ij},0}^2 +\min\sex{D^{(+)}_xu^n_{ij}}^2 \max\sex{D^{(-)}_yu^n_{ij},0}^2 +\min\sex{D^{(+)}_yu^n_{ij}}^2 }\\ & &+\min\sex{\beta^n_{ij},0}\\ & & \cdot\sqrt{\min\sex{D^{(-)}_xu^n_{ij},0}^2 +\max\sex{D^{(+)}_xu^n_{ij}}^2 \min\sex{D^{(-)}_yu^n_{ij},0}^2 +\max\sex{D^{(+)}_yu^n_{ij}}^2 }. \eex$$

4. 数值试验

用如下的 matlab 代码:

clear all;
close all;
clc;

N=1000;%迭代次数设置
D=200;%每迭代200次输出当前图像
nn=3;%输出图像个数初始化

I0=imread(‘lenna.bmp‘);
I0=double(I0);

figure(1);imshow(uint8(I0));

[ny,nx]=size(I0);

I0=gauss(I0,7,3);%gaussian 加噪
I0=I0+10*randn([ny,nx]);%加性噪声
figure(2);imshow(uint8(I0));

lambda=0.2;%Lagrange 乘子
dt=0.01;%时间步长
I=I0;%图像初始化,存储迎风方案结果
J=I0;%图像初始化,存储 Roe 迎风方案结果

%%迭代开始
for n=1:N
Ix=0.5*(I(:,[2:nx,nx])-I(:,[1,1:nx-1]));
Iy=0.5*(I([2:ny,ny],:)-I([1,1:ny-1],:));
gradient=Ix.^2+Iy.^2+eps;

Ix_back=I-I(:,[1,1:nx-1]);
Ix_forward=I(:,[2:nx,nx])-I;
Iy_back=I-I([1,1:ny-1],:);
Iy_forward=I([2:ny,ny],:)-I;

Ixx=(I(:,[2:nx,nx])-I)-(I-I(:,[1,1:nx-1]));
Ixy=0.25*((I([2:ny,ny],[2:nx,nx])-I([2:ny,ny],[1,1:nx-1]))...
-(I([1,1:ny-1],[2:nx,nx])-I([1,1:ny-1],[1,1:nx-1])));
Iyy=(I([2:ny,ny],:)-I)-(I-I([1,1:ny-1],:));

%%中心差分
diffusion=(Iy.^2.*Ixx-2*Ix.*Iy.*Ixy+Ix.^2.*Iyy)./gradient;

%%迎风方案
beta=gauss(gauss(I,7,3)-I0,7,3);

upwind=max(beta,0).*...
sqrt(...
max(Ix_back,0).^2+min(Ix_forward,0).^2 ...
+max(Iy_back,0).^2+min(Iy_forward,0).^2 ...
)...
+min(beta,0).*...
sqrt(...
min(Ix_back,0).^2+max(Ix_forward,0).^2 ...
+min(Iy_back,0).^2+max(Iy_forward,0).^2 ...
);

%%Roe 迎风格式
upwind_x=Ix_back;
upwind_x(beta.*Ix<0)=Ix_forward(beta.*Ix<0);

upwind_y=Iy_back;
upwind_y(beta.*Iy<0)=Iy_forward(beta.*Iy<0);

Roe_upwind=beta.*sqrt(upwind_x.^2+upwind_y.^2);

%%更新图像
I=I+dt*(diffusion-lambda*upwind);
J=J+dt*(diffusion-lambda*Roe_upwind);

%%输出图像
if mod(n,D)==0
figure(nn);
subplot(1,2,1);imshow(uint8(I));
subplot(1,2,2);imshow(uint8(J));
nn=nn+1;
end
end

就可对 Lenna 图像加噪并复原, 见下图:

这里我们调用了以下 matlab 函数对原图像进行 gaussian 加噪:

function Ig=gauss(I,window,sigma)

%%函数 guass() 实现 guassian 平滑滤波
%%参数说明
%%I --- 待平滑函数
%%window --- gaussian 核大小(奇数)
%%simga --- gaussian 方差
%%Ig --- 返回 guassian 平滑后的图像

[ny,nx]=size(I);

half_window=(window-1)/2;%方便取中心

if ny<half_window
x=(-half_window:half_window);
filter=exp(-x.^2/(2*sigma));%一维 guassian 函数
filter=filter/sum(filter);%归一化
%%图像扩展
xL=mean(I(:,[1:half_window]));
xR=mean(I(:,[nx-half_window+1,nx]));
I=[xL*ones(ny,half_window) I xR*ones(ny,half_window)];
%扩展成 nx + window -1 列
Ig=conv(I,filter);
%形成 (nx + window -1) + (window) -1 = nx + 2 (window-1) 列
Ig=Ig(:,window+half_window+1:nx+window+half_window);
%第一个卷积要全部用原图像的数据, 从而
%卷积中第 l 项用的图像数据最小值 = l-windows
% >=(windows-1)/2+1 = 原图像在扩展图像中的位置
else
%%二维卷积
x=ones(window,1)*(-half_window:half_window);%横坐标
y=x‘;%纵坐标

filter=exp(-(x.^2+y.^2/(2*sigma)));%二维 guassian 函数
filter=filter/(sum(sum(filter)));%归一化

%%图像扩展
if (half_window>1)
xLeft=mean(I(:,[1:half_window])‘)‘;
%matlab 是对列取平均的,返回行向量
xRight=mean(I(:,[nx-half_window+1:nx])‘)‘;
else
xLeft=I(:,1);
xRight=I(:,nx);
end

I=[xLeft*ones(1,half_window),I,xRight*ones(1,half_window)];

if (half_window>1)
xUp=mean(I([1:half_window],:));
xDown=mean(I([ny-half_window+1,ny],:));
else
xUp=I(1,:);
xDown=I(ny,:);
end

I=[ones(half_window,1)*xUp;I;ones(half_window,1)*xDown];

Ig=conv2(I,filter,‘valid‘);

end

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

时间: 2024-10-27 16:31:50

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

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

$\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 4.4 节的详细论述. $\bf 关键词$: 图像分割; 活动轮廓模型; matlab 编程 1 模型的建立 在图像中, 对象与背景的区别有时表现为平均灰度的明显不同. 由于这类图像既没有明显的边缘 ($\sev{\n I}$ 大), 也缺乏明显的纹理 (texture, 灰度变化有一定的规律, 并形成一定的 patten), 故测地线活动轮廓 (geodesic active contour, GAC, 或 snak

[家里蹲大学数学杂志]第260期华南师范大学2013年数学分析考研试题参考解答

1已给出一个函数的表达式 $F(x)$, 其为 $f(x)$ 的原函数, 求 $\dps{\int xf(x)\rd x}$. 解答: $$\beex \bea \int xf'(x)\rd x &=\int x\rd f(x)\\ &=xf(x)-\int f(x)\rd x\\ &=xF'(x)-F(x). \eea \eeex$$ 2已知 $$\bex \sum_{i=1}^{2k}(-1)^{i-1}a_i=0. \eex$$ 试证: $$\bex \ls{n}\sum_{

[家里蹲大学数学杂志]第262期广州大学2013年数学分析考研试题参考解答

一.($3\times 15'=45'$) 1.  求 $\dps{\ls{n}(a^n+b^n)^\frac{1}{n}}$, 其中 $a>b>0$. 解答: 由 $$\bex a<(a^n+b^n)^\frac{1}{n}<2^\frac{1}{n}a \eex$$ 及 $\dps{\ls{n}2^\frac{1}{n}=1}$ (参考第二大题第 4 小题), 夹逼原理知原极限 $=a$. 2.  求 $\dps{\lim_{x\to 0}\frac{\arctan x-x}{

[家里蹲大学数学杂志]第055期图像滤波中的方向扩散模型

$\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 5.4.1 节的详细论述. $\bf 关键词$: 图像滤波; 方向扩散模型; matlab 编程 1. 模型的建立 从保护图像边缘的观点出发, 我们希望扩散是沿着平行于边缘的切线方向 (即垂直于 $\n I$ 的方向) 进行. 于是得到如下 PDE: $$\bee\label{1:df} I_t=I_{\xi\xi}, \eee$$ 其中 $\xi(\perp \n I)$ 为单位矢量. 我们化简 \eqref{1:d

[家里蹲大学数学杂志]第053期Legendre变换

$\bf 题目$. 设 $\calX$ 是一个 $B$ 空间, $f:\calX\to \overline{\bbR}\sex{\equiv \bbR\cap\sed{\infty}}$ 是连续的凸泛函并且 $f(x)\not\equiv \infty$. 若定义 $f^*:\calX^*\to \overline{\bbR}$ 为 $$\bex f^*(x^*)=\sup_{x\in\calX}\sed{\sef{x^*,x}-f(x)}\quad\sex{\forall\ x^*\in \c

[家里蹲大学数学杂志]第056期Tikhonov 泛函的变分

设 $\scrX$, $\scrY$ 是 Hilbert 空间, $T\in \scrL(\scrX,\scrY)$, $y_0\in\scrY$, $\alpha>0$. 则 Tikhonov 泛函 $$\bee\label{T} J_\alpha(x)=\sen{Tx-y_0}^2+\alpha\sen{x}^2\quad \sex{x\in \scrX} \eee$$存在唯一最小解 $x^\alpha\in \scrX$, 且 $x^\alpha$ 适合 Euler-Lagrange 方程

[家里蹲大学数学杂志]第039期高等数学习题集

同济大学数学系主编, 高等数学 . 第二版, 下册. 2009年, 同济大学出版社. 7 空间解析几何与向量代数 7.5 空间直线及其方程 1(3). 求过点 P(2,-3,3) 且与平面 \pi: x+2y-3z-2=0 垂直的直线 l 的方程. 解答: 直线 l 过点 P(2,-3,3) , 且方向向量与平面法向量 {\bf n}=\sed{1,2,-3} 平行, 为 {\bf s}=\sed{1,2,-3} . 故其方程为 \bex \cfrac{x-2}{1}=\cfrac{y+8}{2

[家里蹲大学数学杂志]第187期实数集到非负实数集的双射有无穷多个间断点

设 $f:(-\infty,+\infty)\to [0,\infty)$ 是双射, 证明: $f$ 有无穷多个间断点. 证明: 用反证法. 若 $f$ 仅有有穷多个间断点 $x_1<x_2<\cdots<x_n$. 则 $f$ 在 $(x_{i-1},x_i)\ (i=1,\cdots,n+1, x_0=-\infty, x_{n+1}=+\infty)$ 上连续单射. 由此不难推出 $f$ 在 $(x_{i-1},x_i)$ 上严格单调\footnote{否则, $\exists\

[家里蹲大学数学杂志]第051期乘积与复合函数的高阶微分

1 对 $k$ 阶连续可微函数 $f$, $g$, Leibniz 告诉我们 $$\bex D^k_x(fg)=\sum_{s=0}^k\frac{k!}{(k-s)!s!}D^{k-s}_x(f)\cdot D^s_x(g). \eex$$ 2 对复合函数 $f(y(x))$, Fa\'a de Bruno 于 1857 年告诉我们 $$\bee\label{Bruno} D^k_x(f) =\sum \frac{k!}{l_1!l_2!\cdots l_k!} f^{(p)} \sex{\f