图像复原方法(matlab)

这篇具有很好参考价值的文章主要介绍了图像复原方法(matlab)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像复原的常用方法主要包括:逆滤波复原、维纳滤波复原、约束最小二乘法复原、Lucy-Richardson复原和盲解卷积复原。

逆滤波复原

f(x,y)表示输入图像,即为理想没有退化的图像,g(x,y)时退化后观察得到的图像,n(x,y)为加性噪声。通过傅里叶变换到频域后为:G(u,v) = F(u,v)H(u,v)+N(u,v)

图像复原的目的是给定G(u,v)和退化函数H(u,v),以及关于加性噪声的相关知识,得到原图像F(u,v)的估计图像F’(u,v),使得图像尽可能地逼近原图像F(u,v)。复原一幅图像的最简单的方法为:F’(u,v) = G(u,v)/H(u,v),然后通过F’(u,v)的傅里叶反变换得到图像的估计值,称为逆滤波。逆滤波是一种非约束复原方法,非约束复原是指在以知退化图像G(u,v)的情况下,根据对退化模型H(u,v)和噪声N(u,v)的一些知识,做出对原图像的估计F’(u,v),使得某种事先确定得误差准则为嘴小。在得到误差最小的过程中,没有任何约束条件。

直接逆滤波时:由于存在噪声,所以退化图像公式 F’(u,v) = G(u,v)+N(u,v)/H(u,v),为了避免H(u,v)的值太小,可以在逆滤波时附加一些限制,只在原点附近的有跟邻域内进行复原,称为伪逆滤波

逆滤波器对图像进行复原:

%建立函数fftfilter()进行图像的频域滤波
function Z=fftifilter(X,H)
F=fft2(X,size(H,1),size(H,2));%傅里叶变换
Z = H.*F;%滤波
Z=ifftshift(Z);
Z=abs(ifft2(Z));%傅里叶反变换
Z=Z(1:size(X,1),1:size(X,2));
end

>> I = imread('E:\persional\matlab\images\cameraman.tif');
>> 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.01);%添加噪声
>> J=fftifilter(I,H)+N;%频域滤波并加噪声
>> figure,
>> subplot(221),imshow(I);
>> subplot(222),imshow(J,[ ]);
>> HC=zeros(m,n);
>> M1=H>0.1;%频率范围
>> HC(M1)=1./H(M1);
>> K=fftifilter(J,HC);%逆滤波
>> HC=zeros(m,n);
>> M2=H>0.01;
>> HC(M2)=1./H(M2);
>> L=fftifilter(J,HC);
>> subplot(223),imshow(K,[ ]);
>> subplot(224),imshow(L,[ ]);

图像复原方法(matlab)

维纳滤波复原

J = deconvwnr(I,PSF,NSR)
PSF:点扩展函数
NSR:信噪比,信号均值与背景标准偏差的比值

J = deconvwnr(I,PSF,NCORR,ICORR)
NCORR:噪声的自相关函数
ICORR:原始图像的自相关函数

通过维纳滤波对运动模糊图像进行复原:

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> 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);

图像复原方法(matlab)

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

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> LEN = 21;%运动位移像素
>> THETA = 11;%运动角度
>> PSF = fspecial('motion',LEN,THETA);
>> 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(221),imshow(I);
>> subplot(222),imshow(K);
>> subplot(223),imshow(L1);%NSR为0的复原图像
>> subplot(224),imshow(L2);%采用真实的NSR时得到复原的图像

图像复原方法(matlab)

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

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> 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;
>> NPPower=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(221),imshow(I);%原图
>> subplot(222),imshow(J);%退化图像
>> subplot(223),imshow(K);%噪声图像
>> subplot(224),imshow(L);%图像复原

图像复原方法(matlab)

约束最小二乘法复原

J = deconvreg(I,PSF)
J = deconvreg(I,PSF,NOISEPOWER)
J = deconvregl(I,PSF,NOISEPOWER,LRANGE)
J = deconvregl(I,PSF,NOISEPOWER,LRANGE,REGOP)
[J,LAGRA] = deconvreg(IPSF,…)
PSF:点扩展函数
NOISEPOWER:噪声的强度,默认为0
LRANGE:拉格朗日算子的搜索范围,默认为[10-9,109]
REGOP:约束算子
LAGRA:LAGRA为最终采用的拉格朗日算子

约束最小二乘法进行图像复原

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> PSF=fspecial('gaussian',8,4);
>> J = imfilter(I,PSF,'conv');%图像退化
>> v=0.04;
>> K = imnoise(J,'gaussian',0,v);%添加噪声
>> NP = v*prod(size(I));
>> L = deconvreg(K,PSF,NP);%图像复原
>> figure,
>> subplot(221),imshow(I);
>> subplot(222),imshow(J);%退化图像
>> subplot(223),imshow(K);%添加噪声
>> subplot(224),imshow(L);

图像复原方法(matlab)

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

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> PSF=fspecial('gaussian',12,6);
>> J = imfilter(I,PSF,'conv');
>> v=0.04;
>> 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);

图像复原方法(matlab)

Lucy-Richardson 复原

deconvlucy()采用加速收敛的Lucy-Richardson 算法对图像进行复原

J = deconvlucy(I,PSF)
J = deconvlucy(I,PSF,NUMIT)
J = deconvlucy(I,PSF,NUMIT,DAMPAR)
J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT)
J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT)
J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,SUBSMPL)
PSF:扩展函数
NUMIT:算法重复的次数,默认值为10
DAMPAR:偏差阈值,默认值为0
WEIGHT:像素的加权值,默认为原始图像的初始值
READOUT:噪声矩阵,默认值为0
SUBSMPL:采样时间,默认值为1

运动模糊图像:

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> LEN = 30;
>> THETA = 20;
>> PSF = fspecial('motion',LEN,THETA);
>> J = imfilter(I,PSF,'circular','conv');%图像退化
>> K = deconvlucy(J,PSF,5);%复原,5次迭代
>> L = deconvlucy(J,PSF,15);%复原,15次迭代
>> figure,
>> subplot(221),imshow(I);
>> subplot(222),imshow(J);%图形退化
>> subplot(223),imshow(K);
>> subplot(224),imshow(L);

图像复原方法(matlab)

高斯噪声:

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> PSF = fspecial('gaussian',7,10);
>> v = 0.0001>> J = imnoise(imfilter(I,PSF),'gaussian',0,v);%高斯噪声
>> WT = zeros(size(I));
>> WT(5:end-4,5,5:end-4);%像素权重
>> K = deconvlucy(J,PSF,20,sqrt(v));%图像复原
>> L = deconvlucy(J,PSF,20,sqrt(v),WT);
>> figure,
>> subplot(221),imshow(I);
>> subplot(222),imshow(J);
>> subplot(223),imshow(K);
>> subplot(224),imshow(L);

图像复原方法(matlab)

盲解卷积复原

前面的图像复原方法,需要预先知道退化图像的PSF,盲解卷积复原方法,不需要知道PSF,而对PSF进行估计。盲解卷积复原算法的优点是在对退化图像无先验知识的情况下,仍然能够进行复原

[J,PSF] = deconvblind(I,INITPSF)
[J,PSF] = deconvblind(I,INITPSF,NUMIT)
[J,PSF] = deconvblind(I,INITPSF,NUMIT,DAMPAR)
[J,PSF] = deconvblind(I,INITPSF,NUMIT,DAMPAR,WEIGHT)
[J,PSF] = deconvblind(I,INITPSF,NUMIT,DAMPAR,WEIGHT,READOUT)
INITPSF:PSF输入参数INITPSF的估计值
NUMIT:重复的次数
DAMPAR:偏移阈值,默认值为0
WEIGHT:像素加权值,默认为原始图像的数值
READOUT:噪声矩阵

运动模糊图像:

>> I = imread('E:\persional\matlab\images\lena.bmp');
>> I = im2double(I);
>> LEN=20;
>> THETA=20;
>> PSF=fspecial('motion',LEN,THETA);
>> 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);%复原图像

图像复原方法(matlab)

对退化图像进行复原:

>> I = checkerboard(8);
>> PSF = fspecial('gaussian',7,10);
>> v = 0.001;
>> J = imnoise(imfilter(I,PSF),'gaussian',0,v);%添加高斯噪声
>> INITPPSF = ones(size(PSF));%输入估计值
>> WT = zeros(size(I));
>> WT(5:end-4,5:end-4)=1;:
>> [K,PSF2] = deconvblind(J,INITPPSF,20,10*sqrt(v),WT);%图像复原
>> figure,
>> subplot(131),imshow(I);
>> subplot(132),imshow(J);
>> subplot(133),imshow(K);

图像复原方法(matlab)文章来源地址https://www.toymoban.com/news/detail-443798.html

到了这里,关于图像复原方法(matlab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 130基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原

    基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原 ,输出复原前后图像,PSF频谱结果。程序已调通,可直接运行。 130 matlab盲迭代反卷积IBD (xiaohongshu.com)  

    2024年02月01日
    浏览(32)
  • 基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 文献来

    2024年02月13日
    浏览(47)
  • 数字图像处理-图像复原与重建

      图像退化过程可以理解为将原始图片 f ( x , y ) f(x,y) f ( x , y ) 经过退化函数 H H H 的处理,在加上一个噪声项从而获得退化后的图像 g ( x , y ) g(x,y) g ( x , y ) 。而复原过程即为结合给定的退化函数 H H H 与噪声 η ( x , y ) eta(x,y) η ( x , y ) 重构原始图像的估计结果 f ^ ( x , y )

    2024年02月10日
    浏览(47)
  • 数字图像处理报告:实验4 图像复原

    (四)实验4 图像复原 一、实验主题 学习图像复原的相关原理及实现方法,并掌握逆滤波、维纳滤波的原理与程序实现。 二、实验目的 1.掌握图像复原的基本原理和方法。 2.学习使用程序设计环境。 3.使用设计框架构造应用程序。 4.掌握逆滤波、维纳滤波的原理和实现

    2024年02月08日
    浏览(42)
  • 图像处理之图像复原[逆滤波、维纳滤波、约束最小二乘法、Lucy-Richardson和盲解卷积复原]

    一、图像复原与图像增强的区别 图像增强的目的是消除噪声,显现那些被模糊了的细节或简单地突出一幅图像中读者感兴趣的特征,不考虑图像质量下降的原因。图像复原是利用退化现象的某种先验知识,建立退化现象的数学模型,再根据模型进行反向的推演运算,以恢复原

    2023年04月13日
    浏览(43)
  • 第五章 图像复原与重建

    退化图像: g ( x , y ) = h ( x , y ) ★ f ( x , y ) + η ( x , y ) g(x,y)=h(x,y)bigstar f(x,y)+eta(x,y) g ( x , y ) = h ( x , y ) ★ f ( x , y ) + η ( x , y ) 写成等价的频率域表示: G ( u , v ) = H ( u , v ) F ( u , v ) + N ( u , v ) G(u,v)=H(u,v)F(u,v)+N(u,v) G ( u , v ) = H ( u , v ) F ( u , v ) + N ( u , v ) 5.2.1噪声的空间和频率

    2024年02月09日
    浏览(35)
  • 图像复原(去模糊)基本内容以及评价标准

    ​ 原图像为f(x, y),经过退化函数h(x, y)在加上噪声n(x. y)得到退化图像g(x, y)。 ​ 整个过程可以描述为: g ( x , y ) = h ( x , y ) ∗ f ( x , y ) + n ( x , y ) mathrm{g}(mathrm{x}, mathrm{y})=mathrm{h}(mathrm{x}, mathrm{y}) * mathrm{f}(mathrm{x}, mathrm{y})+mathrm{n}(mathrm{x}, mathrm{y}) g ( x , y ) = h ( x , y )

    2024年02月05日
    浏览(55)
  • 一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)

    本文主要讲述了一体化模型进行去噪、去雨、去模糊,也就是说,一个模型就可以完成上述三个任务。实现了良好的图像复原功能! 先来看一下美女复原.jpg 具体的 : 在图像恢复任务中,需要在恢复图像的过程中保持空间细节和高级上下文信息之间的复杂平衡。 在这篇论文

    2024年02月07日
    浏览(52)
  • 数字图像处理——图像退化(大气湍流模型与运动模糊模型)与图像复原(逆滤波与维纳滤波)

    一般来说,图像的退化模型可以表示为 其中g(x,y) 表示退化后的图像,h(x,y)表示退化模型,f(x,y)表示原图像,n(x,y)表示噪声。 在频域上面可以表示为 下面介绍常见的两种退化模型:基于大气湍流物理特性的大气湍流模型和运动模糊模型。 1.大气湍流模型 退化模型: 伴随着

    2024年02月05日
    浏览(43)
  • 基于MATLAB实现图像处理常用应用案例(附上100个仿真源码+数据)

    MATLAB是一款功能强大的图像处理软件,可以用于实现各种常见的图像处理应用。下面将介绍几个常见的图像处理应用案例。 图像去噪是图像处理中的一项重要任务,可以提高图像质量和视觉效果。MATLAB提供了多种图像去噪算法,如中值滤波、高斯滤波、小波去噪等。以中值滤

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包