参数维纳滤波(Parametric Wiener Filter)
摘 要:本实验主要使用维纳滤波法(又名为最小均方误差滤波)实现图像复原与重建。首先我们通过对一幅图像加入运动污损滤波和高斯噪声,然后从噪声中提取出原始图像信号。在各种估计方法中,维纳滤波是一种最基本的方法,相比起逆滤波,它更适用于从噪声中分离出有用信号的图像。
一、技术论证
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)相关推荐
- 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter
实验要求: Objective: To understand the high performance of the parametric Wiener Filter in image restora ...
- 【图像处理】参数维纳滤波(Parametric Wiener Filter)
实验要求 (a) 编写一个给图像中添加高斯噪声的程序,程序的输入参数为噪声的均值与方差. (b) 编写程序实现公式(5.6-11)所示的污损滤波: (c) 如图5.26(b)所示,对图像5 ...
- 维纳滤波原理(Wiener Filter)
维纳滤波原理(Wiener Filter) - 知乎 自适应滤波:维纳滤波器--FIR及IIR设计 - 桂. - 博客园
- 数字图像处理Python语言实现-图像滤波-维纳滤波(Wiener Filter)
维纳滤波(Wiener Filter) 1.前言 维纳滤波器(Wiener Filter)是最早用于图像复原经典滤波之一,目前被广泛用于信号滤波降噪和图像预处理中.维纳滤波器的目的是使用相关信号作为输 ...
- VVC/VTM: 自适应环路滤波(ALF, Adaptive Loop Filtering)中维纳滤波(Wiener Filtering)的公式推导
0 前言 自适应环路滤波(ALF)并不是在 H.266/VVC 标准制定过程中才被提出来的技术,实际上其早在 H.265/HEVC 标准制定时就基本确定了现有形式的雏形,只是由于当时硬件算力的限制未能 ...
- Wiener Filter
假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系.现在我们手头上有process $x[n]$,目的是要设计一个LTI系统 ...
- php url参数过滤器,使用php://filter时向流过滤器添加过滤器参数
我有一个二进制文件,我想转换成标准的符合mime的base64字符串.我想我可以用 php://filter 方法来过滤流,但我对如何设置"line-length"参数感到困惑.还 ...
- Spring MVC在参数绑定前通过Filter过滤器改变请求参数的值
第一步,对request请求进行增强: /*** author: zhangxueliang* date: 2019-08-23*/ public class ParameterServletRequ ...
- Wiener Filter维纳滤波器halcon算子,持续更新
目录 gen_psf_defocus gen_psf_motion simulate_defocus simulate_motion wiener_filter wiener_filter_ni ge ...
最新文章
- 【PHPWord】TextRun
- 通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法
- 学python有必要买书吗-要不要学python
- CentOS安装nmap端口查看工具
- 坐拥12亿月活流量,腾讯直播带货的底牌
- pid调节软件_(四)差分底盘设计——5.底盘PID控制参数整定
- eclipse bookmark的使用
- android 圆形相机预览拍照_Android Camera2 Api 实现预览和拍照
- 美哭了,一款面向程序员的开源 Markdown 笔记工具!
- 泰坦尼克号的数据集的下载 tensflow
- c#选择文件保存路径
- anaconda如何配置环境变量
- gromacs 安装_Gromacs详细安装教程
- java仿制百度云盘_基于jsp的仿百度网盘-JavaEE实现仿百度网盘 - java项目源码
- AirPods声音越来越小问题
- Columns函数:返回数据表区域的总列数。
- Linux 生产环境搭建
- RabbitMQ介绍与延时队列
- php操作主从mysql_PHP 操作MySQL数据库
- 【Python】SymPy库——求泰勒展开式+求极限 代码实现
热门文章
- 2020年自考计算机应用基础和实践是什么,2020年自考计算机应用基础复习重点8
- oracle runInstaller报错SEVERE: Remote ‘AttachHome‘ on node ‘rac102‘ failed
- SQL 7种SQL JOINS的实现
- 巧妙隐藏Word文档中指定文字内容
- Kaggle下载数据集时,手机收不到短信验证码解决方法--亲测有效
- Chrome 跨域 请求不携带cookie
- 网络编程(基于socket接口技术的进程间通信)接上一篇文章补充
- vsCode在window电脑中安装FiraCode字体(好看字体)
- 基于32位版CentOS6配置符合HA模式的CDH5.7.0的Hadoop+Yarn+HBase集群
- IIS服务器的安全保护措施