Matlab数字图像处理——图像复原与滤波算法应用方法

图像处理领域一直以来都是计算机科学和工程学的一个重要方向,图像复原则是其中一个重要的研究方向之一。图像复原旨在通过运用各种滤波算法,对图像进行去噪、恢复和改善,以提高图像的质量和可视化效果。在本文中,我们将介绍如下内容:

1.采用二维中值滤波对图像进行复原

中值滤波是一种常用的去噪方法,通过取像素周围邻域的中值来替代当前像素值。采用二维中值滤波对图像进行复原,这有助于去除图像中的椒盐噪声和其他噪声,提高图像的清晰度。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
I=imnoise(I, 'salt & pepper', 0.05);%添加椒盐噪声
J=medfilt2(I, [3, 3]);  %二维中值滤波
figure;
subplot(121);  imshow(I);%显示含有噪声的图像
subplot(122);  imshow(J);%显示滤波后的结果

2.采用二维排序滤波对图像进行复原

与中值滤波类似,排序滤波也是一种去噪方法,通过对像素邻域进行排序并取其中的特定位置值来进行图像复原。通过二维排序滤波对图像进行复原,具有对抗噪声的效果。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
I=imnoise(I, 'salt & pepper', 0.1);%添加椒盐噪声
domain=[0 1 1 0; 1 1 1 1; 1 1 1 1; 0 1 1 0];%窗口模板
J=ordfilt2(I, 6, domain);  %顺序滤波
figure;
subplot(121);  imshow(I);%显示含有噪声的图像
subplot(122);  imshow(J);%显示滤波后的结果

3.采用最大值和最小值滤波对图像进行复原

最大值和最小值滤波被应用于图像复原。这两种滤波方法通过在像素邻域内选择最大或最小值来实现去噪的效果,常用于处理图像中的椒盐噪声和脉冲噪声。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
I=imnoise(I, 'salt & pepper', 0.01);%添加椒盐噪声
J=ordfilt2(I, 1, ones(4,4));  %最大值滤波
K=ordfilt2(I, 9, ones(3));    %最小值滤波
figure;
subplot(121);  imshow(I); %显示最大值滤波后的结果
subplot(122);  imshow(J); %显示最小值滤波后的结果

4.对图像进行自适应滤波复原

自适应滤波根据图像局部特征动态调整滤波器参数,使其更适应不同区域的噪声和图像信息,提高了图像复原的灵活性和效果。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
J=imnoise(I, 'gaussian', 0, 0.03);%添加噪声
[K, noise]=wiener2(J, [5, 5]);%自适应滤波
figure;
subplot(121);  imshow(J);%显示含有噪声的图像
subplot(122);  imshow(K);%显示滤波后的结果

5.通过逆滤波器对图像进行复原

逆滤波器是一种基于频域的复原方法,通过将图像进行傅里叶变换,应用逆滤波器进行频谱修复。在中,逆滤波器被用于图像复原,特别适用于简单模糊情况。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
[m, n]=size(I);
M=2*m; n=2*n;
u=-m/2:m/2-1;
v=-n/2:n/2-1;
[U, V]=meshgrid(u, v);
D=sqrt(U.^2+V.^2);
D0=130;                %截止频率
H=exp(-(D.^2)./(2*(D0^2))); %高斯低通滤波器
N=0.01*ones(size(I,1), size(I,2));
N=imnoise(N, 'gaussian', 0, 0.001); %添加噪声
J=fftfilter(I, H)+N;  %频域滤波并加入噪声
figure;
subplot(121);  imshow(I); %显示原始图像
subplot(122);  imshow(J, [ ]); %显示退化后的图像
HC=zeros(m, n);
M1=H>0.1;   %频率范围
HC(M1)=1./H(M1);  
K=fftfilter(J, HC);  %逆滤波
HC=zeros(m, n);
M2=H>0.01;
HC(M2)=1./H(M2);
L=fftfilter(J, HC);   %进行逆滤波
figure;
subplot(121);  imshow(K, [ ]); %显示结果
subplot(122);  imshow(L, [ ]); %显示结果
6.通过维纳滤波对运动模糊图像进行复原

运动模糊是图像中常见的问题,使用维纳滤波对运动模糊图像进行复原。维纳滤波通过对图像频谱进行调整,平衡去噪和保留图像细节,以改善运动模糊图像的质量。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
LEN=25;                %参数设置
THETA=20;
PSF=fspecial('motion', LEN, THETA);%产生PSF
J=imfilter(I, PSF, 'conv', 'circular'); %运动模糊
NSR=0;
K=deconvwnr(J, PSF, NSR);   %维纳滤波复原
figure;
subplot(131);  imshow(I);  %显示原始图像
subplot(132);  imshow(J);  %显示退化图像
subplot(133);  imshow(K);  %显示复原图像

7.通过维纳滤波对含有噪声的运动模糊图像进行复原

在存在噪声的情况下,维纳滤波同样可以应用于运动模糊图像的复原。展示了如何通过维纳滤波处理同时存在噪声和运动模糊的图像,提高图像的清晰度

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
LEN=21;        %参数设置
THETA=11;
PSF=fspecial('motion', LEN, THETA);    %产生PSF
J=imfilter(I, PSF, 'conv', 'circular');%运动模糊
noise_mean=0;
noise_var=0.0001;
K=imnoise(J, 'gaussian', noise_mean, noise_var); %添加高斯噪声
NSR1=0;
L1=deconvwnr(K, PSF, NSR1);  %维纳滤波复原
NSR2=noise_var/var(I(:));
L2=deconvwnr(K, PSF, NSR2);  %图像复原
figure;
subplot(131);  imshow(I); %显示原始图像
subplot(132);  imshow(K); %显示退化图像
subplot(133);  imshow(L2); %显示结果

 

8.通过图像的自相关信息进行复原

自相关信息是图像中像素与其邻域像素之间的关系。通过利用图像的自相关信息进行复原,有助于保留图像中的结构和细节。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
LEN=20;             %参数设置
THETA=10;
PSF=fspecial('motion', LEN, THETA); %产生PSF
J=imfilter(I, PSF, 'conv', 'circular');%运动模糊
noise=0.03*randn(size(I));
K=imadd(J, noise);   %添加噪声
NP=abs(fft2(noise)).^2;
NPower=sum(NP(:))/prod(size(noise));
NCORR=fftshift(real(ifft2(NP))); %噪声的自相关函数
IP=abs(fft2(I)).^2;
IPower=sum(IP(:))/prod(size(I));
ICORR=fftshift(real(ifft2(IP)));  %图像的自相关函数
L=deconvwnr(K, PSF, NCORR, ICORR);%图像复原
figure;
subplot(131);  imshow(I); %显示原始图像
subplot(132);  imshow(J); %显示退化图像
subplot(133);  imshow(L);%显示结果

9.通过约束最小二乘法进行图像复原

约束最小二乘法是一种优化方法,通过最小化目标函数并在约束条件下求解问题。采用约束最小二乘法进行图像复原,以更好地控制滤波过程。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
PSF=fspecial('gaussian', 8, 4);%产生PSF
J=imfilter(I, PSF, 'conv'); %图像退化
v=0.02;
K=imnoise(J, 'gaussian', 0, v); %添加噪声
NP=v*prod(size(I));
L=deconvreg(K, PSF, NP);%图像复原
figure;
subplot(131);  imshow(I);%显示原始图像
subplot(132);  imshow(J);%显示退化图像
subplot(133);  imshow(L);%显示结果

10.通过拉格朗日算子进行图像复原

拉格朗日算子是一种优化方法,通过引入拉格朗日乘子来处理约束问题。展示了如何通过拉格朗日算子进行图像复原,提供了一种灵活的约束处理方式。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
PSF=fspecial('gaussian', 10, 5); %产生PSF
J=imfilter(I, PSF, 'conv'); %图像退化
v=0.02;
K=imnoise(J, 'gaussian', 0, v); %添加噪声
NP=v*prod(size(I));
[L, LAGRA]=deconvreg(K, PSF, NP); %图像复原
edged=edgetaper(K, PSF);  %提取边缘

M1=deconvreg(edged, PSF, [], LAGRA);%图像复原
M2=deconvreg(edged, PSF, [], LAGRA*30);%增大拉格朗日算子
M3=deconvreg(edged, PSF, [], LAGRA/30);%减小拉格朗日算子
figure;
subplot(231);  imshow(I);%显示原始图像
subplot(232);  imshow(K);%显示退化图像
subplot(233);  imshow(edged);%显示边缘
subplot(234);  imshow(M1);%显示结果
subplot(235);  imshow(M2);%显示结果
subplot(236);  imshow(M3);%显示结果

11.对运动模糊图像采用Lucy-Richardson算法进行复原

运动模糊是一种常见的图像退化形式,通过Lucy-Richardson算法对运动模糊图像进行复原。该算法在迭代中逐步修复图像细节,适用于特定类型的模糊。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
LEN=30;   %参数设置
THETA=20;
PSF=fspecial('motion', LEN, THETA); %产生PSF
J=imfilter(I, PSF, 'circular', 'conv');%图像退化
K=deconvlucy(J, PSF, 5);%复原,5次迭代
L=deconvlucy(J, PSF, 15);%复原,15次迭代
figure;
subplot(131);  imshow(I);%显示原始图像
subplot(132);  imshow(K);%显示结果
subplot(133);  imshow(L);%显示结果

12.对含高斯噪声图像采用Lucy-Richardson算法进行复原

在图像中存在高斯噪声的情况下,Lucy-Richardson算法同样可以应用于图像复原。演示了在处理同时存在高斯噪声和模糊的图像时,该算法的有效性。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
PSF=fspecial('gaussian', 7, 10);%产生PSF
v=0.0001;
J=imnoise(imfilter(I, PSF), 'gaussian',0, v);%图像退化
WT=zeros(size(I));
WT(5:end-4, 5:end-4)=1;
K=deconvlucy(J, PSF, 20, sqrt(v));%图像复原
L=deconvlucy(J, PSF, 20, sqrt(v), WT);%图像复原
figure;
subplot(131);  imshow(I);%显示原始图像
subplot(132);  imshow(J);%显示退化图像
subplot(133);  imshow(L);%显示结果

​​​​​​

13. 对运动模糊图像采用盲解卷积算法进行复原

盲解卷积算法的核心思想是不需要先验知识,即不需要了解模糊过程的具体参数,就可以进行图像复原。该算法通过迭代优化的方式,尝试寻找最佳的卷积核和原始图像。这使得我们能够在没有运动信息的情况下有效地复原受到运动模糊影响的图像。

clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=im2double(I);
LEN=20;  %参数设置
THETA=20;
PSF=fspecial('motion', LEN, THETA);%产生PSF
J=imfilter(I, PSF, 'circular', 'conv');%运动模糊
INITPSF=ones(size(PSF));
[K, PSF2]=deconvblind(J, INITPSF, 30);%图像复原
figure;
subplot(221);  imshow(PSF, []);%显示原PSF
subplot(222);  imshow(PSF2, []);%显示估计的PSF
subplot(223);  imshow(J);%显示退化图像
subplot(224);  imshow(K);%显示复原图像
axis auto;

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

  • 22
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatpyMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值