约束的最小二乘方滤波详细讲解和代码 matlab

约束的最小二乘方滤波

    • 约束的最小二乘方图像复原
    • 公式推导
    • 算法实现步骤
    • matlab 代码实现
    • 实验结果
    • 总结
    • 代码下载
    • 致谢



约束的最小二乘方图像复原

维纳滤波图像复原技术是指除了要求了解关于退化系统的传递函数之外,还需要知道未退化图像的功率谱和噪声的功率谱,实际上比较困难。
本方法仅要求了解图像的噪声方差和均值,用有约束的最小二乘方图像复原技术进行图像的复原。

公式推导

约束的最小二乘方滤波详细讲解和代码 matlab_第1张图片
约束的最小二乘方滤波详细讲解和代码 matlab_第2张图片
约束的最小二乘方滤波详细讲解和代码 matlab_第3张图片
约束的最小二乘方滤波详细讲解和代码 matlab_第4张图片

算法实现步骤

(1)估计噪声的均值与方差
(1)设置迭代次数和精确度因子,设置时应从小到大逐步设定;选定一个初始值给γ,计算
(2)利用式(5.9-3)、(5.9-4)和(5.9-5)计算
(3)不断调整参数γ,使得其满足(5.9-7),如果不满足,返回第一步增大迭代次数,满足则进行下一步。
(4)利用式(5.9-3)计算F(u,v),再求其反傅里叶变换,最终得到复原图像 。

matlab 代码实现

%清理环境
close all;
clear all;
clc;
%图像载入
I = im2double(imread('Fig2.22(a).jpg'));
[h,w,~] = size(I);
figure(1),
subplot(2,2,1),imshow(I),title('原图像');
 
% 模拟运动模糊.
LEN = 25;%位移大小
THETA = 45;%摄像物体逆时针方向以theta角度运动了len个像素
PSF = fspecial('motion', LEN, THETA);%产生运动模糊算子,即点扩展函数
blurred = imfilter(I, PSF, 'conv', 'circular');
subplot(2,2,2), imshow(blurred); title('模糊图像');
H = psf2otf(PSF,[h,w]);%退化函数FFT,点扩散函数到光传递函数
 
% 添加加性噪声
noise_mean = 0;
noise_var = 0.00001;
blurred_noisy = imnoise(blurred, 'gaussian',noise_mean, noise_var);
subplot(2,2,3), imshow(blurred_noisy),title('带运动模糊和噪声图像');
p = [0 -1 0;-1 4 -1;0 -1 0];       %拉普拉斯模板
P = psf2otf(p,[h,w]);   %求取P(u,v)
gama = 0.001;    %参数γ
 
G = fft2(fftshift(blurred_noisy)); %退化图像的傅里叶变换
fenzi = conj(H);                %公式分子部分,conj函数,用于求一个复数的复共轭,得到H*
fenmu = H.^2 + gama*(abs(P).^2);            %公式分母部分
deblurred2 = real(ifftshift(ifft2(fenzi.*G./ fenmu )));%约束最小二乘方滤波在频率域中的表达式
subplot(2,2,4), imshow(deblurred2),title('约束最小二乘方滤波后图像');
 
 
%% 参数γ调整   
gap=1e-6;%调整步长
gama1=1e-6;%初始γ值
a=-0.2;%精确度因子
yita=h*w*(noise_mean^2+noise_var);%公式5.9-13
i=0;%迭代次数统计
while (true)
    i=i+1;
    if i>3000   %如果复原图像不满意,可以逐步设定
        break;
    end
    Fs=(conj(H).*G)./(abs(H).^2+gama1*(abs(P).^2));
    R=G-H.*Fs;
    r=ifftshift (real(ifft2(R)));
    rr=sum(sum(r.^2));%φ(γ)函数,代价函数
    if rr<yita+a
        gama1=gama1+gap;
    elseif rr>yita+a
        gama1=gama1-gap;
    else
        gama1=gama1;
        break
    end
end
f=real(ifftshift(ifft2(Fs))); 
figure(2),
subplot(1,2,1), imshow(blurred_noisy),title('带运动模糊和噪声图像');
subplot(1,2,2), imshow(f),title('约束最小二乘方滤波后图像');
 
 
%% 使用matalb自带的函数进行设计
% j=edgetaper(blurred_noisy ,PSF);
fre=deconvreg(blurred_noisy,PSF,yita,[1e-7 1e7]);%matlab自带函数
figure(3),
subplot(1,2,1), imshow(blurred_noisy),title('带运动模糊和噪声图像');
subplot(1,2,2),imshow(fre),title('matlab约束最小二乘方滤波后图像');

实验结果

约束的最小二乘方滤波详细讲解和代码 matlab_第5张图片

约束的最小二乘方滤波详细讲解和代码 matlab_第6张图片

总结

1.调整参数使约束最小二乘方滤波得到的最优复原图像不一定在视觉上最好,在实际的复原过程中,可以采用交互式的方式确定最佳的复原图像。
2.在噪声和模糊都存在的情况下,该滤波方式较逆滤波和维纳滤波能够得到较好的效果。
3.γ等于0时,表达式(5.9-3)变成了逆滤波。

代码下载

https://download.csdn.net/download/MARSHCW/13104378

致谢

感谢诸君观看,如果感觉有用的话,点个赞吧!



你可能感兴趣的:(图像滤波,图像处理,matlab,算法)