精华内容
下载资源
问答
  • 这是我自己编写的matlab运动模糊盲复原程序
  • 高斯模糊图像的盲复原附带matlab源代码
  • 算法流程:读入一副清晰图像,类高斯函数滤波后后生成模糊图像.利用模糊图像估计PSF初值,再启动RL...算法采用FFT实现了卷积和相关运算,比MATLAB提供的卷积运算速度提高10以上.如果运行中有什么问题,请联系我.13571351120.
  • 基于MATLab去卷积复原算法

    千次阅读 2020-05-09 09:08:03
    前言    ... 本文介绍去卷积复原算法,并在MATLAB中进行实验,和维纳滤波的复原效果进行一个对比。去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-Lu

    前言

           之前写过一篇维纳滤波在图像复原中的作用,讲述了图像退化模型以及维纳滤波的作用。维纳滤波使用的前提是知道信号和噪声的功率谱,但在实际应用中较难得到,只能根据先验知识进行估计。

           本文介绍盲去卷积复原算法,并在MATLAB中进行实验,和维纳滤波的复原效果进行一个对比。盲去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-Lucy)的盲去卷积算法。

    盲去卷积原理

         露西-理查德森算法属于图像复原中的非线性算法,与维纳滤波这种较为直接的算法不同,该算法使用非线性迭代技术,在计算量、性能方面都有了一定提升。

         露西-理查德森算法是由贝叶斯公式推导而来,因为使用了条件概率(即算法考虑了信号的固有波动,因此具有复原噪声图像的能力)。贝叶斯公式如下:

          结合图像退化/复原模型,可以得到迭代函数:

      

        其中 fi 就是第i轮迭代复原图像,对应贝叶斯公式中的p(x),g是退化函数,对应贝叶斯公式的p(y|x),c为退化图像(c(y)dy意为在退化图像上积分),如果满足等晕条件,即图像各区域的模糊函数相同,则迭代公式可化简如下:

         这就是路西-理查德森迭代公式,其中c是退化图像,g是退化函数,f是第k轮复原图像。如果系统的退化函数PSF(g(x))已知,只要有一个初始估计f就可以进行迭代求解了。在开始迭代后,由于算法的形式,估计值会与真实值的差距迅速减小,从而后续迭代过程f的更新速度会逐渐变慢,直至收敛。算法的另一优点就是初始值f>0,后续迭代值均会保持非负性,并且能量不会发散。

         盲去卷积需要两步进行复原,原因是我们既不知道原始图像f,也不知道退化函数g。求解过程示意图如下:

          即在第k轮迭代,我们假a设原始图像已知,即k-1轮得到的fk-1,再通过R-L公式求解gk,随后,再用gk求解fk,反复迭代,最后求得最终f和g。因此,在求解最初,我们需要同时假设一个复原图像f0和一个退化函数g0。迭代公式如下:

          此外,有人采用这种盲去卷积方法进行了相关实验,下图为实验原图:

    下图(a)左、右分别为附加标准差1.5%、10%泊松噪声的退化图像,图(b)左、右分别为1.5%的复原图像和PSF,图(c)为10%对应结果

         


    盲去卷积MATLAB实验

         将一幅原始图像,进行模糊处理(模拟大气湍流),分别使用维纳滤波(由于没加噪声,就是逆滤波)和盲去卷积进行复原,复原结果如下:


          下面是网上找到的有关盲去卷积的MATLAB程序,可以加深理解。
    %% Deblurring Images Using the Blind Deconvolution Algorithm 
    %%盲反卷积算法复原图像
    % The Blind Deconvolution Algorithm can be used effectively when no
    % information about the distortion (blurring and noise) is known. The
    % algorithm restores the image and the point-spread function (PSF)
    % simultaneously. The accelerated, damped Richardson-Lucy algorithm is used
    % in each iteration. Additional optical system (e.g. camera)
    % characteristics can be used as input parameters that could help to
    % improve the quality of the image restoration. PSF constraints can be
    % passed in through a user-specified function
    %在不知道图像失真信息(模糊和噪声)信息情况下,盲反卷积算法可以有效地加以利用。该算法
    %对图像和点扩展函数(PSF)的同时进行复原。每次迭代都使用加速收敛Richardson-Lucy 
    %算法。额外的光学系统(如照相机)的特性可作为输入参数,帮助改善图像复原质量。可以通
    %过用户指定的函数对PSF进行限制
    % Copyright 2004-2005 The MathWorks, Inc.
    

    %% Step 1: Read Image
    %
    %第一步:读取图像
    % The example reads in an intensity image. The |deconvblind| function can
    % handle arrays of any dimension.
    %该示例读取一个灰度图像。| deconvblind |函数可以处理任何维数组。
    I = imread(‘view.tif’);
    figure;imshow(I);title(‘Original Image’);
    %text(size(I,2),size(I,1)+15, …
    % ‘Image courtesy of Massachusetts Institute of Technology’, …
    %‘FontSize’,7,‘HorizontalAlignment’,‘right’);

    %% Step 2: Simulate a Blur
    %
    %第二步:模拟一个模糊
    % Simulate a real-life image that could be blurred (e.g., due to camera
    % motion or lack of focus). The example simulates the blur by convolving a
    % Gaussian filter with the true image (using |imfilter|). The Gaussian filter
    % then represents a point-spread function, |PSF|.
    %模拟一个现实中存在的模糊图像(例如,由于相机抖动或对焦不足)。这个例子通过对真实
    %图像进行高斯滤波器模拟图像模糊(使用|imfilter|)。高斯滤波器是一个点扩展函数,
    %|PSF|
    PSF=fspecial(‘gaussian’,7,10);
    Blurred=imfilter(I,PSF,‘symmetric’,‘conv’); %对图像I进行滤波处理;
    figure;imshow(Blurred);title(‘Blurred Image’);

    %% Step 3: Restore the Blurred Image Using PSFs of Various Sizes
    %
    %第三步:使用不同的点扩展函数复原模糊图像
    % To illustrate the importance of knowing the size of the true PSF, this
    % example performs three restorations. Each time the PSF reconstruction
    % starts from a uniform array–an array of ones.
    %为了说明知道真实PSF的大小的重要性,这个例子执行三个修复。PSF函数重建每次都是从统一
    %的全一数组开始。
    %%
    %
    The first restoration, |J1| and |P1|, uses an undersized array, |UNDERPSF|, for
    % an initial guess of the PSF. The size of the UNDERPSF array is 4 pixels
    % shorter in each dimension than the true PSF.
    %第一次复原,|J1||P1|,使用一个较小数组,| UNDERPSF |,来对PSF的初步猜测。该
    %UNDERPSF数组每维比真实PSF少4个元素。
    UNDERPSF = ones(size(PSF)-4);
    [J1 P1] = deconvblind(Blurred,UNDERPSF);
    figure;imshow(J1);title(‘Deblurring with Undersized PSF’);

    %%
    %
    The second restoration, |J2| and |P2|, uses an array of ones, |OVERPSF|, for an
    % initial PSF that is 4 pixels longer in each dimension than the true PSF.
    %第二次复原,|J2||P2|,使用一个元素全为1的数组,| OVERPSF|,初始PSF每维比真
    %实PSF多4个元素。
    OVERPSF = padarray(UNDERPSF,[4 4],‘replicate’,‘both’);
    [J2 P2] = deconvblind(Blurred,OVERPSF);
    figure;imshow(J2);title(‘Deblurring with Oversized PSF’);

    %%
    %
    The third restoration, |J3| and |P3|, uses an array of ones, |INITPSF|, for an
    % initial PSF that is exactly of the same size as the true PSF.
    %第三次复原,|J3||P3|,使用一个全为一的数组| INITPSF |作为初次PSF,每维与真正
    %的PSF相同。
    INITPSF = padarray(UNDERPSF,[2 2],‘replicate’,‘both’);
    [J3 P3] = deconvblind(Blurred,INITPSF);
    figure;imshow(J3);title(‘Deblurring with INITPSF’);

    %% Step 4: Analyzing the Restored PSF
    %
    %第四步:分析复原函数PSF
    % All three restorations also produce a PSF. The following pictures show
    % how the analysis of the reconstructed PSF might help in guessing the
    % right size for the initial PSF. In the true PSF, a Gaussian filter, the
    % maximum values are at the center (white) and diminish at the borders (black).
    %所有这三个复原也产生PSF。以下图片显示对PSF重建分析的如何可能有助于猜测最初PSF的大
    %小。在真正的PSF中,高斯滤波器的最高值在中心(白),到边界消失(黑)。
    figure;
    subplot(221);imshow(PSF,[],‘InitialMagnification’,‘fit’);
    title(‘True PSF’);
    subplot(222);imshow(P1,[],‘InitialMagnification’,‘fit’);
    title(‘Reconstructed Undersized PSF’);
    subplot(223);imshow(P2,[],‘InitialMagnification’,‘fit’);
    title(‘Reconstructed Oversized PSF’);
    subplot(224);imshow(P3,[],‘InitialMagnification’,‘fit’);
    title(‘Reconstructed true PSF’);

    %%
    %
    The PSF reconstructed in the first restoration, |P1|, obviously does not
    % fit into the constrained size. It has a strong signal variation at the
    % borders. The corresponding image, |J1|, does not show any improved clarity
    % vs. the blurred image,.
    %第一次复原的PSF,|P1|,显然不适合大小的限制。它在边界有一个强烈的变化信号。
    %相应的图片|J1|,与模糊图像|Blurred|比没有表现出清晰度提高。
    %%
    %
    The PSF reconstructed in the second restoration, |P2|, becomes very smooth
    % at the edges. This implies that the restoration can handle a PSF of a
    % smaller size. The corresponding image, |J2|, shows some deblurring but it
    % is strongly corrupted by the ringing.
    %第二次复原的PSF,|P2|,边缘变得非常平滑。这意味着复原可以处理一个更细致的
    %PSF。相应的图片|J2|,显得清晰了,但被一些“振铃”强烈破坏。
    %%
    %
    Finally, the PSF reconstructed in the third restoration, |P3|, is somewhat
    % intermediate between |P1| and |P2|. The array, |P3|, resembles the true PSF
    % very well. The corresponding image, |J3|, shows significant improvement;
    % however it is still corrupted by the ringing.
    %最后,第三次复原的PSF,|P3|,介于|P1||P2|之间。该阵列|P3|,非常接近真
    %正的PSF。相应的图片,|J3|,显示了显着改善,但它仍然被一些“振铃”破坏。

    %% Step 5: Improving the Restoration
    %
    %第五步:改善图像复原
    % The ringing in the restored image, |J3|, occurs along the areas of sharp
    % intensity contrast in the image and along the image borders. This example
    % shows how to reduce the ringing effect by specifying a weighting
    % function. The algorithm weights each pixel according to the |WEIGHT| array
    % while restoring the image and the PSF. In our example, we start by
    % finding the “sharp” pixels using the edge function. By trial and error,
    % we determine that a desirable threshold level is 0.3.
    %在复原图像|J3|内部灰度对比鲜明的地方和图像边界都出现了“振铃”。这个例子说明了如何
    %通过定义一个加权函数来减少图像中的“振铃”。该算法是在对图像和PSF进行复原时,对每个
    %像元根据|WEIGHT|数组进行加权计算。在我们的例子,我们从用边缘函数查找“鲜明”像元
    %开始。通过反复试验,我们确定理想的阈值为0.3

    %WEIGHT = edge(I,‘sobel’,.3);
    WEIGHT = edge(Blurred,‘sobel’,.3);
    %%
    %
    To widen the area, we use |imdilate| and pass in a structuring element, |se|.
    %为了拓宽领域,我们使用|imdilate|并传递一个结构元素|se|
    se = strel(‘disk’,2);
    WEIGHT = 1-double(imdilate(WEIGHT,se));

    %%
    %
    The pixels close to the borders are also assigned the value 0.
    %在边界附近像素的值也被分配为0
    WEIGHT([1:3 end-[0:2]],:) = 0;
    WEIGHT(:,[1:3 end-[0:2]]) = 0;
    figure;imshow(WEIGHT);title(‘Weight array’);

    %%
    %
    The image is restored by calling deconvblind with the |WEIGHT| array and an
    % increased number of iterations (30). Almost all the ringing is suppressed.
    %该图像通过|WEIGHT|数组和增加重复次数(30)调用deconvblind函数来复原。几乎所
    %有的“振铃”被抑制。
    [J P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);
    figure;imshow(J);title(‘Deblurred Image’);

    %% Step 6: Using Additional Constraints on the PSF Restoration
    %
    第六步:使用附加约束对PSF复原
    % The example shows how you can specify additional constraints on the PSF.
    %这个例子说明了如何在PSF上指定额外的限制。
    % The function, |FUN|, below returns a modified PSF array which deconvblind
    % uses for the next iteration.
    %函数|FUN|返还一个修改了的PSF数组,用作deconvblind函数的下一次重复。
    % In this example, |FUN| modifies the PSF by cropping it by |P1| and |P2| number
    % of pixels in each dimension, and then padding the array back to its
    % original size with zeros. This operation does not change the values in
    % the center of the PSF, but effectively reduces the PSF size by |2P1| and
    % |2P2| pixels.
    %在这个例子中,通过对PSF数组各维数剪切|P1||P2|个值实现对PSF的修改,对数组填充
    %回零。此操作不会改变在PSF中心的值,而且有效地在各维减少了|2P1|| 2P2|
    %素。

    P1 = 2;
    P2 = 2;
    FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);

    %%
    %
    The anonymous function, |FUN|, is passed into |deconvblind| last.
    %该匿名函数|FUN|,最后传递给| deconvblind |
    %%
    %
    In this example, the size of the initial PSF, |OVERPSF|, is 4 pixels larger
    % than the true PSF. Setting P1=2 and P2=2 as parameters in |FUN|
    % effectively makes the valuable space in |OVERPSF| the same size as the true
    % PSF. Therefore, the outcome, |JF| and |PF|, is similar to the result of
    % deconvolution with the right sized PSF and no |FUN| call, |J| and |P|, from
    % step 4.
    %在这个例子中,初始PSF,|OVERPSF|,每维比真正的PSF多4个像素,。设置P1=2和P2=2
    %为|FUN|的参数,可有效地使|OVERPSF|与真正的PSF的大小相同。因此,得到的结果|JF|
    %和|PF|,与第四步不使用|FUN|而仅用正确尺寸PSF盲反卷积得到的结果|J||P|类似。
    [JF PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN);
    figure;imshow(JF);title(‘Deblurred Image’);

    %%
    %
    If we had used the oversized initial PSF, |OVERPSF|, without the
    % constraining function, |FUN|, the resulting image would be similar to the
    % unsatisfactory result, |J2|, achieved in Step 3.
    %
    % Note, that any unspecified parameters before |FUN| can be omitted, such as
    % |DAMPAR| and |READOUT| in this example, without requiring a place holder,
    % ([]).
    %如果我们使用了没有约束的函数|FUN|的较大的初始PSF,| OVERPSF |,所得图像将类
    %似第3步得到的效果并不理想的|J2|
    %注意,任何在|FUN|之前未指定参数都可以省略,如|DAMPAR||READOUT|在这个例子中,而不需要指示他们的位置,([])。

    展开全文
  • 这是一个基于matlab图像复原处理包,其中包括图像的模糊、维纳滤波、反卷积、点扩散函数和光学转换函数互相转化
  • 反卷积算法复原图像matlab实现,有着详细的注释和解释,可以让人很好读懂。
  • matlab盲解卷积去噪

    2014-09-11 09:23:23
    针对于模糊图像复原,psf复原,加权数组去模糊,FUN复原图像
  • 维纳滤波和去卷积算法,复原图像,matlab
  • 图像复原matlab程序-图像复原matlab程序.rar 程序代码说明: 4_1:生成模糊化实验图像 4_2:维纳滤波复原 4_3:约束最小二乘滤波复原 4_4:Lucy-Richardson滤波复原 4_5:卷积滤波复原
  • 卷积复原算法

    2017-10-09 18:38:26
    基于matlab卷积算法复原,其复原效果明显,能够很好的抑制振铃效应
  • 基于MATLAB并结合IBD算法的迭代反卷积法进行图像复原图像复原 迭代 反卷积 IBD PSF估计
  • 下面是一个人写的去卷积算法实现图像去模糊,其中有些代码不是很能理解,求解释!尤其每次都做这个循环: for i=1:x_size %进行乘(-1)^(i+j)处理 for j=1:y_size flag=(-1)^(i+j); tmp1(i,j)=tmp1(i,j)*...
  • MATLAB-图像复原和分割

    千次阅读 2016-12-03 12:48:17
    图像复原方法:主要包括逆滤波复原、维纳滤波复原、约束最小二乘法复原、Lucy-Richardson复原解卷积复原等。 图像分割技术:较为经典的算法有边缘检测方法、阈值分割法和区域分割技术。 常见的边缘检测方法有...

    图像复原方法:主要包括逆滤波复原、维纳滤波复原、约束最小二乘法复原、Lucy-Richardson复原和盲解卷积复原等。
    图像分割技术:较为经典的算法有边缘检测方法、阈值分割法和区域分割技术。
    常见的边缘检测方法有:微分算子、Canny算子和LOG算子等。常用的微分算子有Sobel算子、Roberts算子Prewit算子等。
    图像中的线段:将图像点某个邻域中每个像素值都与模板中对应的系数相乘,然后将结果进行累加,从而得到该点的新像素值。如果邻域的大小为m×n,则总共有mn个系数。这些系数组成的矩阵,称为模板或算子。通常采用的最小模板是3×3。

    canny多元边缘检测算子
    Canny算子的具有低误码率、高定位精度和抑制虚假边缘等优点。
    在MATLAB中,函数edge( )可以采用Canny算子进行边缘检测。该函数的调用格式为:
    BW=edge(I, ‘canny’):该函数采用Canny算子对图像I进行边缘检测,并采用自动计算的低阈值和高阈值进行图像分割,函数的返回值BW为二值图像。
    BW=edge(I, ‘canny’, thresh):该函数中对分割阈值thresh进行设置,thresh为包含2个元素的向量,分别是低阈值和高阈值。如果thresh为单个数值的标量,则thresh为高阈值,0.4×thresh作为低阈值。
    BW=edge(I, ‘canny’, thresh, sigma):该函数中对高斯滤波器的标准差sigma进行设置,默认值为1。
    [BW, thresh]=edge(I, ‘canny’, …):该函数返回分割时所采用的阈值thresh。

    i=imread('F:\PICTURE\lighthouse.bmp');
    j=rgb2gray(i);
     BW1=edge(j,'prewitt');
    BW2 = edge(j,'canny');

    这里写图片描述

    拉普拉斯(Laplacian)算子是一种不依赖于边缘方向的二阶微分算子,它是标量而不是矢量,而且具有旋转不变的性质,在图像处理中经常被用来提取图像的边缘,表达式为:
    这里写图片描述

    展开全文
  • 图像复原经典matlab方法的实现

    热门讨论 2010-07-21 10:28:11
    图像复原 matlab 逆滤波 维纳滤波 卷积复原 等经典方法的matlab实现的m文件
  • Matlab去模糊/图像复原(DOING)

    千次阅读 2019-11-15 00:16:33
    1、直接逆滤波:属于非盲复原,PSF已知,直接频域相除。 blurred=imfilter(img,PSF,'circular');noised=imnoise(blurred,'gaussian',mean,var); Ifn=fft2(noised);deblurredn=ifft2(Ifn./Pf); 2、deconvblind:...

    学习中,如有错误,敬请指正,谢谢大家~

    1、直接逆滤波:属于非盲复原,PSF已知,直接频域相除。

    blurred=imfilter(img,PSF,'circular');noised=imnoise(blurred,'gaussian',mean,var);

    Ifn=fft2(noised);deblurredn=ifft2(Ifn./Pf);

    2、deconvblind:属于半盲复原,预测+求解PSF,内核:概率极大,最大似然算法。

    [J,PSF] = deconvblind(I,INITPSF)

    [J,PSF] = deconvblind(I,INITPSF,NUMIT,DAMPAR,WEIGHT,READOUT).

    [J,PSF] = deconvblind(...,FUN)FUN(可选)是描述PSF附加约束的函数在每次迭代结束时被调用。FUN必须以PSF作为其第一个参数,并且可以接受附加参数P1,P2,...,PN。 

    NUMIT(可选)是迭代次数(默认值为10)。

    DAMPAR(可选)是阻尼,一个用于指定图像复原结果的阈值偏差的数组(根据泊松噪声计算的标准差)。 默认值为0(无阻尼)。【TODO:阻尼的概念还不是很理解】

    WEIGHT(可选)分配给每个像素反映相机的拍摄质量的权重。将坏像素分配零权值从而排除该像素。 

    READOUT(可选)是对应于附加噪声和读出相机噪声方差的阵列(或值)。

    注意,输出图像J可能会出现由算法中使用的离散傅里叶变换引入的振铃。 在调用deconvblind之前,为了减少振铃使用I = EDGETAPER(I,PSF)。

     注:I 和 INITPSF可以是uint8,uint16,int16,double或single。

    DAMPAR和READOUT必须与输入图像具有相同的等级。其他输入必须是double。

    输出图像J(或输出单元的第一个阵列)与输入图像I具有相同的类别。输出PSF是double

    3、deconvlucy:属于非盲复原,PSF已知,内核:最大似然+贝叶斯公式,也即Lucy-Richard算法

    J = deconvlucy(I,psf)

    J = deconvlucy(I,psf,iter,dampar,weight,readout)

    使用泊松统计模型描述图像,最大似然复原过程中利用贝叶斯公式进行概率的迂回求解。最大似然:似然函数(图像函数)取对数求导解方程求极值。【TODO:最大似然+贝叶斯公式的数学理解】

    4、deconvwnr:属于非盲复原,PSF已知,内核:差异最小 最小二乘,也即维纳滤波

    J = deconvwnr(I,psf,nsr)

    J = deconvwnr(I,psf,ncorr,icorr)

    利用信号功率谱/噪声功率谱 因子消除逆滤波中的零分母问题。这里功率谱就是自相关函数,第一中是直接用信噪比NSR第二种是用噪声自相关和信号自相关。

    比如:
    Sn=abs(fft2(noise)).^2;%噪声功率谱NCORR=fftshift(real(ifft2(Sn)));%噪声自相关函数

    5、deconvreg:属于非盲复原,PSF已知,内核:最小二乘+拉格朗日算子,也即约束最小二乘正则化方法

    [J,lagra]= deconvreg(I,psf,np,lrange,regop)

    最小二乘表示差异小,拉格朗日算子由拉普拉斯算子得到意义在于平滑。

    6、deconvtv:属于非盲复原,PSF已知,内核:一阶二阶范数+差异最小,也即全变分方法

    代码来源:https://download.csdn.net/download/qq_20376785/10479356TODO:理解复现

    其中,https://img-blog.csdnimg.cn/20191115152102781.pnghttps://img-blog.csdnimg.cn/20190326170254993.png ​(Rudin,1992年,全变分定义)

    7、

    TODORestoration of defocused and blurred images Vladimir Yuzhikov个人主页:http://yuzhikov.com/Project:smartdeblur于2012年12月上传至GITHUBhttps://github.com/Y-Vladimir/SmartDeblur/downloads效果很好】

    refer:

    1、https://blog.csdn.net/weixin_42231070/article/details/84288140

    2、https://blog.csdn.net/zssyu0416/article/details/80648369

    3、https://blog.csdn.net/Du_Shuang/article/details/82899648

    4、https://blog.csdn.net/YangYaYan/article/details/89188006

    5、https://blog.csdn.net/bluecol/article/details/47359421

    6、https://blog.csdn.net/qxqsunshine/article/details/88824755

     

    展开全文
  • 简单运动模糊图像复原GUI设计,我的运行环境2014b,内附使用说明和汇报PPT,可进行读取图片、撤销上一步操作、保存图片、运动模糊、图像复原(包括直接逆滤波、维纳滤波、Lucy-Richardson算法、约束最小二乘法、去...
  • 去卷积原理及在图像复原的应用

    千次阅读 2018-01-30 11:06:50
    前言  之前写过一篇维纳滤波在图像复原... 本文介绍去卷积复原算法,并在MATLAB中进行实验,和维纳滤波的复原效果进行一个对比。去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-

    前言

           之前写过一篇维纳滤波在图像复原中的作用,讲述了图像退化模型以及维纳滤波的作用。维纳滤波使用的前提是知道信号和噪声的功率谱,但在实际应用中较难得到,只能根据先验知识进行估计。

           本文介绍盲去卷积复原算法,并在MATLAB中进行实验,和维纳滤波的复原效果进行一个对比。盲去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-Lucy)的盲去卷积算法。

    盲去卷积原理

         露西-理查德森算法属于图像复原中的非线性算法,与维纳滤波这种较为直接的算法不同,该算法使用非线性迭代技术,在计算量、性能方面都有了一定提升。

         露西-理查德森算法是由贝叶斯公式推导而来,因为使用了条件概率(即算法考虑了信号的固有波动,因此具有复原噪声图像的能力)。贝叶斯公式如下:

          结合图像退化/复原模型,可以得到迭代函数:

      

        其中 fi 就是第i轮迭代复原图像,对应贝叶斯公式中的p(x),g是退化函数,对应贝叶斯公式的p(y|x),c为退化图像(c(y)dy意为在退化图像上积分),如果满足等晕条件,即图像各区域的模糊函数相同,则迭代公式可化简如下:

         这就是路西-理查德森迭代公式,其中c是退化图像,g是退化函数,f是第k轮复原图像。如果系统的退化函数PSF(g(x))已知,只要有一个初始估计f就可以进行迭代求解了。在开始迭代后,由于算法的形式,估计值会与真实值的差距迅速减小,从而后续迭代过程f的更新速度会逐渐变慢,直至收敛。算法的另一优点就是初始值f>0,后续迭代值均会保持非负性,并且能量不会发散。

         盲去卷积需要两步进行复原,原因是我们既不知道原始图像f,也不知道退化函数g。求解过程示意图如下:

          即在第k轮迭代,我们假a设原始图像已知,即k-1轮得到的fk-1,再通过R-L公式求解gk,随后,再用gk求解fk,反复迭代,最后求得最终f和g。因此,在求解最初,我们需要同时假设一个复原图像f0和一个退化函数g0。迭代公式如下:

          此外,有人采用这种盲去卷积方法进行了相关实验,下图为实验原图:

    下图(a)左、右分别为附加标准差1.5%、10%泊松噪声的退化图像,图(b)左、右分别为1.5%的复原图像和PSF,图(c)为10%对应结果

         


    盲去卷积MATLAB实验

         将一幅原始图像,进行模糊处理(模拟大气湍流),分别使用维纳滤波(由于没加噪声,就是逆滤波)和盲去卷积进行复原,复原结果如下:


          下面是网上找到的有关盲去卷积的MATLAB程序,可以加深理解。
    [plain] view plain copy
    1. %% Deblurring Images Using the Blind Deconvolution Algorithm   
    2. %%盲反卷积算法复原图像  
    3. % The Blind Deconvolution Algorithm can be used effectively when no  
    4. % information about the distortion (blurring and noise) is known. The  
    5. % algorithm restores the image and the point-spread function (PSF)  
    6. % simultaneously. The accelerated, damped Richardson-Lucy algorithm is used  
    7. % in each iteration. Additional optical system (e.g. camera)  
    8. % characteristics can be used as input parameters that could help to  
    9. % improve the quality of the image restoration. PSF constraints can be  
    10. % passed in through a user-specified function  
    11. %在不知道图像失真信息(模糊和噪声)信息情况下,盲反卷积算法可以有效地加以利用。该算法  
    12. %对图像和点扩展函数(PSF)的同时进行复原。每次迭代都使用加速收敛Richardson-Lucy   
    13. %算法。额外的光学系统(如照相机)的特性可作为输入参数,帮助改善图像复原质量。可以通  
    14. %过用户指定的函数对PSF进行限制  
    15. % Copyright 2004-2005 The MathWorks, Inc.  
    16.    
    17. %% Step 1: Read Image  
    18. %%第一步:读取图像  
    19. % The example reads in an intensity image. The |deconvblind| function can  
    20. % handle arrays of any dimension.  
    21. %该示例读取一个灰度图像。| deconvblind |函数可以处理任何维数组。  
    22. I = imread('view.tif');  
    23. figure;imshow(I);title('Original Image');  
    24. %text(size(I,2),size(I,1)+15, ...  
    25. %    'Image courtesy of Massachusetts Institute of Technology', ...  
    26. %'FontSize',7,'HorizontalAlignment','right');    
    27.      
    28.   
    29.    
    30. %% Step 2: Simulate a Blur  
    31. %%第二步:模拟一个模糊  
    32. % Simulate a real-life image that could be blurred (e.g., due to camera  
    33. % motion or lack of focus). The example simulates the blur by convolving a  
    34. % Gaussian filter with the true image (using |imfilter|). The Gaussian filter  
    35. % then represents a point-spread function, |PSF|.  
    36.  %模拟一个现实中存在的模糊图像(例如,由于相机抖动或对焦不足)。这个例子通过对真实  
    37. %图像进行高斯滤波器模拟图像模糊(使用|imfilter|)。高斯滤波器是一个点扩展函数,  
    38. %|PSF|。  
    39. PSF=fspecial('gaussian',7,10);  
    40. Blurred=imfilter(I,PSF,'symmetric','conv');  %对图像I进行滤波处理;  
    41. figure;imshow(Blurred);title('Blurred Image');    
    42.   
    43.      
    44.   
    45.    
    46. %% Step 3: Restore the Blurred Image Using PSFs of Various Sizes  
    47. %%第三步:使用不同的点扩展函数复原模糊图像  
    48. % To illustrate the importance of knowing the size of the true PSF, this  
    49. % example performs three restorations. Each time the PSF reconstruction  
    50. % starts from a uniform array--an array of ones.  
    51. %为了说明知道真实PSF的大小的重要性,这个例子执行三个修复。PSF函数重建每次都是从统一  
    52. %的全一数组开始。  
    53. %%  
    54. % The first restoration, |J1| and |P1|, uses an undersized array, |UNDERPSF|, for  
    55. % an initial guess of the PSF. The size of the UNDERPSF array is 4 pixels  
    56. % shorter in each dimension than the true PSF.   
    57. %第一次复原,|J1|和|P1|,使用一个较小数组,| UNDERPSF |,来对PSF的初步猜测。该  
    58. %UNDERPSF数组每维比真实PSF少4个元素。  
    59. UNDERPSF = ones(size(PSF)-4);  
    60. [J1 P1] = deconvblind(Blurred,UNDERPSF);  
    61. figure;imshow(J1);title('Deblurring with Undersized PSF');   
    62.   
    63.      
    64.   
    65. %%  
    66. % The second restoration, |J2| and |P2|, uses an array of ones, |OVERPSF|, for an  
    67. % initial PSF that is 4 pixels longer in each dimension than the true PSF.  
    68. %第二次复原,|J2|和|P2|,使用一个元素全为1的数组,| OVERPSF|,初始PSF每维比真  
    69. %实PSF多4个元素。  
    70. OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both');  
    71. [J2 P2] = deconvblind(Blurred,OVERPSF);  
    72. figure;imshow(J2);title('Deblurring with Oversized PSF');    
    73.      
    74.   
    75.    
    76. %%  
    77. % The third restoration, |J3| and |P3|, uses an array of ones, |INITPSF|, for an  
    78. % initial PSF that is exactly of the same size as the true PSF.  
    79. %第三次复原,|J3|和|P3|,使用一个全为一的数组| INITPSF |作为初次PSF,每维与真正  
    80. %的PSF相同。  
    81. INITPSF = padarray(UNDERPSF,[2 2],'replicate','both');  
    82. [J3 P3] = deconvblind(Blurred,INITPSF);  
    83. figure;imshow(J3);title('Deblurring with INITPSF');    
    84.   
    85.      
    86.   
    87.    
    88. %% Step 4: Analyzing the Restored PSF  
    89. %%第四步:分析复原函数PSF  
    90. % All three restorations also produce a PSF. The following pictures show  
    91. % how the analysis of the reconstructed PSF might help in guessing the  
    92. % right size for the initial PSF. In the true PSF, a Gaussian filter, the  
    93. % maximum values are at the center (white) and diminish at the borders (black).  
    94. %所有这三个复原也产生PSF。以下图片显示对PSF重建分析的如何可能有助于猜测最初PSF的大  
    95. %小。在真正的PSF中,高斯滤波器的最高值在中心(白),到边界消失(黑)。  
    96. figure;  
    97. subplot(221);imshow(PSF,[],'InitialMagnification','fit');  
    98. title('True PSF');  
    99. subplot(222);imshow(P1,[],'InitialMagnification','fit');  
    100. title('Reconstructed Undersized PSF');  
    101. subplot(223);imshow(P2,[],'InitialMagnification','fit');  
    102. title('Reconstructed Oversized PSF');  
    103. subplot(224);imshow(P3,[],'InitialMagnification','fit');  
    104. title('Reconstructed true PSF');    
    105.   
    106.      
    107.   
    108.    
    109. %%   
    110. % The PSF reconstructed in the first restoration, |P1|, obviously does not  
    111. % fit into the constrained size. It has a strong signal variation at the  
    112. % borders. The corresponding image, |J1|, does not show any improved clarity  
    113. % vs. the blurred image,.  
    114.  %第一次复原的PSF,|P1|,显然不适合大小的限制。它在边界有一个强烈的变化信号。  
    115. %相应的图片|J1|,与模糊图像|Blurred|比没有表现出清晰度提高。  
    116. %%  
    117. % The PSF reconstructed in the second restoration, |P2|, becomes very smooth  
    118. % at the edges. This implies that the restoration can handle a PSF of a  
    119. % smaller size. The corresponding image, |J2|, shows some deblurring but it  
    120. % is strongly corrupted by the ringing.  
    121.  %第二次复原的PSF,|P2|,边缘变得非常平滑。这意味着复原可以处理一个更细致的  
    122. %PSF。相应的图片|J2|,显得清晰了,但被一些“振铃”强烈破坏。  
    123. %%  
    124. % Finally, the PSF reconstructed in the third restoration, |P3|, is somewhat  
    125. % intermediate between |P1| and |P2|. The array, |P3|, resembles the true PSF  
    126. % very well. The corresponding image, |J3|, shows significant improvement;  
    127. % however it is still corrupted by the ringing.  
    128.  %最后,第三次复原的PSF,|P3|,介于|P1|和|P2|之间。该阵列|P3|,非常接近真  
    129. %正的PSF。相应的图片,|J3|,显示了显着改善,但它仍然被一些“振铃”破坏。  
    130.   
    131.   
    132. %% Step 5: Improving the Restoration  
    133. %%第五步:改善图像复原  
    134. % The ringing in the restored image, |J3|, occurs along the areas of sharp  
    135. % intensity contrast in the image and along the image borders. This example  
    136. % shows how to reduce the ringing effect by specifying a weighting  
    137. % function. The algorithm weights each pixel according to the |WEIGHT| array  
    138. % while restoring the image and the PSF. In our example, we start by  
    139. % finding the "sharp" pixels using the edge function. By trial and error,  
    140. % we determine that a desirable threshold level is 0.3.  
    141. %在复原图像|J3|内部灰度对比鲜明的地方和图像边界都出现了“振铃”。这个例子说明了如何  
    142. %通过定义一个加权函数来减少图像中的“振铃”。该算法是在对图像和PSF进行复原时,对每个  
    143. %像元根据|WEIGHT|数组进行加权计算。在我们的例子,我们从用边缘函数查找“鲜明”像元  
    144. %开始。通过反复试验,我们确定理想的阈值为0.3。  
    145.   
    146. %WEIGHT = edge(I,'sobel',.3);    
    147.  WEIGHT = edge(Blurred,'sobel',.3);   
    148. %%  
    149. % To widen the area, we use |imdilate| and pass in a structuring element, |se|.  
    150. %为了拓宽领域,我们使用|imdilate|并传递一个结构元素|se|。  
    151. se = strel('disk',2);  
    152. WEIGHT = 1-double(imdilate(WEIGHT,se));    
    153.    
    154. %%  
    155. % The pixels close to the borders are also assigned the value 0.  
    156. %在边界附近像素的值也被分配为0。  
    157. WEIGHT([1:3 end-[0:2]],:) = 0;  
    158. WEIGHT(:,[1:3 end-[0:2]]) = 0;  
    159. figure;imshow(WEIGHT);title('Weight array');    
    160.   
    161.      
    162.   
    163.  %%  
    164. % The image is restored by calling deconvblind with the |WEIGHT| array and an  
    165. % increased number of iterations (30). Almost all the ringing is suppressed.  
    166. %该图像通过|WEIGHT|数组和增加重复次数(30)调用deconvblind函数来复原。几乎所  
    167. %有的“振铃”被抑制。  
    168. [J P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);  
    169. figure;imshow(J);title('Deblurred Image');    
    170.      
    171.   
    172.    
    173. %% Step 6: Using Additional Constraints on the PSF Restoration  
    174. %第六步:使用附加约束对PSF复原  
    175. % The example shows how you can specify additional constraints on the PSF.  
    176. %这个例子说明了如何在PSF上指定额外的限制。  
    177. % The function, |FUN|, below returns a modified PSF array which deconvblind  
    178. % uses for the next iteration.   
    179. %函数|FUN|返还一个修改了的PSF数组,用作deconvblind函数的下一次重复。  
    180. % In this example, |FUN| modifies the PSF by cropping it by |P1| and |P2| number  
    181. % of pixels in each dimension, and then padding the array back to its  
    182. % original size with zeros. This operation does not change the values in  
    183. % the center of the PSF, but effectively reduces the PSF size by |2*P1| and  
    184. % |2*P2| pixels.   
    185. %在这个例子中,通过对PSF数组各维数剪切|P1|和|P2|个值实现对PSF的修改,对数组填充  
    186. %回零。此操作不会改变在PSF中心的值,而且有效地在各维减少了|2*P1|和| 2*P2|元  
    187. %素。  
    188.    
    189. P1 = 2;  
    190. P2 = 2;  
    191. FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);    
    192.    
    193. %%  
    194. % The anonymous function, |FUN|, is passed into |deconvblind| last.  
    195. %该匿名函数|FUN|,最后传递给| deconvblind |。  
    196. %%  
    197. % In this example, the size of the initial PSF, |OVERPSF|, is 4 pixels larger  
    198. % than the true PSF. Setting P1=2 and P2=2 as parameters in |FUN|  
    199. % effectively makes the valuable space in |OVERPSF| the same size as the true  
    200. % PSF. Therefore, the outcome, |JF| and |PF|, is similar to the result of  
    201. % deconvolution with the right sized PSF and no |FUN| call, |J| and |P|, from  
    202. % step 4.  
    203. %在这个例子中,初始PSF,|OVERPSF|,每维比真正的PSF多4个像素,。设置P1=2和P2=2作  
    204. %为|FUN|的参数,可有效地使|OVERPSF|与真正的PSF的大小相同。因此,得到的结果|JF|  
    205. %和|PF|,与第四步不使用|FUN|而仅用正确尺寸PSF盲反卷积得到的结果|J|和|P|类似。  
    206. [JF PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN);  
    207. figure;imshow(JF);title('Deblurred Image');    
    208.   
    209.      
    210.   
    211.    
    212. %%  
    213. % If we had used the oversized initial PSF, |OVERPSF|, without the  
    214. % constraining function, |FUN|, the resulting image would be similar to the  
    215. % unsatisfactory result, |J2|, achieved in Step 3.  
    216. %  
    217. % Note, that any unspecified parameters before |FUN| can be omitted, such as  
    218. % |DAMPAR| and |READOUT| in this example, without requiring a place holder,  
    219. % ([]).  
    220.  %如果我们使用了没有约束的函数|FUN|的较大的初始PSF,| OVERPSF |,所得图像将类  
    221. %似第3步得到的效果并不理想的|J2|。   
    222. %注意,任何在|FUN|之前未指定参数都可以省略,如|DAMPAR|和|READOUT|在这个例子中,而不需要指示他们的位置,([])。  
    223.    
    224. displayEndOfDemoMessage(mfilename)  
    展开全文
  • 总结自网上、matlab帮助文档等,都是图像复原中经常用到的基础函数或操作。可以模拟图像降质过程和用一些经典方法解卷积复原的过程。 一、卷积:conv2、convn、convmtx2 卷积的计算步骤: (1)卷积核绕自己...
  • 【图像处理】MATLAB:退化函数及多种复原方法

    万次阅读 多人点赞 2017-10-12 00:43:58
    退化函数、直接逆滤波、维纳滤波、正则滤波、去卷积
  • 卷积图像复原算法是一种基于MATLAB软件的图像复原代码,是一种值得研究的复原方式。
  • MATLAB图形图像处理

    热门讨论 2011-01-03 12:20:11
    14.3.4 去卷积复原 14.3.5 图像复原的其它 MATLAB 函数 第十五章 图像分析 15.1 边缘检测 15.1.1 微分算子 15.1.2 Log算子 15.1.3 Canny 算子 15.2 四叉树分解 15.2.1 四叉树分解 15.2.2 四叉树 MATLAB ...
  • 光学合成孔径成像系统中光学...数值仿真结果表明,在弱噪声条件下,U型网络在基于光学合成孔径成像系统的图像复原中展现出较强的复原能力以及一定的泛化能力和通用性,能够实现图像的快速盲复原,因而具有潜在的应用前景。
  • VC++ matlab图像处理

    2013-09-15 15:17:54
    14.3.4 去卷积复原 14.3.5 图像复原的其它 MATLAB 函数 第十五章 图像分析 15.1 边缘检测 15.1.1 微分算子 15.1.2 Log算子 15.1.3 Canny 算子 15.2 四叉树分解 15.2.1 四叉树分解 15.2.2 四叉树 MATLAB ...
  • 研究图像去模糊的算法也有一段时间了,从最开始对贾亚佳08年的一篇文章算法的研究到现在,也仿真对比了不少算法。...早期的去模糊算法都是非盲复原的算法,也就是需要预先知道PSF,只注重于去卷积的过程
  • matlab图像恢复程序实例

    万次阅读 2016-05-30 10:13:48
    目录目录 1维纳滤波复原 ...4去卷积复原 1.维纳滤波复原I=checkerboard(8); noise=0.1*randn(size(I)); PSF=fspecial('motion',21,11); Blurred=imfilter(I,PSF,'circular'); BlurredNoisy=im2uint8(Blurr
  • 14.3.4 去卷积复原 14.3.5 图像复原的其它 MATLAB 函数 第十五章 图像分析 15.1 边缘检测 15.1.1 微分算子 15.1.2 Log算子 15.1.3 Canny 算子 15.2 四叉树分解 15.2.1 四叉树分解 15.2.2 四叉树 MATLAB ...
  • 14.3.4 去卷积复原 14.3.5 图像复原的其它 MATLAB 函数 第十五章 图像分析 15.1 边缘检测 15.1.1 微分算子 15.1.2 Log算子 15.1.3 Canny 算子 15.2 四叉树分解 15.2.1 四叉树分解 15.2.2 四叉树 MATLAB ...
  • 5.10 去卷积 5.11 几何变换与图像配准 第6章 彩色图像处理 6.1 MATLAB中彩色图像的表示方法 6.2 转换至其他彩色空间 6.3 彩色图像处理基础 6.4 彩色变换 6.5 彩色图像的空间滤波 6.6 在RGB向量空间直接处理 第7...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

matlab盲复原

matlab 订阅