对于模糊图像除了常见的维纳滤波、逆滤波、约束最小二乘方滤波还可以通过最大似然法进行图像复原。(本人这个做的不好)
步骤流程:
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);