热方程图像去噪原理以及Matlab代码实现
文章目录热方程图像去噪原理以及Matlab代码实现1. 原理,偏微分方程给图像去噪热方程图像去噪原理以及Matlab代码实现初学图像,不足之处请指正本文主要分成两个部分1. 原理,偏微分方程给图像去噪...
热方程图像去噪原理以及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越大,去噪效果也就越明显,图像也就变得更加模糊,也就是变得平滑了。
更多推荐



所有评论(0)