数字图像处理第四章 图像复原

图像复原与重建

图像复原技术主要是以预先确定的目标来改善图像,与之前我们学习的图像增强相比,虽然有重叠之处,但是图像增强主要是一个主观过程,而图像复原大部分是一个客观过程。图像复原试图利用退化现象的某种先验知识来复原被退化的图像。因此,复原技术是面向退化模型的,并且采用相反的过程处理,以便恢复出原图像。

1 图像退化/复原过程的模型

在本章节中,退化过程被建模为一个退化函数和一个加性噪声项,对一幅输入图像f(x,y)进行处理,产生一幅退化后的图像g(x,y)。给定g(x,y)和关于退化函数H的一些知识以及关于退化函数H的一些知识以及关于加性噪声项η(x,y)的一些知识后,图像复原的目的就是获得原始图像的一个估计f*(x,y)。 g ( x , y ) = H [ f ( x , y ) ] + η ( x , y ) g(x,y)=H[f(x,y)]+η(x,y) 在这里插入图片描述
本章节中使用的大部分复原方法都是以不同类型的图像复原滤波器为基础的。如果H是一个线性的、位置不变的过程,那么空间域中的退化图像可由下式给出: g ( x , y ) = h ( x , y ) f ( x , y ) + η ( x , y ) g(x,y)=h(x,y)★f(x,y)+η(x,y) 式中,h(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) 式中,H(u,v)有时被称为光传递函数。

2 噪声模型

能够模仿噪声的行为和效果的能力是图像复原的核心。本章中,我们对两种基本噪声模型感兴趣;空间域中的噪声(用噪声概率密度函数来描述)以及频域中的噪声(用噪声的各种傅里叶特性来描述)。

2.1 用imnoise函数为图像添加噪声

图像处理工具箱采用imnoise函数,使噪声污染一幅图像,基本语法

g = imnoise(f, type, parameters)

函数imnoise在为图像加噪声之前,需要转换为范围在[0,1]的double类。

下面让我们将均值为m、方差为var的高斯噪声加到图像上。

>> f = imread('jimei2.jpg');
>> d = im2double(f);
>> g = imnoise(d, 'gaussian', 0.1, 0.05); //这里均值为0.1,方差为0.05
>> subplot(1,2,1),imshow(d),title('Original Image');
>> subplot(1,2,2),imshow(g,[]),title('Polluted By Gaussian');

在这里插入图片描述
除了高斯噪声,imnoise函数还可以添加椒盐噪声与泊松噪声。

2.2 用给定分布产生空间随机噪声

在函数imnoise中,能够产生可用类型和参数的噪声是很有必要的。空间噪声值是随机数,以概率密度函数(PDF)或者等价的、相应的累积分布函数(CDF)为特征。我们感兴趣的分布类型的随机数的产生要符合概率论的一些最简单规则。许多随机数产生器以区间(0,1)内具有均匀CDF的随机数产生问题为基础,我们就需要用其构造自己想要的随机变量。

如果w是在区间(0,1)内均匀分布的随机变量,那么我们可以通过求解下面这个方程来得到具有规定的CDF和F的随机变量z: z = F 1 ( w ) z = F^{-1}(w) 这个简单但却强有力的结果也可以等价地通过寻找方程F(z)=w的解来说明。下面是常用的随机变量以及他们的PDF:在这里插入图片描述
接下来让我们用M-函数编程去定义自己的imnoise2函数可以生成上图中我们想要的随机变量

function R=imnoise2(type,M,N,a,b)%type是函数类型,M*N是噪声数组的大小,a,b为两个参数
%设置默认值
if nargin==1%如果函数的输入参数为1,则默认a=0;b=1;M=1;N=1
    a=0;b=1;
    M=1;N=1;
elseif nargin==3%如果函数的输入参数为3,则默认a=0;b=1
    a=0;b=1;
end
%开始运行程序
switch lower(type)
    case 'gaussian'%如果是高斯类型,执行下面方程
        R=a+b*randn(M,N);
    case 'salt & pepper'%如果是焦盐类型,当输入参数小于等于3,a=0.05,b=0.05
        if nargin<=3
            a=0.05;b=0.05;
        end
        %检验Pa+Pb是否大于1
        if(a+b)>1
            error('The sum Pa+Pb must be not exceed >1')
        end
        R(1:M,1:N)=0.5;
        X=rand(M,N);%(0,1)范围内产生一个M*N大小的均匀随机数组
        c=find(X<=a);%寻找X中小于等于a的数,并赋值为0
        R(c)=0;
        u=a+b;
        c=find(X>a & X<=u);%寻找X中大于a并小于等于u的数,并赋值为1
        R(c)=1;
    case 'lognormal'%对数正态类型,当输入参数小于等于3,a=1,b=0.25,执行下面方程
        if nargin<=3
            a=1;b=0.25;
        end
        R=a*exp(b*randn(M,N));
    case 'rayleigh'%瑞利类型,执行下面方程
        R=a+(-b*log(1-rand(M,N))).^0.5;
    case 'exponential'%指数类型,执行下面方程
        if nargin<=3%如果输入参数小于等于3,a=1
            a=1;
        end
        if a<=0%如果a=0,错误类型
            error('Parameter a must be positive for exponential type.')
        end
        k=-1/a;
        R=k*log(1-rand(M,N));
    case 'erlang'%厄兰类型,如果输入参数小于等于3,a=2,b=5
        if nargin<=3
            a=2;b=5;
        end
      if(b~=round(b)|| b<=0)%如果b=0,错误类型
          error('Param b must a positive integer for Erlang.')
      end 
      k=-1/a;
      R=zeros(M,N);
      for j=1:b
          R=R+k*log(1-rand(M,N));
      end
    otherwise%如果不是以上类型,输出未知分配类型
        error('Unknown distribution type.')
end

有了imnoise2函数我们就可以得到我们自己想要类型的随机变量,让我们来生成一下他们的直方图观察一下分布:

>> r = imnoise2('gaussian',10000,1,0,1);
>> p = rand(10000,1);
>> q = imnoise2('lognormal',10000,1,1,0.25);
>> a = imnoise2('rayleigh',10000,1,0,1);
>> b = imnoise2('exponential',10000,1,1);
>> c = imnoise2('erlang',10000,1,2,5);
>> subplot(2, 3, 1), hist(r,50), title('Gaussian');
>> subplot(2, 3, 2), hist(p,50), title('Uniform');
>> subplot(2, 3, 3), hist(q,50), title('Lognormal');
>> subplot(2, 3, 4), hist(a,50), title('Rayleigh');
>> subplot(2, 3, 5), hist(b,50), title('Exponential');
>> subplot(2, 3, 6), hist(c,50), title('Erlang');

在这里插入图片描述
这里我们选取10000的数量级呈现出来的直方图,明显可以看出来每一个随机变量都分布都是符合其概率密度函数变化的。

2.3 周期噪声

一幅图像的周期噪声典型地产生于图像获取过程中的电气和电动机械的干扰。图像的周期噪声通常通过频率滤波来处理。周期噪声的模型是2D正弦波,他有如下所示的方程式: r ( x , y ) = A s i n [ 2 π u 0 ( x + B x ) / M + 2 π v 0 ( y + B y ) / N ] r(x,y)=Asin[2\pi u_0(x+B_x)/M+2\pi v_0(y+B_y)/N] A是振幅,u0和v0分别确定了关于x轴和y轴的正弦频率。Bx和By是关于原点的相移。这个方程式的DFT是: R ( u , v ) = j A M N 2 [ e j 2 π ( u 0 B x / M + v 0 B y / N ) δ ( u + u 0 , v + v 0 ) e j 2 π ( u 0 B x / M + v 0 B y / N ) δ ( u u 0 , v v 0 ) ] R(u,v)=j\frac{AMN}{2}[e^{-j2\pi (u_0B_x/M+v_0B_y/N)}\delta(u+u_0,v+v_0)-e^{-j2\pi (u_0B_x/M+v_0B_y/N)}\delta(u-u_0,v-v_0)] 我们可以根据DFT来编写imnoise3函数生成周期噪声

function [r, R, S] = imnoise3(M, N, C, A, B)

% 根据周期噪声的DFT公式得到,A是振幅,u0,v0是关于x轴和y轴确定正弦频率,这里是C表示
% Bx和By是关于原点的相移。
% [r,R,S] = IMNOISE3(M,N,C,A,B),产生大小为M-by-N的空间正弦噪声模式r,
% 其傅里叶变换R和频谱S。 其余参数如下:
% C是K-by-2矩阵,包含K对频域坐标(u,v), 表示频域中脉冲的位置。 
% 这些位置相对于频率矩形中心(M / 2 + 1,N / 2 + 1)。 每个脉冲只需要一个坐标。 
% 程序自动生成共轭对称脉冲的位置。 这些脉冲信号决定了r的频率成分。
% A是1×k矢量,包含每个K脉冲对的幅度。 如果参数中不包含A,则使用的默认值为A = ONES(1,K)。 
% 然后B自动设置为其默认值(参见下一段)。 为A(j)指定的值与C(j,12)中的坐标相关联。 
% B是K-by-2矩阵,包含每个脉冲对的Bx和By相位分量。 B的默认值为B(1:K,12= 0% Process input parameters.
[K, n] = size(C);
if nargin ==3
    A(1:K) = 1.0;
    B(1:K, 1:2) = 0;
elseif nargin == 4
    B(1:K, 1:2) = 0;
end

% Generate R
R = zeros(M, N);
for j = 1:K
    u1 = M/2 + 1 + C(j, 1);
    v1 = N/2 + 1 + C(j, 2);
    R(u1, v1) = i * (A(j)/2) * exp(i * 2 * pi * C(j, 1)* B(j,1)/M);  % 位于(u + u0, v + v0) 的冲击处的R
    % Complex conjugate.
    u2 = M/2 + 1 - C(j, 1);
    v2 = N/2 + 1 - C(j, 2);
    R(u2, v2) = -i * (A(j)/2) * exp(i * 2 * pi * C(j, 2)* B(j,2)/M);% 位于(u - u0, v - v0) 的冲击处的R
end
% Compute spectrum and spatial sinusoidal pattern.
S = abs(R);
r = real(ifft2(ifftshift(R)));

我们可以指定傅里叶谱中的脉冲坐标,将其反变换为周期噪声。

>> C = [0 64; 0 128; 32 32; 64 0; 128 0; -32 32];
>> [r, R, S] = imnoise3(512,512,C);
>> subplot(1,2,1),imshow(S,[]),title('Specified Pulse');
>> subplot(1,2,2),imshow(r,[]),title('Spatial sinusoidal noise');

在这里插入图片描述
周期噪声在频域傅里叶谱中只是一个明亮的点,选择好滤波器在频域内很容易除去周期噪声。

3 仅有噪声的复原——空间滤波

3.1 空间噪声滤波器

在这一节我们假设图像出现的退化仅仅是噪声,即退化遵循: g ( x , y ) = f ( x , y ) + η ( x , y ) g(x,y)=f(x,y)+\eta(x,y) 在这种情况下,选择的降低噪声的方法是空间滤波。

我们用M-函数去定义一个可以生成不同空间滤波器的函数:

function f=spfilt(g,type,m,n,parameter)
%spfilt执行线性和非线性的空间滤波器,g为原图像,type为滤波器类型,M*N为滤波器模板大小
%处理输入参数
if nargin==2
    m=3;n=3;Q=1.5;d=2;
elseif nargin==5
    Q=parameter;d=parameter;
elseif nargin==4
    Q=1.5;d=2;
else
    error('Wrong number of inputs.');
end
%开始执行滤波
switch type
    case 'amean'%算数平均滤波
        w=fspecial('average',[m n]);
        f=imfilter(g,w,'replicate');
    case 'gmean'%几何平均滤波
        [g, revertClass] = tofloat(g);
        f = exp(imfilter(log(g), ones(m,n), 'replicate')).^(1/m/n);
        f = revertClass(f);
    case 'hmean'%调和平均滤波
        [g, revertClass] = tofloat(g);
        f = m * n ./ imfilter(1./(g + eps), ones(m,n), 'replicate');
        f = revertClass(f);
    case 'median'%中值滤波
        f=medfilt2(g,[m n],'symmetric');
    case 'max'%最大值滤波
        f=ordfilt2(g,m*n,ones(m,n),'symmetric');
    case 'min'%最小值滤波
        f=ordfilt2(g,1,ones(m,n),'symmetric');
    case 'midpoint'%中值滤波
        f=ordfilt2(g,1,ones(m,n),'symmetric');
        f=ordfilt2(g,m*n,ones(m,n),'symmetric');
        f=imlincomb(0.5,f1,0.5,f2);
    otherwise
        error('Unkown filter type.')
end

下面我们使用spfilt去生成一个中值滤波器处理被椒盐噪声污染的图像。

>> f = imread('jimei2.jpg');
>> [M,N] = size(f);
>> R = imnoise2('salt & pepper', M, N, 0.1, 0.1);
>> g = f;
>> g(R ==0) = 0;
>> g(R ==1) = 255;
>> g1 = rgb2gray(g);
>> fs = spfilt(g1, 'median', 3, 3);
>> subplot(1,3,1),imshow(g1),title('Polluted By Salt And Pepper');
>> subplot(1,3,2),imshow(fs),title('Restore By Median');
>> fs1 = spfilt(fs, 'median', 3, 3);
>> subplot(1,3,3),imshow(fs1),title('Restore By Median Again');

在这里插入图片描述
这里结果就是简单的用中值滤波器处理了两次椒盐噪声污染的图像,反复处理最后结果会越来越清晰,空间滤波器应该已经很熟悉了。

3.2 自适应空间滤波器

上一节的空间滤波器我们在第二章已经很详细的学过了,但是在第二章中讨论用于图像处理的滤波器,并未考虑图像中的一点对其他点的特征变化,下面我们来学习两个简单的自适应滤波器,滤波器的特性变换以m×n矩形窗口Sxy定义的滤波器区域内图像的统计特性为基础。

自适应局部降低噪声滤波器

随机变量最简单的统计度量是其均值和方差。这也是我们在拿到一张图像以后最容易得到的两个属性,均值给出了在其上计算均值的区域中的平均灰度的度量,而方差则给出了该区域的对比度的度量。

滤波器作用于局部区域Sxy。滤波器在该区域中心任意一点(x,y)上的响应基于以下4个量: (a) g(x,y),带噪图像在点(x,y)的值;
(b) δ2η,污染f(x,y)以形成g(x,y)的噪声的方差;
(c)mL,Sxy中像素的局部均值;
(d)δ2L,Sxy中像素的局部方差。

我们希望滤波器性能如下:
1.如果 δ2η为零,则滤波器应该简单地返回g(x,y)的值。这无关紧要,在零噪声情况下g(x,y)等于f(x,y)。
2.如果局部方差与δ2η是高度相关的,则滤波器返回g(x,y)的一个近似值。高局部方差通常与边缘相关,并且应该保护这些边缘。
3.如果两个方差相等,我们则希望滤波器返回Sxy中的像素的算术均值。这种情况发生在局部区域与整个图像有相同特性的条件下,并且局部噪声将通过简单地求平均值来降低。

基于这些假设得到的f*(x,y)的自适应表达式可以写成 f ^ ( x , y ) = g ( x , y ) δ η 2 δ L 2 [ g ( x , y ) m L ] \hat{f}(x,y) = g(x,y)-\frac{\delta_\eta^2}{\delta_L^2}[g(x,y)-m_L]

自适应中值滤波器
对于上一小节使用的中值滤波器,只要脉冲噪声的空间密度不大,性能就会很好,这里我们要介绍的自适应中值滤波器可以平滑非脉冲噪声时会试图保留细节,这是传统中值滤波器所做不到的。我们令: z m i n = S x y z m a x = S x y z m e d = S x y z x y = ( x , y ) S m a x = S x y z_{min}=S_{xy}中的最小灰度值 \\ z_{max}=S_{xy}中的最大灰度值 \\ z_{med}=S_{xy}中的灰度值的中值 \\ z_{xy}=坐标(x,y)处的灰度值 \\ S_{max} = S_{xy}允许的最大尺寸 自适应中值滤波算法以两个进程工作,分别表示为进程A和进程B,如下所示:
进程A A 1 = z m e d z m i n A 2 = z m e d z m a x A 1 > 0 A 2 < 0 , B S m a x A z m e d A_1=z_{med}-z_{min} \\ A_2 = z_{med}-z_{max} \\ 如果A_1>0且A_2<0,则转到进程B,否则增大窗口尺寸 \\ 如果窗口尺寸≤S_{max},则重复进程A,否则输出z_{med} 进程B B 1 = z x y z m i n B 2 = z x y z m a x B 1 > 0 B 2 < 0 z x y z m e d B_1 = z_{xy}-z_{min} \\ B_2 = z_{xy}-z_{max} \\ 如果B_1>0且B_2<0,则输出z_{xy},否则输出z_{med} 理解该算法的关键在于,要记住它有3个主要目的:去除椒盐(脉冲)噪声,平滑其他非脉冲噪声,并减少诸如物体边界细化或粗化等失真。值zmin和zmax在算法统计上认为是类脉冲噪声成分,即使它们在图像中并不是最低最高的可能像素值,进程A的目的是确定中值滤波器的输出zmed是否是一个脉冲,进程B的目的是确定zmed非脉冲以后进行中值排序。下面我们来实现一下自适应中值滤波:

function f = adpmedian(g,Smax)
if (Smax<=1)||(Smax/2==round(Smax/2))||(Smax~=round(Smax))
    error('Smax must be an odd integer >1.')
end
f=g;
f(:)=0;
alreadyProcessed=false(size(g));
for k=3:2:Smax
    zmin=ordfilt2(g,1,ones(k,k),'symmetric');
    zmax=ordfilt2(g,k*k,ones(k,k),'symmetric');
    zmed=medfilt2(g,[k k],'symmetric');
    
    processUsingLevelB=(zmed>zmin)&(zmax>zmed)&...
        ~alreadyProcessed;
    zB=(g>zmin)&(zmax>g);
    outputZxy=processUsingLevelB & zB;
    outputZmed=processUsingLevelB&~zB;
    f(outputZxy)=g(outputZxy);
    f(outputZmed)=zmed(outputZmed);
    
    alreadyProcessed=alreadyProcessed | processUsingLevelB;
    if all(alreadyProcessed(:))
        break;
    end
end
f(~alreadyProcessed)=zmed(~alreadyProcessed);
end

我们来对比一下传统滤波器和自适应滤波器的区别:

>> w = imread('jimei2.jpg');
>> f = im2double(rgb2gray(w));
>> g = imnoise(f, 'salt & pepper', 0.25);
>> f1 = medfilt2(g, [7,7], 'symmetric');
>> f2 = adpmedian(g,7);
>> subplot(1,3,1),imshow(g,[]),title('Polluted By Salt And Pepper');
>> subplot(1,3,2),imshow(f1,[]),title('Restore By Traditional median filter');
>> subplot(1,3,3),imshow(f2,[]),title('Restore By adaptive median filter');

在这里插入图片描述
我们可以看出来,传统的中值滤波器和自适应中值滤波器都很好的实现了去噪声的功能,但是明显可以看出传统滤波器处理后图像细节也被抹除了不少,边缘变得有点模糊,自适应中值滤波器就很好的保留了细节又消除了噪声。

4 退化函数建模

在图像复原问题中,遇到的主要退化是图像模糊。场景和传感器产生的模糊可以用空间域或频域的低通滤波器来建模。另一个重要的退化模型是由于在图像获取时传感器和场景之间的均匀线性运动而产生的图像模糊,下面我们对运动退化函数建模:

>> f = checkerboard(8);
>> PSF = fspecial('motion', 7, 45);
>> gb = imfilter(f, PSF, 'circular');
>> noise = imnoise(zeros(size(f)),'gaussian',0,0.001);
>> g = gb + noise;
>> subplot(2, 2, 1), imshow(pixeldup(f,8),[ ]);title('Chessboard');
>> subplot(2, 2, 2), imshow(gb);title('Motion blurred image');
>> subplot(2, 2, 3), imshow(noise);title('Noise');
>> subplot(2, 2, 4), imshow(g);title('Noise And Motion');

在这里插入图片描述
我们将在下面两节去复原图像。

5 维纳滤波

维纳滤波是一种最早、也是最为熟知的线性图像复原方法。维纳滤波器寻找统计误差函数最小的估计f^: e 2 = E { ( f f ^ ) 2 } e^2=E\{(f-\hat{f})^2\} 其中,E是期望值算子,f是未退化图像。这个表达式在频域中的表达为: F ^ ( u , v ) = [ 1 H ( u , v ) H ( u , v ) 2 H ( u , v ) 2 + S η ( u , v ) / S f ( u , v ) ] G ( u , v ) \hat{F}(u,v)=[\frac{1}{H(u,v)}\frac{|H(u,v)|^2}{|H(u,v)|^2+S_{\eta}(u,v)/S_f(u,v)}]G(u,v) 比例式Sη(u,v)/Sf(u,v)被称为信噪功率比。我们感兴趣的两个量为平均噪声功率和平均图像功率,定义为: η A = 1 M N u v S η ( u , v ) \eta_A=\frac{1}{MN}\sum_u\sum_vS_\eta(u,v) f A = 1 M N u v S f ( u , v ) f_A=\frac{1}{MN}\sum_u\sum_vS_f(u,v) 其中,M和N分别表示图像和噪声数组的垂直和水平大小。这些量都是标量,它们的比例: R = η A f A R=\frac{\eta_A}{f_A} 也是标量,有时被用来代替函数Sη(u,v)/Sf(u,v)以产生常量数组。我们用维纳滤波去复原上一小节运动模糊的图像:

>> fr1 = deconvwnr(g,PSF);
>> Sn = abs(fft(noise)).^2;
>> nA = sum(Sn(:))/prod(size(noise));
>> Sf = abs(fft2(f)).^2;
>> fA = sum(Sf(:))/prod(size(f));
>> NSPR = nA/fA;
>> fr2 = deconvwnr(g,PSF,NSPR);
>> NACORR = fftshift(real(ifft2(Sn)));
>> FACORR = fftshift(real(ifft2(Sf)));
>> fr3 = deconvwnr(g,PSF,NACORR,FACORR);
>> subplot(2,2,1),imshow(g,[]),title('Polluted Image');
>> subplot(2,2,2),imshow(fr1,[]),title('Inverse filtering');
>> subplot(2,2,3),imshow(fr2,[]),title('Wiener filter with constant ratio');
>> subplot(2,2,4),imshow(fr3,[]),title('Wiener filtering of autocorrelation function');

在这里插入图片描述
从结果可以看出,简单的维纳滤波(逆滤波)后的结果仍然模糊,含有噪声,使用常数比率的维纳滤波后的结果虽然比逆滤波好多了但是仍有模糊,而使用自相关函数的维纳滤波后的结果虽然仍有噪声存在,但是最接近原始图像,实质上由于噪声的存在逆滤波就不能起到很好的效果,如果不加噪声光使用逆滤波就可以很好的复原了。

6 约束的最小二乘法(规则化)滤波

关于退化函数H必须具有一些先验知识对于本章讨论都所有方法都很常见,维纳滤波也存在一定问题:未退化图像和噪声的功率谱必须是已知的。本节给出的算法仅要求噪声方差和均值的知识,并且应用到的每幅图像都能产生最优结果。

我们之前讨论的线性退化模型: g ( x , y ) = h ( x , y ) f ( x , y ) + η ( x , y ) g(x,y) = h(x,y)★f(x,y)+\eta(x,y) 用向量矩阵的形式表达就是: g = H f + η g = Hf + \eta 由此得出复原问题可以简化为简单的矩阵运算,这样的结论看起来是顺理成章的,遗憾的是我们在处理较大数量级的矩阵并不是一件很轻松的事情,这里不推导最小二乘法,该方法的核心是H对噪声的敏感性问题。减少噪声敏感性问题的一种方法是将复原的最优化性建立在平滑度量上,要想有意义,必须用手边问题的参数来约束复原,因此我们期望找到的是一个标准函数C的最小值,定义如下: C = x = 0 M 1 y = 0 N 1 [ 2 f ( x , y ) ] 2 C=\sum^{M-1}_{x=0}\sum^{N-1}_{y=0}[▽^2f(x,y)]^2 其约束为 g H f ^ 2 = η 2 ||g-H\hat{f}||^2=||\eta||^2 式中,||w||2=wTw是欧几里得范数,hat{f}是未退化图像的估计。拉普拉斯算子▽2在空域滤波器学过。我们下面用约束最小二乘方滤波去复原图像:

>> f = checkerboard(8);
>> PSF = fspecial('motion',7,45);
>> gb = imfilter(f, PSF, 'circular');
>> noise = imnoise(zeros(size(f)),'gaussian',0,0.001);
>> g = gb + noise;
>> fr1 = deconvreg(g,PSF,4);
>> fr2 = deconvreg(g,PSF,0.4,[1e-7 1e7]);
>> subplot(1,3,1),imshow(g,[]),title('Polluted Image');
>> subplot(1,3,2),imshow(fr1,[]),title('Restored By NOISEPOWER');
>> subplot(1,3,3),imshow(fr2,[]),title('Restored By NOISEPOWER Range [1e-7 1e7]');

在这里插入图片描述
结果图像与原始图像相比,稍微有些改善,还是没有使用自相关函数的维纳滤波后的复原效果好,但是该方法使用的先验知识比维纳滤波要少,可见我们掌握越多的先验知识就可以将结果做到越好。

猜你喜欢

转载自blog.csdn.net/weixin_42939683/article/details/106757484