失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 频率域滤波去除周期性噪声

频率域滤波去除周期性噪声

时间:2023-04-28 07:49:32

相关推荐

频率域滤波去除周期性噪声

傅里叶变换后的频率域去噪

(做些小小更改,让变换结果更加清晰合理)(1月1日17:36:36)

去除周期性波纹噪声最重要在于

1.频率域变换问题关键在于如何准确找到噪声点的位置。这里可以用类似矩阵扫描的方法找出某个点,其满足大于其上下左右各点的值(找到极大值点),同时满足大于某个阈值,我给定的是大于图像均值(中心点亮度)的4/5左右,即可确定准确的坐标位置。进而用巴特沃斯滤波进行处理。

2.确定合适的参数:截止半径r(相对于噪声点中心)。即自定义函数function d = findd0(coor,image)。大概是噪声中心到频谱图中心的距离,阈值:T,截止半径:R(相对于原点)

3.运用合适的滤波,对于不同的噪声用不同的滤波公式会有不同的效果,选择合适的滤波会有更好的效果。

功能函数代码部分:(matlab)

%频率域变换去除周期性噪声function re = dpressnoise(img)t1=myfft(img);%一维横向变换f=myfft(t1.');%纵向变换[m,n]=size(f);%获取傅里叶变换后频谱图的大小[M,N]=size(img);%获取原来图像大小f=myfftshift(f);%使图像对称,中心化% r=real(f);%图像频域实部% i=imag(f);%图像频域虚部Margin=log(sqrt((real(f)).^2+(imag(f)).^2));%图像幅度谱,加log便于显示phase=real(angle(f)*180/pi);%图像相位谱figure(1)subplot(1,3,1),imshow(linear1(img)),title('源图像');%拉伸显示subplot(1,3,2),imshow(Margin,[]),title('图像幅度谱');subplot(1,3,3),imshow(phase,[]),title('图像相位谱');T=5/6*max(max(Margin));%选取频谱图最亮点的5/6作为阈值,可以根据实际情况进行修改R=10;%频谱图中心亮点及其周围亮点是影像图像亮度及信息不是噪声,设置一个截止半径,使得中心数据不被破坏coor=[];%设置一个变量存储检测到的噪声点的坐标信息for i=1:m-2for j=1:n-2if(Margin(i+1,j+1)>T&&sqrt((m/2-i)^2+(j-n/2)^2)>R&&Margin(i+1,j+1)>Margin(i+1,j)&&Margin(i+1,j+1)>Margin(i+1,j+2)&&Margin(i+1,j+1)>Margin(i,j+1)&&Margin(i+1,j+1)>Margin(i+2,j+1))coor=[coor;i+1,j+1];endendendd0=findd0(coor,Margin);%计算每个噪声点对应到中心原点的距离H=createH(d0,coor,Margin);%计算整个频谱图对应的滤波矩阵f=f.*H;%将滤波矩阵与频谱图相乘%逆变换f=myfftshift(f);g=myifft(f);k=myifft(g.');k=k(1:M,1:N);%截取原图像大小的图像,由于傅里叶变换中补零导致会出现黑色补零区域,现在剪裁掉figure(2)imshow(linear2(k)),%拉伸显示原图像title('去噪处理结果')re=k;end

function H=createH(d0,coor,image)%创建H矩阵,coor指给定的噪声点中心坐标,image指频谱图像count=size(coor,1);[m,n]=size(image);d=zeros(m,n,count/2);%申请矩阵H=ones(m,n);D0=zeros(count/2,1);for i=1:mfor j=1:nfor k=1:count/2d(i,j,k)=sqrt((i-coor(k,1))^2+(j-coor(k,2))^2)*sqrt((i-coor(count-k+1,1))^2+(j-coor(count-k+1,2))^2);D0(k,1)=d0(k,1)^2;endfor k=1:count/2if(d(i,j,k)==0)H(i,j)=0;elseH(i,j)=H(i,j)/(1+(D0(k,1)/d(i,j,k))^2);endendendendend

function d = findd0(coor,image)%根据给出的坐标大概确定截止半径,coor指给定的噪声点中心坐标[M,N]=size(image);k=size(coor,1);dis=[];for i=1:k%循环坐标个数x=coor(i,1);%获取x坐标y=coor(i,2);%获取y坐标while(image(x,y+1)<image(x,y))%找出距最近的极小点y=y+1;enddis=[dis;M/2+1-coor(i,1)];%算出距离保存endd=dis;end

运行截图:

原图像

幅度谱图:

相位谱图:

去噪后图像:

参考文献:

论文:图像线状和网格状噪声的去除方法

陶胜

如果觉得《频率域滤波去除周期性噪声》对你有帮助,请点赞、收藏,并留下你的观点哦!

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