对于模糊图像除了常见的维纳滤波、逆滤波、约束最小二乘方滤波还可以通过最大似然法进行图像复原。(本人这个做的不好)
步骤流程:
1.读入图像
2.从8 位型转为双精度,以便后面的运算
3.创建离散点扩散函数h
4.原图像f与点扩散函数h卷积,得散焦模糊图像
5.按2D最大似然法公式,在空域中,通过卷积做图像复原
操作演示
左侧的图框为原图和,后续的添加噪声图和图像退化图也在这,右侧图框为图像复原图
选择图像按钮:
global img1; [filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.gif'},'choose image pathway'); str = [pathname filename]; if (filename~=0) img1=imread(str); axes(handles.axes1) imshow(img1) else %empty file clear; end
添加噪声+图像退化
%% 添加噪声 global img1; global noise_img; noise_img = imnoise(img1, 'gaussian', 0, 0.01 ); axes(handles.axes1) imshow(noise_img) %% 图像退化 global img3; global noise_img; PSF = fspecial('motion', 10, 60); img3= imfilter( noise_img, PSF, 'circular' ); axes(handles.axes1) imshow(img3)
图像复原
global img3; f=im2double(img3); % 从8 位型转为双精度,以便后面的运算 R=5; h=fspecial('disk',R); % 创建离散点扩散函数h % h=fspecial('gaussian',5,1); % 创建离散点扩散函数h g=imfilter (f, h, 'conv', 'replicate' ); % 原图像f与点扩散函数h卷积,得散焦模糊图像g。加边界处理,所以无黑边 % 按2D最大似然法公式,在空域中,通过卷积做图像复原: fi=g; for i=1:200 a=imfilter (fi, h, 'conv', 'replicate' ); % 公式中分母的卷积。 b=g./a; % a,g大小应相同,才能作点除。 c=imfilter (b, h, 'conv', 'replicate' ); % 公式中的相关。 fi=fi.*c; % 最大似然法公式。点乘时,f,c应大小相同。 end axes(handles.axes3) imshow(fi);