逆滤波和维纳滤波(附Matlab完整代码)

一、实验目的

        利用逆滤波和维纳滤波,对Lena加噪运动模糊降质图像进行复原,比较不同参数选择对复原结果的影响。

二、实验内容

1)     输入Lena图像,对图像进行运动降质;降质模型:


2)     对图像叠加高斯白噪声;

3)     寻找最佳逆滤波半径r;

4)     逆滤波;

5)     IFFT,展示结果;

6)     再寻找最佳维纳滤波K值;

7)     维纳滤波;

8)     IFFT,展示结果。

三、实验过程和数学原理

1、逆滤波

        在无噪情况下,逆滤波是完美的:


    

        然而实际情况都有噪声:

        如果H(u,v)存在零点,那么在H(u,v)零点附近进行复原,会导致第二项变得很大很大,复原效果很差。

        理论上说,我们应该找出H(u,v)的所有零点,然后规避这些零点进行逆滤波。然而,降质模型零点十分分散(实际上是一条条斜线,实验中会看到),并且要作无数个圆区域,编程非常麻烦。

        实际编程中,我们采用如下思路:既然fft后的频谱中,信号频谱主要集中在低频分量,那么,我们用fftshift,将频谱移到中心;以频谱中心为圆心,规定一个圆区域,在圆内正常逆滤波;而圆外是大量的较小的噪声分量,不给任何机会,直接赋值为0。这样,我们就不需要考虑H(u,v)的零点影响了。

        此外,再通过PSNR最大准则,寻找最佳滤波半径R。实验结果如下:




        实验代码:

function Imagerestoration
%~~~~~~~~~~~~~~~~~~~~~~~~~~实验说明~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
% 1、由于T=5,a=b=1效果太差太差,几乎无法看到复原现象,因此本实验采用T=1,a=b=0.02降质模型。
% 2、作为实验讲义的补充,本实验加入均值为0、方差为1e-3的AGWN模型。
%       若方差过大,逆滤波效果也不理想。
% 3、一定要对fftshift后的频谱进行运动模糊处理!!!否则现象都是错误的!!!
%                                                                                                                                       2018-5-19 by XING
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
clear;close all;clc;
fprintf('-------------------------------逆滤波实验-------------------------------\n');
I = im2double(imread('lena512.bmp'));% [0,1]
[M,~] = size(I);% square

% Display the original image.
figure;
subplot(1,3,1), imshow(I);
title('\fontsize{20}原始图像');

%% Simulate a Motion Blur:H(u,v)
T=1;a=0.02;b=0.02;
v=[-M/2:M/2-1];u=v';
A=repmat(a.*u,1,M)+repmat(b.*v,M,1);
H=T/pi./A.*sin(pi.*A).*exp(-1i*pi
  • 61
    点赞
  • 402
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值