定义:创建预定义的二维过滤器
形式:h = fspecial('motion',len,theta)
描述:h = fspecial('motion',len,theta),返回一个过滤器,使其在与图像卷积后近似相机的线性运动。len指定运动的长度,theta指定逆时针方向的运动角度(以度为单位)。过滤器将成为水平和垂直运动的矢量。默认的len是9,默认的theta是0,这对应于9个像素的水平运动。
定义:多维图像的N-D滤波
形式:B = imfilter(A,h,options,...)
描述:根据一个或多个指定选项执行多维筛选。其中本实验代码中Blurred1 = imfilter(imgrgb,PSF1,'circular','conv');指的是加入了运动模糊。
定义:信号的平均功率和噪声的平均功率之比
形式:信噪比(dB)= 10 * log10(S/N) (dB), 单位(db)作为度量单位。
定义:基于维纳滤波的去模糊图像
形式:J = deconvwnr(I,psf,nsr)
J = deconvwnr(I,psf,ncorr,icorr)
J = deconvwnr(I,psf)
描述:其中J = deconvwnr(I,psf,nsr),使用维纳滤波算法对图像I进行解卷积,返回去模糊图像J。psf是对I进行卷积的点扩展函数(psf)。nsr是加性噪声的噪声与信号功率比。该算法在估计图像和真实图像之间的最小均方误差意义下是最优的。
% 1、任选一幅彩色风景图片作为源图像,设置不同的模糊参数实现任一副图像的运
% 动模糊(fspecial,imfilter函数),再用imadd和imnoise给图像添加不同类
% 型的噪声,显示噪声图像。
%
% 2、对1产生的图像分别进行复原,选用维纳滤波器进行图像复原,显示处理结果。
%
% @author: jackma
% @time: 2020-11-9 3:23
% @URL: www.jackrma.com
% @Copyright:博客所有权归本人和CSDN所有,如有转载请在显著位置给出博文
% 链接和作者姓名,否则本人将付诸法律。
% @edit:
% 1.添加运动模糊
clc
clear
imgrgb = imread('2.jpg'); % 读取彩色图像
figure('Name', '运动模糊参数对比'); %标题
subplot(221);
imshow(imgrgb);
title("原始图像");
LEN1 = 50; % 运动模糊中运动的长度
THETA1 = 11; % 指定逆时针方向的运动角度(以度为单位)
PSF1 = fspecial('motion',LEN1,THETA1); % 用于在与图像卷积后近似相机的线性运动
Blurred1 = imfilter(imgrgb,PSF1,'circular','conv'); % 加入运动模糊
subplot(222);
imshow(Blurred1);
title("模糊图像1-长度50,角度11度");
LEN2 = 50; % 运动长度50
THETA2 = 22; % 运动角度22度,(和模糊图像1的运动角度数据做对照)
PSF2 = fspecial('motion',LEN2,THETA2); %用于在与图像卷积后近似相机的线性运动
Blurred2 = imfilter(imgrgb,PSF2,'circular','conv'); % 加入运动模糊
subplot(223);
imshow(Blurred2);
title("模糊图像2-长度50,角度22度");
LEN3 = 100; % 运动长度100,(和模糊图像1的运动长度数据做对照)
THETA3 = 11; % 运动角度11度
PSF3 = fspecial('motion',LEN3,THETA3);
Blurred3 = imfilter(imgrgb,PSF3,'circular','conv');
subplot(224);
imshow(Blurred3);
title("模糊图像3-长度100,角度11度");
% 2.添加噪声(都在模糊图像1基础上增加噪声,方便对照)
NUM1 = 0.05; % 噪声强度5%
figure('Name', '模糊图像1加入噪声并复原'); % 标题
I1 = imnoise(Blurred1, 'salt & pepper', NUM1); %给模糊图像1添加椒盐噪声,强度5%
subplot(221);
imshow(I1);
title('加入强度5%椒盐噪声的图像1');
NUM2 = 0.05; % 噪声强度5%
I2 = imnoise(Blurred1, 'gaussian', NUM2); % 给模糊图像1添加高斯噪声,强度5%
subplot(222);
imshow(I2);
title('加入强度5%高斯噪声的图像2');
% 3.维纳滤波复原图像
SNR1 = sum(NUM1.^2) / var(im2double(imgrgb(:)).^2);% 信噪比
% 加入im2double是因为var前面
% 必须是单精度或者双精度
wnr1 = deconvwnr(I1, PSF1, SNR1);
subplot(223);
imshow(wnr1); % 恢复图像1
title('恢复图像1');
SNR2 = sum(NUM2.^2) / var(im2double(imgrgb(:)).^2);
wnr2 = deconvwnr(I2, PSF1, SNR2);
subplot(224);
imshow(wnr2); % 恢复图像2
title('恢复图像2');
% 保存处理后的图像
imwrite(uint8(Blurred1),'./output/Blurred1.bmp');
imwrite(uint8(Blurred2),'./output/Blurred2.bmp');
imwrite(uint8(Blurred3),'./output/Blurred3.bmp');
imwrite(uint8(I1),'./output/I1.bmp');
imwrite(uint8(I2),'./output/I2.bmp');
imwrite(uint8(wnr1),'./output/wnr1.bmp');
imwrite(uint8(wnr2),'./output/wnr2.bmp');
图1 运动模糊不同参数对比图
图2 模糊图像1加入噪声及其复原总图
具体结果对照如下:
图3 模糊图像1 (参数长度50,角度11度)
为方便对照,以下图像都是该图基础上变换
图4 加入强度10%椒盐噪声的图像 图5 维纳滤波处理图4的结果
图6 加入强度10%高斯噪声的图像 图7 维纳滤波处理图6的结果