各位同学,地震信号的去噪是地震勘探工作中的一个重要的预处理步骤。通过这个工作,可以排除错误信号干扰、提高地震信号的分辨率,为后面正确地解释工作打下良好的基础。
前面课程传统地震去噪算法实战(python代码)选取了各个时期经典的算法给大家进行了实战案例的讲解,包括了FXDECON,MSSA,小波变换和KSVD。但是漏下了一个经典的滤波算法——中值滤波。
01 什么是中值滤波
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。所以,中值滤波方法一经提出后,便在数字信号处理领得到重要的应用。
中值滤波的实现方法是这样的:用一个奇数点的移动窗口,将窗口中心点的值用窗口内各点的中值代替。假设窗口内有5个点,其值为1,2,3,4和5,那么此窗口内各点的中值即为3,也就是用3来代替中心点的像素值。
02 实战案例介绍
我们继续延续以前案例的数据。
今天的测试数据使用64*64的一个仿真地震数据,如图所示。
加上了15%的随机噪声,就变成了图中这模样。
可以看出,噪声对有效信号影响是比较大的,特别在信号边缘,出现了很大的干扰。接下来,我们就来看看怎样使用中值滤波来降噪。
下面给出了中值滤波主程序:
主要就是利用了Python中numpy模块下的median函数,通过计算沿指定轴的中位数来实现中值滤波计算。还有在信号的边缘选择了不处理,这样代码编写相对简单,而且也不影响处理的效果。
处理效果是下图这样的,可以看到有一定的效果。
不过众所周知,中值滤波和其它平滑滤波算法都存在信号边缘清晰度下降的问题,所以可以对算法进行改进。因为一般来说噪声特别是随机噪声,往往都是奇异值,即噪声点的数值与附近的有效信号的相差很大,也就是很大可能是附近邻域内的极值。所以我们可以这样优化算法:通过判断该信号值是否是滤波窗口覆盖下邻域的极大值或极小值,如果是就进行中值滤波;如果不是就不做处理。
按照优化的算法,处理的效果是下图这样的。可以看到分辨率有所提升,不过去噪效果有了一定的下降。
以上就是今天的课程。这节课我们介绍了一种传统的滤波算法——中值滤波,还讲解了一种优化的思路。如果大家对程序感兴趣,可以联系我交流。今天的课程就到这里,再见。
扩展阅读:
网友评论