维纳滤波
目的:对获取图像在频域用高斯函数进行退化并叠加白噪声,对退化图像进行逆滤波和维纳滤波恢复,比较原始图像和恢复图像,对利用逆滤波和维纳滤波恢复方法恢复图像进行比较。
一、基本原理
图像复原是一种客观的操作,通过使用退化现象的先验知识重建或恢复一副退化的图像;图像在形成、传输和记录的过程中,由于受多种原因的影响,图像的质量会有下降,典型表现为图像模糊、失真、有噪声等,这一降质的过程称为图像的退化。而图像复原试图利用退化现象的某种先验知识(即退化模型),把已经退化了的图像加以重建和复原。其目的就是尽可能地减少或去除在获取图像过程中发的图像质量的下降(退化),恢复被退化图像的本来面目。
图像复原基本思路:弄清退化原因,建立退化模型,反向推演,恢复图像。
逆滤波复原过程:对退化的图像进行二位傅里叶变换;计算系统点扩散函数的二位傅里叶变换;引入H(fx,fy)计算并且对结果进行逆傅里叶变换。
维纳滤波:在一定的约束条件下,其输出与一给定函数(通常称为期望输出)的差的平方达到最小,通过数学运算最终可变为一个托布利兹方程的求解问题。维纳滤波器又被称为最小二乘滤波器或最小平方滤波器,目前是基本的滤波方法之一。维纳滤波是利用平稳随机过程的相关特性和频谱特性对混有噪声的信号进行滤波的方法。
逆滤波:简单的就是将退化函数去除,直接的逆滤波没有什么意义,只处理了靠近直流分量的部分,其他不做处理。如果加入巴特沃斯低通滤波器,效果会好点,可是在运动模糊的图片中就不好使了。
维纳斯滤波:使图像尽可能的平滑,可以消除很严重的噪声,回复图像。最小二乘滤波器。
二、结果图分析
逆滤波和维纳滤波算法简单,使用灵活,有较高的使用精度。
在带有噪声干扰的情况下,逆滤波的效果随着噪声的方差值的变大而变小,维纳滤波同样结果,同时恢复结果都带有不同程度的振铃效应。但维纳滤波的效果要比逆滤波的效果好,且随着噪声的加强对比效果变得更明显。改变K值可以改善逆滤波但不及维纳滤波的效果好。
三、完整程序
clc;
clear;
x=rgb2gray(imread('C:\Users\lenovo\Desktop\zhang.jpg'));
x1=x(:,:,1);
x1=double(x1);
[r,r1]=size(x1);
y1=fftshift(fft2(x1));
[r,r1]=size(y1);
figure(1);
imshow(x1,[]);
title('原始的图像') ;
figure(2);
imshow(abs(y1),[0,250000]);
title('原始的图像频谱');
m=1:r;
m1=1:r1;
[m,m1]=meshgrid(m,m1);%生成网格空间
noise=20.*imnoise(zeros(r,r1),'gaussian',0,0.008);%高斯噪声
figure(3);
subplot(1,2,1);
imshow(noise,[]);
title('白噪声') ;
a=double(21/100);%x方向的最大移动量为ra的0.21倍,可调
b=double(21/100);%y方向的最大移动量为ca的0.21倍,可调
t=double(88/100);%移动到最大所需的时间默认为0.88
f=ones(r,r1);
g=(m-r/2-1).*a+(m1-r1/2-1).*b+eps;
f=t.*sin(pi.*g).*exp(-j.*pi.*g)./(pi.*g);
h=f'.*y1;
tu=ifft2(h);
tu=abs(tu)+noise;
subplot(1,2,2);
imshow(tu,[]);
title('退化的图像')%原图傅立叶变换估计值
y1=h./f';
figure(4)
subplot(1,2,1);
imshow(abs(ifft2(y1)),[]);
title('逆滤波的结果');
h=fftshift(fft2(tu));
x=fftshift(fft2(noise));
K=x.*conj(x)./(y1.*conj(y1));%计算K值
w=(f.*conj(f))'.*h./(f.*(f.*conj(f)+K'))';
weina=abs(ifft2(w));
subplot(1,2,2);
imshow(weina,[]);
title('维纳滤波的结果');
相关阅读
--总觉得网上其他博客上写的都不太适合自己理解,百般翻阅书籍理解了一下,供自己日后复习之用。 本文的程序整理可到此处下载:http://