前言
最近因为课程原因接触了仿真软件MATLAB,略微了解了一下MATLAB,不得不感慨MATLAB的功能强大。自己写了一点简单的图像滤波。和大家分享一下。
设计问题。
- 对图像进行加噪处理(椒盐噪声)。
- 利用巴特沃斯滤波器对加噪图像进行滤波处理。
处理的一些思路:
实在是不得不感慨MATLAB的强大。实验很简单。基本就是依靠的仿真软件。
对图像进行加噪处理直接调用了现成的函数。
对图像的滤波处理。将图片的数据进行傅里叶变换。然后对变换后的数据进行滤波处理。在反傅里叶变换就好。
值得注意的是要注意使用图片的位深度等问题。位深度的不同我们需要的矩阵大小也会有所区别。否则变换的图片会出现大小问题。
实验代码:
clc;
clear all;
I=imread('F:\linux-pic\shixiang.jpg');
subplot(3,2,1);imshow(I);title('原图');
img_noise=imnoise(I,'salt'); % 加椒盐噪声
f=double(I);
g=fft2(f);
g=fftshift(g); % 傅里叶频谱
subplot(3,2,2);
imshow(img_noise);
title('加噪信号');
f1=double(img_noise); %加噪傅里叶频谱
g1=fftshift(fft2(f1));
[M,N,~]=size(g1);
nn=2;
d0=50;
m=floor(M/2);n=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));
result(i,j)=h*g(i,j);
end
end
subplot(3,2,3);imshow(log(1+abs(result)));
title('巴特沃斯低通');
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
subplot(3,2,4);imshow(J3);
title('低通滤波图');
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d0/d)^(2*nn));
result(i,j)=h*g(i,j);
end
end
%subplot(3,2,5);
%imshow(result);
%title('巴特沃斯高通');
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
subplot(3,2,5);imshow(J3);
title('高通滤波图');
版权声明:本文为sy1227081317原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。