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'); % 设置图像标题