计算巴特沃斯去噪为何一直有错
i=imread('kids.tif');
%--------------------------------------------------------------------------
%为源图像加上高斯噪声
ii=imnoise(i,'gaussian',0,0.01);
imwrite(ii,'kids,tif','tiff');
i1=im2double(i);
ii1=im2double(ii);
%--------------------------------------------------------------------------
%计算去噪前的PSNR值
=size(i);
err=0;
sum=0;
for i=1:m,
for j=1:n,
err=err+(i1(i,j)-ii1(i,j))*(i1(i,j)-ii1(i,j));
sum=sum+i1(i,j)*i1(i,j);
end
end
psnr=err/sum;
psnr_before_noisedelete=-10*log10(psnr)
PSNR1=num2str(psnr_before_noisedelete);
I=double(i)/255; % 数值转换
fftI=fft2(I); % 二维离散傅立叶变换
sfftI=fftshift(fftI); % 直流分量移到频谱中心
i_real=real(sfftI); % 取傅立叶变换的实部
i_imag=imag(sfftI); % 取傅立叶变换的虚部
A=sqrt(i_real.^2+i_imag.^2); % 计算频谱幅值
AA=uint8(A); % 数值转换
II=double(ii)/255; % 将位型图转换为浮点型
fftII=fft2(II); % 二维离散傅立叶变换
sfftII=fftshift(fftII); % 直流分量移到频谱中心
ii_real=real(sfftII); % 取傅立叶变换的实部
ii_imag=(sfftII); % 取傅立叶变换的虚部
B=sqrt(ii_real.^2+ii_imag.^2); % 计算频谱幅值
BB=uint8(B); % 转换为位型,以供显示
=size(sfftII); % 巴特沃斯低通滤波器的设计
D0=10; % 截断频率D0的选取
n=2; % 巴特沃斯低通滤波器的阶数(1阶)
for j=1:p
for k=1:q
D(j,k)=sqrt((j-128).^2+(k-128).^2);
end
end
H=1./(1+(D/D0).^(2*n)); % 转移函数H的计算
H=complex(H,0);
III=sfftII.*H;
BBB=ifftshift(III); % 直流分量从频谱中心移到原始位置
BBBB=ifft2(BBB); % 二维离散傅立叶反变换
BBBBB=uint8(BBBB*255); % 数值复原
imwrite(BBBBB,'kids.tif','tiff');
=size(i1);
err=0;
sum=0;
for i=1:m,
for j=1:n,
err=err+(i1(i,j)-BBBBB(i,j))*(i1(i,j)-BBBBB(i,j));
sum=sum+i1(i,j)*i1(i,j);
end
end
psnr=err/sum;
psnr_before_noisedelete=-10*log10(psnr)
PSNR2=num2str(psnr_before_noisedelete);
clf;
subplot(2,2,1),imshow(i);title('原始图像');
subplot(2,2,2),imshow(ii);title('加入高斯噪声后图像');xlabel(['PSNR=',PSNR1]);
subplot(2,2,3),imshow(BBBBB);title('巴特沃斯');xlabel(['PSNR=',PSNR2]);
错误提示:Complex integer arithmetic is not supported.
Error in ==> butterworth at 64
err=err+(i1(i,j)-BBBBB(i,j))*(i1(i,j)-BBBBB(i,j));
它说不支持复杂的整数运算,求大侠们帮忙看看。。感谢万分!
页:
[1]