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

    
I = imread('board.tif');             % 读入图像
I = I(50+[1:256],2+[1:256],:);       % 图像剪切
figure;                              % 新建窗口
imshow(I);                           % 显示原始图像
title('Original Image');             % 显示图像标题
text(size(I,2),size(I,1)+15, ...     % 标注文字
    'Image courtesy of courtesy of Alexander V. Panasyuk, Ph.D.', ...
    'FontSize',7,'HorizontalAlignment','right');
text(size(I,2),size(I,1)+25, ...     % 标注文字
    'Harvard-Smithsonian Center for Astrophysics', ...
    'FontSize',7,'HorizontalAlignment','right');
PSF = fspecial('gaussian',5,5);                      % 设置滤波器
Blurred = imfilter(I,PSF,'symmetric','conv');        % 图像卷积计算
figure;                                              % 新建窗口
imshow(Blurred);                                     % 显示处理后的图像
title('Blurred');                                    % 显示图像标题
V = .002;                                               % 设定方差
BlurredNoisy = imnoise(Blurred,'gaussian',0,V);         % 添加噪声
figure;                                                 % 新建窗口
imshow(BlurredNoisy);                                   % 显示处理后的图像
title('Blurred & Noisy');                               % 显示图像标题
luc1 = deconvlucy(BlurredNoisy,PSF,5);  % 反复处理5次
figure;                                 % 新建窗口
imshow(luc1);                           % 显示处理后的图像
title('Restored Image, NUMIT = 5');      % 设置图像标题
luc1_cell = deconvlucy({BlurredNoisy},PSF,5);             % 细胞数组
luc2_cell = deconvlucy(luc1_cell,PSF);                    % 细胞数组
luc2 = im2uint8(luc2_cell{2});                            % 数据类型转换
figure;                                                   % 新建窗口
imshow(luc2);                                             % 显示处理后的图像
title('Restored Image, NUMIT = 15');                      % 设置图像标题
DAMPAR = im2uint8(3*sqrt(V));                       % 数据类型转换
luc3 = deconvlucy(BlurredNoisy,PSF,15,DAMPAR);      % 反复处理15次
figure;                                             % 新建窗口
imshow(luc3);                                       % 显示处理后的图像
title('Restored Image with Damping, NUMIT = 15');   % 设置图像标题
I = zeros(32);               % 生成全零矩阵,反色后为图像中的白色
I(5,5)=1;                    % 设置矩阵元素值为1,反色后为图像中的黑色
I(10,3)=1;                   % 设置矩阵元素值为1,反色后为图像中的黑色
I(27,26)=1;                  % 设置矩阵元素值为1,反色后为图像中的黑色
I(29,25)=1;                  % 设置矩阵元素值为1,反色后为图像中的黑色
figure;                      % 新建窗口
imshow(1-I,[],'InitialMagnification','fit');               % 图像反色
set(gca,'Visible','on','XTickLabel',[],'YTickLabel',[],... % 设置图形窗口属性
'XTick',[7 24],'XGrid','on','YTick',[5 28],'YGrid','on');
title('Data');                                             % 设置图像标题
PSF = fspecial('gaussian',15,3);              % 设置滤波器
Blurred = imfilter(I,PSF,'conv','sym');       % 图像卷积计算
WT = zeros(32);                               % 权重数组
WT(6:27,8:23) = 1;                            % 权重数组
CutImage = Blurred.*WT;                       % 加上权重数组进行掩膜处理  
CutEdged = edgetaper(CutImage,PSF);                       % 边缘锐化
figure;                                                   % 新建窗口 
imshow(1-CutEdged,[],'InitialMagnification','fit');       % 显示处理后的图像
set(gca,'Visible','on','XTickLabel',[],'YTickLabel',[],...% 设置图形窗口属性
'XTick',[7 24],'XGrid','on','YTick',[5 28],'YGrid','on');  
title('Observed');                                        % 设置图像标题
luc4 = deconvlucy(CutEdged,PSF,300,0,WT);                      % 图像复原
figure;                                                        % 新建窗口
imshow(1-luc4,[],'InitialMagnification','fit');                % 显示处理后的图像
set(gca,'Visible','on','XTickLabel',[],'YTickLabel',[],...     % 设置图形窗口属性
'XTick',[7 24],'XGrid','on','YTick',[5 28],'YGrid','on');
title('Restored');                                             % 设置图像标题
Binned = squeeze(sum(reshape(Blurred,[2 16 2 16])));           % 移去单独维
BinnedImage = squeeze(sum(Binned,2));                          % 移去单独维
Binned = squeeze(sum(reshape(PSF(1:14,1:14),[2 7 2 7])));      % 移去单独维  
BinnedPSF = squeeze(sum(Binned,2));                            % 合成PSF 
figure;                                                        % 新建图形窗口
imshow(1-BinnedImage,[],'InitialMagnification','fit');         % 显处理后的示图像
set(gca,'Visible','on','XTick',[],'YTick',[]);                 % 设置图形窗口属性
title('Binned Observed');                                      % 设置图像标题
luc5 = deconvlucy(BinnedImage,BinnedPSF,100);       % 复原图像
figure;                                             % 新建图形窗口
imshow(1-luc5,[],'InitialMagnification','fit');     % 显处理后的示图像
set(gca,'Visible','on','XTick',[],'YTick',[]);      % 设置图形窗口属性
title('Poor PSF');                                  % 设置图像标题