gusucode.com > 《matlab图像处理与界面编程宝典》秦襄培 编著,每章的MATLAB源代码程序 > 第19章/代码19-3.txt

    
I = imread('peppers.png');         % 读入图像
I = I(10+[1:256],222+[1:256],:);   % 图像剪切
figure, imshow(I);                 % 显示原始图像
title('Original Image');           % 设置图像标题
LEN = 31;                                     % 设置长度
THETA = 11;                                   % 设置角度
PSF = fspecial('motion',LEN,THETA);           % 生成滤波器
blurred = imfilter(I,PSF,'circular','conv');          % 图像卷积计算
figure,                                       % 新建窗口
imshow(blurred);                              % 显示处理后的图像
title('Blurred');                             % 设置图像标题
wnr1 = deconvwnr(blurred,PSF);              % 使用真实PSF进行图像复原
figure,                                     % 新建窗口
imshow(wnr1);                               % 显示处理后的图像
title('Restored, True PSF');                % 设置图像标题
wnr2 = deconvwnr(blurred,fspecial('motion',2*LEN,THETA)); 
% 模糊运动长度取值是真实长度的2倍,2*LEN
figure,                                                 % 新建窗口
imshow(wnr2);                                           % 显示处理后的图像
title('Restored, "Long" PSF');                          % 设置图像标题
wnr3 = deconvwnr(blurred,fspecial('motion',LEN,2*THETA)); 
% 模糊运动角度取值是真实角度的2倍,2*THETA
figure,                                                    % 新建窗口
imshow(wnr3);                                              % 显示处理后的图像
title('Restored, Steep');                                  % 设置图像标题
noise = 0.1*randn(size(I));                       % 生成噪声信号
blurredNoisy = imadd(blurred,im2uint8(noise));    % 加入图像
figure,                                           % 新建窗口
imshow(blurredNoisy);                             % 显示处理后的图像
title('Blurred & Noisy');                         % 设置图像标题
wnr4 = deconvwnr(blurredNoisy,PSF);           % 图像恢复
figure,                                       % 新建窗口
imshow(wnr4);                                 % 显示处理后的图像
title('Inverse Filtering of Noisy Data');     % 设置图像标题
NSR = sum(noise(:).^2)/sum(im2double(I(:)).^2); % 计算信噪比
wnr5 = deconvwnr(blurredNoisy,PSF,NSR);         % 图像恢复
figure,                                         % 新建窗口
imshow(wnr5);                                   % 显示处理后的图像  
title('Restored with NSR');                     % 设置图像标题
wnr6 = deconvwnr(blurredNoisy,PSF,NSR/2);   % 信噪比降低一半,NSR/2
figure,                                     % 新建窗口
imshow(wnr6);                               % 显示处理后的图像
title('Restored with NSR/2');               % 设置图像标题
NP = abs(fftn(noise)).^2;                       % 傅立叶变换            
NPOW = sum(NP(:))/prod(size(noise));            % 噪声功率
NCORR = fftshift(real(ifftn(NP)));              % 噪声自相关函数,居中的
IP = abs(fftn(im2double(I))).^2;                % 傅立叶变换 
IPOW = sum(IP(:))/prod(size(I));                % 原始图像功率
ICORR = fftshift(real(ifftn(IP)));              % 图像自相关函数,居中的
wnr7 = deconvwnr(blurredNoisy,PSF,NCORR,ICORR); % 图像恢复
figure,                                         % 新建窗口
imshow(wnr7);                                   % 显示处理后的图像
title('Restored with ACF');                     % 设置图像标题
ICORR1 = ICORR(:,ceil(size(I,1)/2));               % 一维自相关函数
wnr8 = deconvwnr(blurredNoisy,PSF,NPOW,ICORR1);    % 图像恢复
figure,                                            % 新建窗口
imshow(wnr8);                                      % 显示处理后的图像
title('Restored with NP & 1D-ACF');                % 设置图像标题