数字图像处理第四章——图像复原(下)

数字图像处理—图像复原

(三)仅有噪声的复原——空间滤波

如果出现的退化仅仅是噪声,那么退化就遵循模型:
在这里插入图片描述
在这种情况下,选择的降低噪声的方法是空间滤波。

3.1 空间噪声滤波器

首先要得到一幅被噪声污染的图像。

编写代码:

f = imread('D:\数字图像处理\第四章学习\strawberry.jpg');
%f = imread('D:\数字图像处理\第四章学习\cat5.jpg');
%f = imread('D:\数字图像处理\第四章学习\building.jpg');
%f = imread('D:\数字图像处理\第四章学习\jimei.jpg');
[M,N] = size(f);
a1 = imnoise2( 'salt & pepper', M, N, 0.1, 0);      %概率为0.1的胡椒噪声
a2 = imnoise2( 'salt & pepper', M, N, 0.5, 0);      %概率为0.5的胡椒噪声
a3 = imnoise2( 'salt & pepper', M, N, 1, 0);        %概率为1的胡椒噪声
c1 = find(a1==0);
gp1 = f;
gp1(c1) = 0;

c2 = find(a2==0);
gp2 = f;
gp2(c2) = 0;

c3 = find(a3==0);
gp3 = f;
gp3(c3) = 0;

subplot(2, 2, 1), imshow(f);title('(a)原图像');
subplot(2, 2, 2), imshow(gp1);title('(b)概率为0.1的胡椒噪声污染后');
subplot(2, 2, 3), imshow(gp2);title('(c)概率为0.5的胡椒噪声污染后');
subplot(2, 2, 4), imshow(gp3); title('(d)概率为1的胡椒噪声污染后');

代码运行效果如下:

分析:一张图片被胡椒噪声污染后,图片会出现黑色胡椒状小点。对于同一张图片,胡椒噪声概率越大,图片被污染污染越严重,最终显示效果也更模糊,当概率为1的时候,图片为纯黑色;对于不同类型的图片,图片颜色越亮,胡椒噪声污染效果越明显(白色最明显),而图片的黑色部分被污染后变化最不明显(例如第四幅图的背景),不同类型的图片在概率为1的时候显示相同(纯黑色),所以胡椒噪声污染图像算法适用于浅色图像,对黑色图像效果不大

同样的,用盐粒噪声污染图像。

编写代码:

f = imread('D:\数字图像处理\第四章学习\strawberry.jpg');
%f = imread('D:\数字图像处理\第四章学习\blue.jpg');
%f = imread('D:\数字图像处理\第四章学习\star.jpg');
%f = imread('D:\数字图像处理\第四章学习\jimei.jpg');
[M,N] = size(f);
R = imnoise2( 'salt & pepper', M, N, 0, 0.1);      %盐粒噪声
c = find(R==1);
gs = f;
gs(c) = 255;
subplot(1, 2, 1), imshow(f);title('(a)原图像');
subplot(1, 2, 2), imshow(gs);title('(b)盐粒噪声污染后');

代码运行效果如下:



分析: 一张图片被盐粒噪声污染后,图像会出现白色的盐粒状小点。当图片背景为黑色时(第四张夜间建筑物图像),污染效果最明显,而图片背景为白色(第一张草莓图),白色背景污染效果几乎看不到,四张图背景颜色逐渐加深,图像被污染的效果也越来越明显。所以与椒盐噪声相反,盐粒噪声污染图像算法适用于深色图像

第三步过滤胡椒噪声,使用Q为正值的反调和滤波器。

编写代码:

w = imread('D:\数字图像处理\第四章学习\strawberry.jpg');
%w = imread('D:\数字图像处理\第四章学习\jimei.jpg');
f = im2double(w);    
[M,N] = size(f);
a1 = imnoise2( 'salt & pepper', M, N, 0.3, 0);
c1 = find(a1==0);
gp = f;
gp(c1) = 0;
fp=spfilt(gp,'chmean',3,3,1.5);        %过滤胡椒噪声
subplot(3, 3, 1), imshow(w);title('(a)原图像');
subplot(3, 3, 2), imshow(gp);title('(b)概率为0.3的胡椒噪声污染后');
subplot(3, 3, 3), imshow(fp);title('(c)过滤胡椒噪声后');

代码运行效果如下:


分析:虽然被胡椒噪声污染后的图像由于图像本身颜色不同而最终显示的污染效果不同,但是用Q为正值的反调和滤波器过滤胡椒噪声后,图像都能达到原始状态,所以该算法适用于一般类型图像的过滤胡椒噪声

接下来过滤盐粒噪声,使用 Q 为负值的反调和滤波器过滤:

编写代码:

w = imread('D:\数字图像处理\第四章学习\strawberry.jpg');
%w = imread('D:\数字图像处理\第四章学习\jimei.jpg');
f = im2double(w);    
[M,N] = size(f);
R = imnoise2( 'salt & pepper', M, N, 0, 0.1);
c = find(R==1);
gs = f;
gs(c) = 255;
fp=spfilt(gs,'chmean',3,3,-1.5);
subplot(3, 3, 1), imshow(w);title('(a)原图像');
subplot(3, 3, 2), imshow(gs);title('(b)盐粒噪声污染后');
subplot(3, 3, 3), imshow(fp);title('(c)过滤盐粒噪声后');

代码运行效果如下:


分析:同样的,虽然被盐粒噪声污染后的图像由于图像本身颜色不同而最终显示的污染效果不同,但是用Q为负值的反调和滤波器过滤胡椒噪声后,图像几乎能达到原始状态,所以该算法适用于一般类型图像的过滤盐粒噪声

使用最小滤波器也可以达到过滤胡椒噪声的效果。

编写代码:

w = imread('D:\数字图像处理\第四章学习\xiaomai.jpg');
%w= imread('D:\数字图像处理\第四章学习\face.jpg');
%w = imread('D:\数字图像处理\第四章学习\star.jpg');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
[M,N] = size(f);
R = imnoise2( 'salt & pepper', M, N, 0, 0.1);
c = find(R==1);
gs = f;
gs(c) = 255;
fp=spfilt(gs,'min',3,3);
subplot(2, 2, 1), imshow(w);title('(a)原图像');
subplot(2, 2, 2), imshow(f);title('(a)原图像的灰度图像');
subplot(2, 2, 3), imshow(gs);title('(b)盐粒噪声污染后');
subplot(2, 2, 4), imshow(fp);title('(c)最小滤波器过滤盐粒噪声后');   %必须是灰度图像

代码运行效果如下:


分析:首先这个算法功能与使用 Q 为负值的反调和滤波器过滤算法功能一样可以过滤盐粒噪声,但是很明显,这个算法更弱,首先需要将图像转换为灰度图像才能过滤,增加了代码的复杂性,而且并不适用于所有场合,其次当图像原来存在白色部分时,最小滤波器会识别不出来,白色部分是图像本身的,还是盐粒噪声污染的,最终造成原图像的白色部分也被过滤掉

使用最大滤波器也可以达到过滤椒盐噪声的效果。
编写代码:

%w = imread('D:\数字图像处理\第四章学习\xiaomai.jpg');
%w = imread('D:\数字图像处理\第四章学习\face.jpg');
%w = imread('D:\数字图像处理\第四章学习\tree.jpg');
w = imread('D:\数字图像处理\第四章学习\star.jpg');
f = im2double(rgb2gray(w)); 
[M,N] = size(f);
a1 = imnoise2( 'salt & pepper', M, N, 0.1, 0);
c1 = find(a1==0);
gp1 = f;
gp1(c1) = 0;
fpmax = spfilt(gp1,'max',3,3);
subplot(2, 2, 1), imshow(w);title('(a)原图像');
subplot(2, 2, 2), imshow(f);title('(b)原图像的灰度图像');
subplot(2, 2, 3), imshow(gp1);title('(c)盐粒噪声污染后');
subplot(2, 2, 4), imshow(fpmax);title('(d)最大滤波器过滤椒盐噪声后');   %必须是灰度图像

代码运行效果如下:


分析:该算法功能与使用 Q 为正值的反调和滤波器过滤算法功能一样可以过滤椒盐噪声,但是很明显,这个算法更弱,与最小滤波器算法一样,需要将图像转换为灰度图像才能过滤,增加了代码的复杂性,而且并不适用于所有场合,其次当图像原来存在白色部分时,最大滤波器会增强原图像的白色部分,最终造成原图像的白色部分加强(例如小孩人脸的白色网状物,星空图的星星亮点),达不到恢复到原图像的效果

3.2 自适应空间滤波

前面讨论的滤波器应用于不考虑图像特性在不同位置之间存在差异的那些图像。在有些应用中,可以通过使用能够被滤波的区域的图像特性自适应的滤波器来改进结果。主要考虑自适应中值滤波器。自适应中值滤波算法工作在两个层面,表示为 levelA和 levelB:

Level A:如 果 Zmin<Zmed<Zmax ,转 向 levelB; 否则增大窗口尺寸 ,如果窗口尺寸小于等于Smax , 重复 levelA;否则输出Zmed

Level B:如 果 Zmin<Zxy<Zmax ,输出 Zxy; 否则输出Zmed。

Zmin=Sxy中的最小亮度值
Zmax=Sxy中的最大亮度值
Zmed=Sxy中的中值
Zxy=坐标(x,y)处的亮度值
Smax表示自适应滤波器窗口允许的最大尺寸。

名为 adpmedian的 M-函数可实现这个算法,语法为:

f = adpmedian(g, Smax)   %g是被滤波的图像

编写代码:

w = imread('D:\数字图像处理\第四章学习\xiaomai.jpg');
%w= imread('D:\数字图像处理\第四章学习\face.jpg');
%w= imread('D:\数字图像处理\第四章学习\blue.jpg');
%w = imread('D:\数字图像处理\第四章学习\star.jpg');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
g = imnoise( f,'salt & pepper',0.25);
f1 = medfilt2(g,[7 7],'symmetric');
f2 = adpmedian(g,7);
subplot(2, 2, 1), imshow(f);title('(a)原图像的灰度图像');
subplot(2, 2, 2), imshow(g);title('(b)被密度为0.25的椒盐噪声污染的图像');
subplot(2, 2, 3), imshow(f1);title('(c)使用大小为7x7的中值滤波器得到的结果');
subplot(2, 2, 4), imshow(f2);title('(d)使用Smax=7的自适应中值滤波得到的结果');  

代码运行效果如下:



实验结论:对于同一张图像,总体来说使用自适应中值滤波得到的结果比使用大小为7x7的中值滤波得到的结果图还原效果要好,然后通过对比不同图像,发现几个细节部分,使用大小为7x7的中值滤波得到的结果虽然也没有噪声,但是失真,图像比较模糊,但是模糊部分主要存在于原图像的白色部分周围(例如小孩的脸部由于有白点所以脸部白点周围模糊,但是卡通图像的脸部并没有白点,脸部并不模糊),而且图像也会丢失部分白色信息(例如星空图像丢失了许多星星的亮点),可以看出使用大小为7x7的中值滤波对于处理含白色像素点的图像并不友好,而自适应中值滤波在这方面做的更好,得到的结果图像清晰,失真小,还原度高

(四)退化函数建模

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

PSF= fspecial('motion 1 , len, theta)

调用fspecial 将返回PSF,近似于由len像素的摄像机线性移动产生的效果。参数 theta 以度为单位,以顺时针方向对正水平轴进行量度。Len 和 theta 的默认值分别是 9 和 0, 这些设置对应在水平方向上移动9 个像素。使用函数 imfilter 来创建已知PSF 或用刚才描述的方法计算得到的PSF 的退化图像:

g = imfilter(f, PSF, 'circular');

'circular’用来减少边缘效应。然后通过添加适当的噪声来完成退化图像模拟:

g = g+noise;

noise 是与 g 大小相同的随机噪声图像。由函数 checkerboard 产生的测试模式对于实现这个目的非常有 用,因为大小可以缩放,但却不会影响主要特征。语法为:

C = checkerboard(NP, M, N) 

NP 是每个正方形一边的像素数,M 是行数,N 是列数。如果省略 N,默认为 M。 如果 M 和 N 都省略,将产生一边为 8 个正方形的方形棋盘板。另外,如果省略NP, 将默认为 10 像素。在棋盘板上,左半部分的亮正方形是白色的,右半部分的亮正方形是灰色的。用下面 的命令可产生亮正方形全是白色的棋盘板:

 K = checkerboard(NP, M, N) > 0.5;

函数 checkerboard 产生的图像属于 double 类,值在区间[0,1]内。 由于有些复原算法对于大图像来说很慢,因此好的办法是用小图像做实验,从而减少计算时间。在这种情况下,如果目的是显示,那么通过像素复制来放大图像是很有用的。下面的函数做了这项工作

B = pixeldup(A, m, n) 

这个函数将 A的每个像素在垂直方向上总共复制了 m 次,在水平方向上总共复制了n 次。 如果省略n, 将默认为m。

模糊的,有噪声的图像建模:

编写代码:

f = checkerboard(8);                  %产生棋盘板图像
PSF = fspecial('motion', 7, 45);      % 运动模糊,PSF刚好为空间滤波器
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('(a)8个正方形的方形棋盘板图像');     %小图像来节省运算时间
subplot(2, 2, 2), imshow(gb);title('(b))用 len=7 theta=-45°的fspecial模糊过的图像');
subplot(2, 2, 3), imshow(noise);title('(c)噪声图像');
subplot(2, 2, 4), imshow(g);title('(d) (b)和(c)之和');  

代码运行效果如下:

分析:在(d)图中可以看到,虽然添加了模糊和噪声模式,但是噪声却不容易看见,这是因为噪声的最大值近似为0.15,而图像的最大值是1。但是,这种噪声水平在试图复原g时却不是无关紧要的,这点在下面维纳滤波中可以发现

(五)维纳滤波

维纳滤波是一种最早、也是最为熟知的线性图像复原方法。 维纳滤波器寻找统计误差函数最小的估计f^:
在这里插入图片描述
其中,E是期望值算子,f是未退化图像。这个表达式在频域中的表达是:
在这里插入图片描述

维纳滤波通过图像处理工具箱函数 deconvwnr 来实现,函数 deconvwnr 有 3 种可能的 语法形式。在所有的这 3 种形式中,g 代表退化图像,frest 是复原图像。第一种语法形式:

  frest = deconvwnr(g,PSF);    

假设信噪比是零。这样,维纳滤波器的这种形式就成了逆滤波器。语法形式:

frest = deconvwnr(g,PSF,NSPR);    

假设信噪功率比己知,或是常量,或是数组;函数接受任何一个。这是用于实现参数维纳 滤波器的语法,在这种情况下,NSPR 将是标量输入。最后,语法形式:

frest = deconvwnr(gf PSF, NACORR, FACORR)

当模糊,含噪声的图像使用维纳滤波还原。
编写代码:

f = checkerboard(8);                                     % 产生一个一面为8个正方形的测试板
PSF = fspecial('motion',7,45);                           % 运动模糊,PSF刚好为空间滤波器
gb = imfilter(f,PSF,'circular');                         % 减少边界效应
noise = imnoise(zeros(size(f)),'gaussian',0,0.001);      % 高斯噪声
g = gb + noise;                                          % 添加高斯噪声构造退化的图像模型   
fr1 = deconvwnr(g,PSF);                                  % 直接逆滤波  

Sn = abs(fft(noise)).^2;                                 % 噪声功率谱
nA = sum(Sn(:))/prod(size(noise));                       % 平均噪声功率,prod计算数组元素的连乘积。
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('(a)模糊加噪声的图像');
subplot(2, 2, 2), imshow(fr1,[]);title('(b)简单的维纳滤波(逆滤波)后的结果');
subplot(2, 2, 3), imshow(fr2,[]);title('(c)使用常数比率的维纳滤波后的结果');
subplot(2, 2, 4), imshow(fr3,[]);title('(d)使用自相关函数的维纳滤波后的结果');

代码运行效果如下:

实验结论:可以看出,简单的维纳滤波(逆滤波)后的结果仍然模糊,含有噪声,使用常数比率的维纳滤波后的结果有了很大改进,图像轮廓大致还原,有一些模糊,而使用自相关函数的维纳滤波后的结果虽然仍有噪声存在,但是最接近原始图像。

当模糊但是不含噪声的图像使用维纳滤波还原。
编写代码:

f = checkerboard(8); 
PSF = fspecial('motion', 7, 45);
gb = imfilter(f, PSF,'circular');
g =gb;
fr1 = deconvwnr(g,PSF);
subplot(1, 2, 1), imshow(g,[]);title('(a)模糊的图像');
subplot(1, 2, 2), imshow(fr1,[]);title('(b)简单的维纳滤波(逆滤波)后的结果');

代码运行效果如下:

实验结论:不添加噪声后,简单的维纳滤波(逆滤波)后的结果,已经比添加噪声后的使用自相关函数的维纳滤波后的结果要好,这也可以验证第五节所说的,虽然噪声在图像中不容易看见,但是这种噪声水平在试图复原g时却不是无关紧要的

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

约束的最小二乘法滤波在工具箱中是通过函数 deconvreg 实现的,语法如下:

frest = deconvreg{gf PSF, NOISEPOWER, RANGE)

g是被污染的图像,frest是复原的图像,RANGE为值的范围。

编写代码:

f = checkerboard(8);                                     % 产生一个一面为8个正方形的测试板
PSF = fspecial('motion',7,45);                           % 运动模糊,PSF刚好为空间滤波器
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('(a)运动模糊+高斯噪声污染后图像');
subplot(1,3,2);imshow(fr1);title('(b)用NOISEPOWER等于4的规则化滤波器复原');
subplot(1,3,3);imshow(fr2);title('(c)用NOISEPOWER等于0.4且RANGE为[1e-7 1e7]的规则化滤波器复原');

代码运行效果如下:
在这里插入图片描述
实验结论:(b)图像与原始图像相比,稍微有些改善,但也可以明显看出,NOISEPOWER 的值并不是特别好。然后把 NOISEPOWER 的值的量级下调一个等级,RANGE 比默认值更加紧缩,发现复原效果有更大改善,但是很明显,还是没有使用自相关函数的维纳滤波后的复原效果好。

(七)利用露西-理查德森算法的迭代非线性复原

在工具箱中,L-R算法用 deconvlucy 函数实现的,基本语法如下:

f = deconvlucy(g, PSF, NUMIT, DAMPAR, WEIGHT)

f 代表复原的图像,g 代表退化图像,PSF是点扩散函数,NUMIT 为迭代的次数(默认为 10次), DAMPAR 是标量,指定了结果图像与原始图像 g 之间的偏离阈值。当像素值偏离原值的范 围在 DAMPAR 内时,就不用再迭代。这既抑制了这些像素上的噪声,又保留了图像细节。默认值为 0(无衰减)。 WEIGHT是数组,大小与 g 相同,它为每个像素都施以权重以反映像素的质量。

编写代码:

f = checkerboard(8);                                % 产生64×64像素的方形图像
PSF = fspecial('gaussian',7,10);                    % 产生一个大小为7×7且标准偏差为10的高斯PSF
SD = 0.01;                                          % 标准偏差
g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2);     % 添加均值为0、标准偏差为0.01的高斯噪声
 
DAMPAR = 10*SD;                                     % 结果图像与原图像的偏离阈值
LIM = ceil(size(PSF,1)/2);
WEIGHT = zeros(size(g));                            % WEIGHT数组大小64×64
WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1;              % WEIGHT数组有值为0的4像素宽的边界,其余像素为1
 
f1 = deconvlucy(g,PSF,5,DAMPAR,WEIGHT);             % 迭代5次
f2 = deconvlucy(g,PSF,10,DAMPAR,WEIGHT);            % 迭代10次
f3 = deconvlucy(g,PSF,20,DAMPAR,WEIGHT);            % 迭代20次
f4 = deconvlucy(g,PSF,100,DAMPAR,WEIGHT);           % 迭代100次
 
subplot(2,3,1);imshow(pixeldup(f,8));title('(a)原图像');
subplot(2,3,2);imshow(g);title('(b)由高斯噪声污染和模糊的图像');    
subplot(2,3,3);imshow(f1);title('(c)使用L-R算法迭代5次复原图像');   
subplot(2,3,4);imshow(f2);title('(d)使用L-R算法迭代10次复原图像');  % 图像虽然改进,但依然模糊
subplot(2,3,5);imshow(f3);title('(e)使用L-R算法迭代20次复原图像');  % 迭代20次为合理复原
subplot(2,3,6);imshow(f4);title('(f)使用L-R算法迭代100次复原图像'); % 除了稍微清晰明亮,并无显著改进

代码运行效果如下:
在这里插入图片描述
实验结论:对 DAMPAR 赋予10倍于SD的值,WEIGHT 数组的大小是 64x64, 并且有值为 0的 4 像素宽的边界,其余的像素都是 1。唯一剩下的变量是 NUMIT,即迭代的次数。可以看到( c )图虽然已经稍微有些改进,但是仍旧模糊。图 (d)和(e)显示了应用 NUMIT=10 和 20后得到的结果。其中,后一个结果是对模糊图像和带噪图像的合理复原。进一步增加迭代次数在复原结果上并没有显著改进。例如,图 (f)是使用 100 次迭代后获得的结果。这个图像只是比使用20 次迭代后获得的图像稍稍清晰和明亮了一些。在所有的结果中,看到的细黑色边界都是由数组 WEIGHT 中的 0 引起的。

(八)盲去卷积

在图像复原过程中,最困难的问题之一是前面讨论过的对这些复原算法 PSF 的恰当估计。正如先前表明过的那样,那些不以PSF 知识为基础的图像复原方法统称为盲去卷积算法。 盲去卷积的基本方法以最大似然估计为基础,也就是对随机噪声污染的量进行估计时采用的最佳策略。

工具箱用函数 deconvblind 来执行盲去卷积,基本语法如下:

[fr,PSF] = deconvblind{gr INITPSF)

g 是退化图像,INITPSF 是点扩散函数的初始估计。PSF 是这个函数最终计算得到 的估计值,fr 是利用估计的 PSF 复原图像。

编写代码:

PSF = fspecial('gaussian',7,10);
SD = 0.01;
g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2);
 
INITPSF = ones(size(PSF));                                              % 点扩散函数的初始估计
DAMPAR = 10*SD;                                                         % 结果图像与原图像的偏离阈值
LIM = ceil(size(PSF,1)/2);
WEIGHT = zeros(size(g));                                                % WEIGHT数组大小64×64
WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1;                                  % WEIGHT数组有值为0的4像素宽的边界,其余像素为1
[fr1,PSFe1] = deconvblind(g,INITPSF,5,DAMPAR,WEIGHT);                   % 盲去卷积迭代5次
[fr2,PSFe2] = deconvblind(g,INITPSF,10,DAMPAR,WEIGHT);                  % 盲去卷积迭代10次
[fr3,PSFe3] = deconvblind(g,INITPSF,20,DAMPAR,WEIGHT);                  % 盲去卷积迭代20次
 
subplot(2,2,1);imshow(pixeldup(PSF,73),[ ]);title('(a)原始PSF');        
subplot(2,2,2);imshow(pixeldup(PSFe1,73),[ ]);title('盲去卷积迭代5次时PSF估计值');
subplot(2,2,3);imshow(pixeldup(PSFe2,73),[ ]);title('盲去卷积迭代10次时PSF估计值');
subplot(2,2,4);imshow(pixeldup(PSFe3,73),[ ]);title('盲去卷积迭代20次时PSF估计值'); % 最接近真正PSF

代码运行效果如下:
在这里插入图片描述
观察拐角比较图像发现迭代20次得到的PSF更接近图a中真正的PSF.

猜你喜欢

转载自blog.csdn.net/Dujing2019/article/details/89354304