增益把深部放大后,一些横向窄的条纹、绕射尾、振铃尾也跟着被放大,在 B-scan 上冒成一片斜纹或竖条毛刺。横向平滑就是沿测线方向做均值替换,把这些窄东西糊掉,横向连续的层位则保留。

和背景去除的区别

背景去除是「减均值」:删掉横向共有的成分,留下横向局部的点目标。

横向平滑是「替换为均值」:把每道替换成左右几道的平均,抹掉横向局部的窄条纹,留下横向共有的连续层位。

两者保留的东西正好相反:

操作 去掉 保留
背景去除 减均值 横向共有(直达波、水平横条) 横向局部(钢筋双曲线)
横向平滑 替换为均值 横向局部(绕射尾、条纹) 横向共有(连续层位)

单级盒式的问题

最简单的做法是用一个矩形窗做一级滑动平均。但它的频率响应是 sinc 函数,旁瓣大——阻带里的纹波压不干净,条纹会留残影。

两级盒式更干净

做两级串联:第一级用较大窗做主要平滑,第二级用小窗磨掉第一级留下的边缘台阶。两个矩形核卷积后等效成一个梯形核,频响近似 sinc²,旁瓣比单级小得多。

实测对比(window=10):

归一化频率 单级响应 两级响应 两级压到
0.05(通带) 0.577 0.558 97%
0.15 0.177 0.128 72%
0.25 0.091 0.030 33%
0.30 0.091 0.012 13%

通带内两者差不多,不伤层位;阻带内两级把残余压到单级的 1/3~1/8。

梯形核怎么来的

以 window=10 为例:第一级半窗 5(11 点核),第二级半窗 1(3 点核)。算中心点输出时,每个位置被几个第二级抽头「看到」:

  • 中心位置:3 个抽头都看到,权重最大;
  • 边缘位置:只有 1 个抽头看到,权重最小。

把「被看到的次数」画出来就是梯形:1, 2, 3, 3, …, 3, 2, 1。

窗长怎么选

只有一个参数 window:平滑跨度,单位是道数。

  • 斜条纹还在:window 调大;
  • 横向层位被抹糊了:window 调小,或关掉本步;
  • window 的物理含义 ≈ 想抹掉的横向窄目标的宽度,一般 8~20。

副作用

  1. 会抹掉横向窄的真实目标:小孤腔、细裂隙、单根细钢筋都会被糊掉。
  2. 破坏幅值定量:每个值被换成邻域均值,原始振幅信息没了。
  3. 必须放在流水线最后:它破坏幅值,所有需要真实幅值的步骤都要在它之前。

边界处理

图的两端窗会超出范围。我的做法是截断边界,只用地道内真实数据,除以实际参与平均的道数。不补零、不镜像,避免引入假象。