热方程图像去噪原理以及Matlab代码实现
初学图像,不足之处请指正
本文主要分成两个部分
1. 原理,偏微分方程给图像去噪
首先我们考虑一类偏微分方程———热传导方程,他描述了一个区域内温度在一段时间的变化情况,热方程的解是具有将初始温度平滑的性质的,既温度的由高到低的传播过程,二维热方程的表达式为:
{
u
t
(
x
,
y
,
t
)
=
Δ
u
(
x
,
y
,
t
)
u
(
x
,
y
,
0
)
=
u
(
x
,
y
)
\left\{ \begin{aligned} u_t(x,y,t) = \Delta u(x,y,t)\\ u(x,y,0) = u(x,y) \end{aligned} \right.
{ut(x,y,t)=Δu(x,y,t)u(x,y,0)=u(x,y)
如果将图像看成一种能量分布,则亮的区域就代表温度高的区域,暗的区域代表温度低的区域,通过热方程,亮的区域会逐渐变暗,暗的区域会逐渐变亮,这样能量分布就会越来越均匀,相应地,图像也就会变得越来越光滑。
现在我们将方程离散化,设t时刻的图像方程为
u
i
,
j
t
,
u^t_{i,j},
ui,jt,
时间离散为
t
1
,
t
2
,
.
.
,
t
n
t_1,t_2,..,t_n
t1,t2,..,tn,利用五点差分格式则偏导数可写成如下格式
u
i
,
j
t
n
−
u
i
,
j
t
n
−
1
τ
=
1
h
2
(
u
i
+
1
,
j
+
u
i
−
1
,
j
+
u
i
,
j
+
1
+
u
i
,
j
−
1
−
4
u
i
,
j
)
\frac{u^{t_n}_{i,j}-u^{t_n-1}_{i,j}}{\tau}=\frac{1}{h^2}(u_{i+1,j}+u_{i-1,j}+u_{i,j+1}+u_{i,j-1}-4u_{i,j})
τui,jtn−ui,jtn−1=h21(ui+1,j+ui−1,j+ui,j+1+ui,j−1−4ui,j)
其中
τ
\tau
τ和
h
h
h是很小的时间间隔和步长间隔。
2. Matlab程序编码示例
首先将图片读入MATLAB内存空间,既输入如下代码:
I0 = imread('D:\Users\cc\Documents\Pictures\Saved Pictures\77.jpg');
I1 = rgb2gray(I0);
根据离散化的方程编写程序代码:
u = double(I1);
[m,n] = size(u);
k = 10;
dt = 0.25;
dh = 1;
cc = ceil(n/2);
kk = u(:,cc);
In = double(I1);
for i = 1:k
u = u + dt/dh*(u([2:m, m],:)+u([1, 1:m-1],:)+u(:,[2:n, n])+u(:,[1, 1:n-1])-4*u);
[m,n] = size(u);
yy = u(:, cc);
xx = 1:m;
plot(xx,yy, '-r', xx, kk,'k');
pause(0.5);
figure(1);
end
figure(2); imshow(I1);
figure(3); imshow(uint8(u));
k代表的是迭代次数,运行后的结果可以看出,经过热方程处理后,k越大,去噪效果也就越明显,图像也就变得更加模糊,也就是变得平滑了。