ISP Pipeline(4): Anti Aliasing Noise Filter 抗锯齿与降噪滤波器

上一篇文章讲的是:ISP Pipeline(3):Lens Shading Correction 镜头阴影校正-CSDN博客

视频:(5) Anti Aliasing Noise Filter | Image Signal Processing Pipeline Tutorial Series

源码:ISP Pipeline(3):Lens Shading Correction 镜头阴影校正-CSDN博客

Anti-Aliasing Noise Filter 是在图像进入后续 ISP 流程之前,对 Bayer 原始图像进行空间域平滑处理,目的是消除图像中高频噪声和虚假信号,同时尽量保留边缘信息。

1. Aliasing 锯齿产生的原因

  • 原始图像分辨率有限,高频内容(如细线、格栅等)在采样时失真;

  • 在 Bayer 模式下,高频伪影更严重,会影响 demosaic;

  • 解决方式:在采样或处理前做低通滤波(Anti-Aliasing Filter,AA Filter)。

2. Noise 噪声的来源

  • 主要来自于传感器(热噪声、电路噪声)、环境光弱时的随机波动;

  • 原始 Bayer 图中的噪声不仅影响清晰度,还会引入伪彩。

 

滤波器实现方式(常见)

 1. Gaussian Blur / Bilateral Filter

  • 对图像做模糊处理,降低高频分量;

  • Gaussian 是均值滤波的加权版;

  • Bilateral(双边滤波)可以同时平滑图像又保留边缘。

 2. Edge-Preserving Filter

  • 用于保持边缘而去除背景噪声;

  • 比如 Guided Filter、Non-Local Means、Kuwahara Filter

  • 适用于对图像细节要求高的高端 ISP。

 3. Median Filter(中值滤波)

  • 抵抗椒盐噪声、单点突变等;

  • 对于 dead pixel 或突发点状噪声较好。

 代码实现:


def AAF(lsc_img, k):
  """
  inputs:
    lsc_img = bayer domain image after lens shading correcting
    k = anti-aliasing correction factor to control strenght of anti-aliasing

  outputs:
    aaf_img = bayer domain image after applying anti-aliasing
  """

  padded_img = np.pad(lsc_img, (2,2), 'reflect') # pad the image to give corner pixels full set of neighbors

  p1 = padded_img[:-4:1, :-4:1] # create 9 different arrays for p0:p8
  p2 = padded_img[:-4:1, 2:-2:1]
  p3 = padded_img[:-4:1, 4::1]
  p4 = padded_img[2:-2:1, :-4:1]
  p0 = padded_img[2:-2:1, 2:-2:1] * (k**0.5)
  p5 = padded_img[2:-2:1, 4::1]
  p6 = padded_img[4::1, :-4:1]
  p7 = padded_img[4::1, 2:-2:1]
  p8 = padded_img[4::1, 4::1]

  neighbors = np.array([p1, p2, p3, p4, p0, p5, p6, p7, p8]) / ((k + 8)**0.5)
  aaf_img = (np.sum(neighbors, axis = 0)).astype(np.uint16) # apply the filter

  return aaf_img

自定义 Anti-Aliasing Filter(抗锯齿滤波器),对中心像素及其周围 8 个邻居加权平均,达到 降噪和平滑高频伪影 的目的。

提取邻域:

p1 p2 p3
p4 p0 p5
p6 p7 p8

其中中心像素是:

p0 = padded_img[2:-2, 2:-2] * (k**0.5)

其余 8 个邻居不乘 k 权重,而是在后续归一化除以 sqrt(k + 8)

权重逻辑:

aaf\_img = \frac{\sqrt{k}\cdot p0+p1+p2+...+p8}{\sqrt{k+8}}

其中 k 越大,越强调中心像素,越接近原图(平滑度下降);
k 越小,越平均,图像越模糊。 

你可能感兴趣的:(接口隔离原则)