%读图像
psf=fspecial('gaussian',7,10)
%高斯核
sd=0.01%噪声标准差
g=imnoise(imfilter(f,psf),'gaussian',0,sd^2)%图像中加入模糊核噪声
subplot(3,2,1)%三子图第一张
imshow(f),title('(a)')%画原图
subplot(3,2,2)%三子图第二张
imshow(g),title('(b)')%画降质图像
dampar=10*sd%去模糊参数
lim=ceil(size(psf,1)/2)%坐标缩影
weight=zeros(size(g))%去模糊权重初始化
weight(lim+1:end-lim,lim+1:end-lim)=1%去模糊权重赋值
numit=5%迭代次数
f5=deconvlucy(g,psf,numit,dampar,weight)%去模糊
subplot(3,2,3)%三子图第三张
imshow(f5),title('(c)')%画复原图像
PSF=
fspecial('motion',len,ang)
%建立扩散子,其中len是模糊长度,ang是模糊角度
img2=deconvlucy(img,PSF,n)
%用lucy-richardson方法复原图像,其中img是运动模糊图像,PSF是扩散子,n是迭代次数,img2是复原图像
clcclear all%读原始图像%
format long
Blurred=imread('fig525(b).bmp')
subplot(1,2,1)imshow( Blurred)title('原图像')
%自编函数进行维纳滤波%
k=0.0025
[m,n]=size(Blurred)
spectrum=zeros(m,n)
H=zeros(m,n)
for u=1:m
for v=1:n
H(u,v)=exp(-k*((u-m/2)^2+(v-n/2)^2)^(5/6))
spectrum(u,v)=H(u,v)^2
end
end
f=double(Blurred)
F1=fftshift(fft2(f))
HW=H./(spectrum+0.001)
restore1=HW.*F1
restored=real(ifft2(ifftshift(restore1)))
subplot(1,2,2)imshow(restored,[])title('自编函数进行维纳滤波')
%调用matlab提供的维纳滤波函数%
figure
hw1=real(ifft2(ifftshift(H)))%转化到空域上来
result1=deconvwnr(Blurred,hw1,0.001)
result2=ifftshift(result1)%再去图像进行1,3象限对调,2与4象限对调
subplot(1,2,1)imshow(result2,[])title('调用维纳滤波函数')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)