图像中规则余弦噪声去除
问题描述傅里叶变化带阻滤波器滤波结果改进代码问题描述
有以下增加噪声后的图像:
从图上可以明显看出在x方向上叠加了一正弦规律变化的噪声,要对其进行去噪处理,比较简单的做法的映射到频域,观察噪声出现的位置,在频域进行滤波,最后再进行反傅里叶变化。
傅里叶变化
对原图进行傅里叶变换得到:
从上面的图中不太能看的出来,将其映射到x方向上,得到一维的分布得到:
可以看出存在三个尖峰,最中间的尖峰是有用信息,使我们需要保留的,旁边的两个尖峰都是噪声形成的,所以可以使用带阻滤波器将两个尖峰噪声进行滤除。
带阻滤波器
构造的两个带阻滤波器如下图所示,分别过滤掉峰值为120和138处的噪声。
使用带阻滤波器与傅里叶频谱图的投影相乘,其中带阻滤波器值的范围是0~1,越黑代表越接近0,越亮代表越接近1。
滤波
使用上述滤波器对傅里叶变换得到频谱进行滤波,并在x方向上进行可视化得到:
可以看出峰值为120和138处的噪声都已被过滤掉。
结果
将其再进行傅里叶反变换得到:
可以看出,经过傅里叶反变换之后得到的图像,有一些图片的失真,其原因可能是将图像的频谱图从二维降维成一维的操作,在一些没有噪声的地方,也进行了滤波操作,所以会有一定的信息损失。如果在全局信息上,也就是在二维信息上进行去噪应该能够得到更好的效果。
改进
对图中方框区域进行精细化滤波应该会得到更好的效果。
代码
close allf=imread('grid.bmp');[M,N,~] = size(f); %f为含噪图像F = fftshift(fft2(f)); % 图像频域figure;plot(abs(F(M/2+1,:))); % x方向横截线% 构造n阶巴特沃兹陷波器,可以修改D0和n获得更好的效果。u = 0:(M-1);v = 0:(N-1);[V,U] = meshgrid(v,u);D0 = 7;n = 1;v0 = 120;v1 = 138;D1 = abs(V-v0);D2 = abs(V-v1);H = 1./(1+(D0^2./(D1.*D2)).^n);figure;imshow(H,[])% 滤波G = fftshift(F.*H);figure;plot(abs(F.*H(M/2+1,:))); % x方向横截线g = real(ifft2(G));figure;subplot(121); imshow(f,[]);subplot(122),imshow(g,[]);
如果觉得《MATLAB图像处理——图像中余弦噪声去除(附代码)》对你有帮助,请点赞、收藏,并留下你的观点哦!