摘   要:本实验主要使用维纳滤波法(又名为最小均方误差滤波)实现图像复原与重建。首先我们通过对一幅图像加入运动污损滤波和高斯噪声,然后从噪声中提取出原始图像信号。在各种估计方法中,维纳滤波是一种最基本的方法,相比起逆滤波,它更适用于从噪声中分离出有用信号的图像。

一、技术论证

1 图像复原与重建

图像复原技术的主要目的是以预先确定的目标来改善图像。图像复原试图利用退化现象的某种先验知识来复原被退化的图像。因而复原技术是面向退化模型的,并且采用相反的过程进行处理,以便恢复出原图像。

图1给出了图像退化/复原过程的模型。图像复原处理是建立在图像退化的数学模型基础上的,这个退化数学模型能够反映图像退化的原因。退化过程中可以被模型化为一个退化函数和一个加性噪声项,处理一幅输入图像产生一幅退化图像。给定和关于退化函数的一些知识以及外加噪声项,图像复原的目的是获得关于原始图像的近似估计。通常我们希望这一估计尽可能接近原始输入图像,并且的信息知道得越多,所得到的就会越接近

如果系统H是一个线性、位置不变性的过程,那么在空间域中给出的退化图像可由下式给出:

其中,是退化函数的空间描述;“*”表示空间卷积。由于空间域上的卷积等同于频域上的乘积,因此,可以把退化图像的模型函数写成等价的频域下的描述:

公式中各项是式1中相应项的傅里叶变换。本实验使用的退化函数为:

该函数表示图像在X轴和Y轴分别以给定的速度做匀速直线运动。实验中设定:

图1图像退化/复原过程的模型

2 高斯噪声

由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。事实上,这种易处理性非常方便,使高斯模型经常用于临界情况下。高斯随机变量z的PDF由下式给出:

图2高斯函数的波形

3 维纳滤波

维纳滤波综合了退化函数和噪声统计特性两个方面进行复原处理,该方法是建立在认为图像和噪声是随机过程的基础上,目标是找一个未污染图像的估计值,使它们之间的均方误差最小。误差度量由下式给出:

其中是参数的期望值。这里假设噪声和图像不相关,其中一个或另一个有零均值,且估计的灰度级是退化图像灰度级的线性函数。在这些条件下,中误差函数的最小值在频域用下列表达式计算:

这里,我们应用了这样一个事实:一个复数量与它的共轭的乘积等于该复数量幅度的平方。这个结果就是维纳滤波,是N.Wien

er[1942]首次提出的概念。由方括号里边的项所组成的滤波器通常还叫做最小均方误差滤波器,或最小二乘方误差滤波器。式中各项的意义如下:

二、实验结果讨论

本实验使用冈萨雷斯主编数字图像处理第三版中的素材Fig5.07(a).jpg进行+45度方向,T=1的污损滤波,并对污损图像进行高斯噪声加噪处理。其次,验证维纳滤波法的有效性。从实验结果可以看出维纳滤波对于噪声的复原效果是很好的。

编写函数gaussian_noise(ima,a,b)产生高斯噪声,其中ima为输入图像,a,b分别是高斯噪声的均值和方差,函数中主要调用了函数randn(),该函数的效果是产生正态分布的随机数或矩阵的函数。要产生一个随机分布的指定均值和方差的矩阵,只需执行以下公式:

式中(m,n)为图像的尺寸。为了验证函数效果,图3给出均值为0,方差分别为20,200,1000的加性噪声图像。本实验过程中要求生成均值为0、方差为10的高斯噪声。

图3均值为0,方差分别为20,200,1000的加性高斯噪声图像

编写函数motion(T,a,b)实现图像模糊化,其中使用的核心公式为:

使用函数进行+45度方向且T=1 的污损滤波,对比MATLAB自带函数的效果,如图4所示,有巨大差异,但图像确实在x和y轴都有同幅度的位移,事实证明只有核心公式还无法做到示例的输出效果。

图4两种函数的运动模糊输出图像

编写函数实现对运动模糊且存在噪声的图像的重建和复原,其中使用的退化函数为:

图5和图6分别给出了维纳滤波恢复结果,结果显示维纳滤波能有效重建院图像。而对于图6这种噪声污染严重的图像,使用该滤波方法也能得到有效改善。

图5 图像经过运动模糊、加噪处理(0均值,10方差)和维纳滤波后的效果对比

图6图像经过运动模糊、加噪处理(0均值,100方差)和维纳滤波后的效果对比

以下给出主要部分的MATLAB代码:

% 编写函数给图像加入高斯噪声
% ima为输入图像,a和b分别为高斯函数的均值和方差
function  imt=gaussian_noise(ima,a,b)
% a = 0;
% b = 1000;
ima = imread('Fig5.26(a).jpg');
[m,n] = size(ima);
x = uint8(a + sqrt(b) * randn(m,n)); % 产生一个m×n的高斯噪声矩阵
imt = ima + x;                       % 给原图叠加高斯噪声
% imshow(imt);
return
% 编写函数给图像加入模糊污损噪声
% ima为输入图像,a和b分别为x轴和y轴的运动速度参数,T为图像位移时间
function imt=motion(ima,T,a,b)
% ima = imread('Fig5.26(a).jpg');
%
% a = 0.1;
% b = 0.1;
% T = 1;
[m,n] = size(ima);
imt = fftshift(fft2((ima)));
for u=1:m
for  v=1:n
Y(u,v) = u*a + v*b;
H(u,v) = T * sin(pi*Y(u,v)) * exp(-1j*pi*Y(u,v)) / (pi*Y(u,v));
imk(u,v) = imt(u,v)* H(u,v);
end
end
imt = ifft2(fftshift(imk));
imt = uint8(abs(imt))
return
%维纳滤波函数
F0=fftshift(fft2(imt));     % 对运动模糊图像(未加高斯噪声)作傅立叶变换
LA = fftshift(fft2(ima));   % 对原始图像作傅立叶变换
K=0.1;               % 加在退化函数的所有项上的特定常数
for u=1:m
for  v=1:n
H(u,v) = F0(u,v)/LA(u,v);  % 加噪图像作傅立叶变换除以原始图像作傅立叶变换,得到退化函数
% 计算维纳滤波函数
H0(u,v)=(abs(H(u,v)))^2;
H1(u,v)=H0(u,v)/(H(u,v)*(H0(u,v)+K));
F2(u,v)=H1(u,v)*F0(u,v);  % 恢复、计算原始图像的傅立叶变换估计
end
end
J2=ifft2(fftshift(F2));
J2=uint8(abs(J2));
subplot(2,2,4),imshow(J2,[]),title('维纳滤波复原图');


参数维纳滤波(Parametric Wiener Filter)相关推荐

  1. 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter

    实验要求: Objective: To understand the high performance of the parametric Wiener Filter in image restora ...

  2. 【图像处理】参数维纳滤波(Parametric Wiener Filter)

    实验要求   (a) 编写一个给图像中添加高斯噪声的程序,程序的输入参数为噪声的均值与方差.   (b) 编写程序实现公式(5.6-11)所示的污损滤波:   (c) 如图5.26(b)所示,对图像5 ...

  3. 维纳滤波原理(Wiener Filter)

    维纳滤波原理(Wiener Filter) - 知乎 自适应滤波:维纳滤波器--FIR及IIR设计 - 桂. - 博客园

  4. 数字图像处理Python语言实现-图像滤波-维纳滤波(Wiener Filter)

    维纳滤波(Wiener Filter) 1.前言 维纳滤波器(Wiener Filter)是最早用于图像复原经典滤波之一,目前被广泛用于信号滤波降噪和图像预处理中.维纳滤波器的目的是使用相关信号作为输 ...

  5. VVC/VTM: 自适应环路滤波(ALF, Adaptive Loop Filtering)中维纳滤波(Wiener Filtering)的公式推导

    0 前言 自适应环路滤波(ALF)并不是在 H.266/VVC 标准制定过程中才被提出来的技术,实际上其早在 H.265/HEVC 标准制定时就基本确定了现有形式的雏形,只是由于当时硬件算力的限制未能 ...

  6. Wiener Filter

    假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系.现在我们手头上有process $x[n]$,目的是要设计一个LTI系统 ...

  7. php url参数过滤器,使用php://filter时向流过滤器添加过滤器参数

    我有一个二进制文件,我想转换成标准的符合mime的base64字符串.我想我可以用 php://filter 方法来过滤流,但我对如何设置"line-length"参数感到困惑.还 ...

  8. Spring MVC在参数绑定前通过Filter过滤器改变请求参数的值

    第一步,对request请求进行增强: /*** author: zhangxueliang* date: 2019-08-23*/ public class ParameterServletRequ ...

  9. Wiener Filter维纳滤波器halcon算子,持续更新

    目录 gen_psf_defocus gen_psf_motion simulate_defocus simulate_motion wiener_filter wiener_filter_ni ge ...

最新文章

  1. 【PHPWord】TextRun
  2. 通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法
  3. 学python有必要买书吗-要不要学python
  4. CentOS安装nmap端口查看工具
  5. 坐拥12亿月活流量,腾讯直播带货的底牌
  6. pid调节软件_(四)差分底盘设计——5.底盘PID控制参数整定
  7. eclipse bookmark的使用
  8. android 圆形相机预览拍照_Android Camera2 Api 实现预览和拍照
  9. 美哭了,一款面向程序员的开源 Markdown 笔记工具!
  10. 泰坦尼克号的数据集的下载 tensflow
  11. c#选择文件保存路径
  12. anaconda如何配置环境变量
  13. gromacs 安装_Gromacs详细安装教程
  14. java仿制百度云盘_基于jsp的仿百度网盘-JavaEE实现仿百度网盘 - java项目源码
  15. AirPods声音越来越小问题
  16. Columns函数:返回数据表区域的总列数。
  17. Linux 生产环境搭建
  18. RabbitMQ介绍与延时队列
  19. php操作主从mysql_PHP 操作MySQL数据库
  20. 【Python】SymPy库——求泰勒展开式+求极限 代码实现

热门文章

  1. 2020年自考计算机应用基础和实践是什么,2020年自考计算机应用基础复习重点8
  2. oracle runInstaller报错SEVERE: Remote ‘AttachHome‘ on node ‘rac102‘ failed
  3. SQL 7种SQL JOINS的实现
  4. 巧妙隐藏Word文档中指定文字内容
  5. Kaggle下载数据集时,手机收不到短信验证码解决方法--亲测有效
  6. Chrome 跨域 请求不携带cookie
  7. 网络编程(基于socket接口技术的进程间通信)接上一篇文章补充
  8. vsCode在window电脑中安装FiraCode字体(好看字体)
  9. 基于32位版CentOS6配置符合HA模式的CDH5.7.0的Hadoop+Yarn+HBase集群
  10. IIS服务器的安全保护措施