www.gusucode.com > 《matlab图像处理与界面编程宝典》秦襄培 编著,每章的MATLAB源代码程序 > 第19章/代码19-6.txt
I = imread('sample4.jpg'); % 读入图像 I=rgb2gray(I); % 图像灰度转换 figure; % 新建窗口 imshow(I); % 显示原始图像 title('Original Image'); % 设置图像标题 PSF = fspecial('gaussian',7,10); % 设置滤波器 Blurred = imfilter(I,PSF,'symmetric','conv'); % 图像卷积计算 figure; % 新建窗口 imshow(Blurred); % 显示处理后的图像 title('Blurred Image'); % 设置图像标题 UNDERPSF = ones(size(PSF)-4); % 欠尺寸PSF [J1 P1] = deconvblind(Blurred,UNDERPSF); % 图像复原 figure; % 新建窗口 imshow(J1); % 显示处理后的图像 title('Deblurring with Undersized PSF'); % 设置图像标题 OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both'); % 过尺寸PSF [J2 P2] = deconvblind(Blurred,OVERPSF); % 图像复原 figure; % 新建窗口 imshow(J2); % 显示处理后的图像 title('Deblurring with Oversized PSF'); % 设置图像标题 INITPSF = padarray(UNDERPSF,[2 2],'replicate','both'); % 全尺寸PSF [J3 P3] = deconvblind(Blurred,INITPSF); % 图像复原 figure; % 新建窗口 imshow(J3); % 显示处理后的图像 title('Deblurring with INITPSF'); % 设置图像标题 figure; % 新建窗口 subplot(221); % 子图定位 imshow(PSF,[],'InitialMagnification','fit'); % 显示真实PSF title('True PSF'); % 图像标题显示 subplot(222); % 子图定位 imshow(P1,[],'InitialMagnification','fit'); % 显示欠尺寸PSF title('Reconstructed Undersized PSF'); % 图像标题显示 subplot(223); % 子图定位 imshow(P2,[],'InitialMagnification','fit'); % 显示过尺寸PSF title('Reconstructed Oversized PSF'); % 图像标题显示 subplot(224); % 子图定位 imshow(P3,[],'InitialMagnification','fit'); % 显示重构PSF title('Reconstructed true PSF'); % 图像标题显示 WEIGHT = edge(I,'sobel',0.07); % 图像边缘显示 se = strel('disk',2); WEIGHT = 1-double(imdilate(WEIGHT,se)); WEIGHT([1:3 end-[0:2]],:) = 0; WEIGHT(:,[1:3 end-[0:2]]) = 0; figure;imshow(WEIGHT);title('Weight array'); [J P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT); % 图像复原 figure; % 新建窗口 imshow(J); % 显示处理后的图像 title('Deblurred Image'); % 设置图像标题 P1 = 2; P2 = 2; FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]); [JF PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN); % 图像复原 figure; % 新建窗口 imshow(JF); % 显示处理后的图像 title('Deblurred Image'); % 去模糊图像