失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MATLAB图像处理——图像中余弦噪声去除(附代码)

MATLAB图像处理——图像中余弦噪声去除(附代码)

时间:2021-10-29 20:18:03

相关推荐

MATLAB图像处理——图像中余弦噪声去除(附代码)

图像中规则余弦噪声去除

问题描述傅里叶变化带阻滤波器滤波结果改进代码

问题描述

有以下增加噪声后的图像:

从图上可以明显看出在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图像处理——图像中余弦噪声去除(附代码)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。