3. 坏点分类:静态坏点、动态坏点、Cluster坏点与Hot Pixel
坏点这东西,说白了就是传感器上的「瑕疵像素」。我做了这么多年ISP,见过各种各样的坏点,有的好修,有的特别棘手。今天咱们就把它们分门别类,讲清楚。
为什么要分类?因为不同类型的坏点,检测和修复策略完全不同。你想想看,一个固定不动的死点和一颗随机闪烁的热噪点,处理逻辑能一样吗?
3.1 静态坏点(Static Defect)
静态坏点,也叫死点。它的特点是——永远固定在一个值上,不随光照变化。
- 全黑场景:它不黑,要么很亮(亮点),要么很暗(暗点)
- 正常场景:它不跟随周围像素变化,突兀地杵在那儿
- 成因:制造缺陷、物理损伤、长期老化
关键指标:静态坏点的响应值通常偏离正常值超过 80% 以上,且多帧之间几乎不变。
我在项目中遇到过一批模组,出厂时全检没问题,用了三个月后陆续出现静态坏点。后来发现是封装应力导致的微裂纹。嗯,这种问题很难在产线端完全拦截。
3.2 动态坏点(Dynamic Defect)
动态坏点就「调皮」多了。它有时候正常,有时候不正常。你拍十张照片,可能只有两三张能看到它。
| 特性 | 静态坏点 | 动态坏点 |
|---|---|---|
| 帧间稳定性 | 几乎不变 | 随机变化 |
| 检测难度 | 低(单帧即可) | 高(需多帧统计) |
| 典型表现 | 固定亮点/暗点 | 闪烁、忽明忽暗 |
| 修复策略 | 直接替换 | 需结合时域滤波 |
动态坏点的检测,我个人习惯用多帧中值法。连续拍 N 帧,对每个像素取中值,如果某帧偏离中值超过阈值,就标记为动态坏点。
小技巧:动态坏点检测的帧数建议取 5-7 帧。太少不够稳定,太多会引入运动模糊干扰。
3.3 Cluster坏点(坏点簇)
Cluster坏点,就是坏点扎堆出现。这不是单个像素的问题,而是一小片区域都坏了。
为什么会这样?我遇到过几种情况:
- 灰尘颗粒:落在传感器表面,遮挡一片区域
- 划伤:微透镜阵列被划伤,影响多个像素
- Bayer阵列缺陷:CFA(彩色滤光片阵列)局部脱落或错位
- 电路短路:相邻像素的读出电路互相干扰
注意:Cluster坏点不能用简单的邻域插值修复。因为周围像素本身也是坏的,插值出来的值还是错的。必须用更大范围的参考像素,或者结合另一通道的信息。
我曾经处理过一个案子,手机摄像头拍出来的照片左上角总有一块紫色斑块。排查了三天,最后发现是镜头模组组装时掉进去的一粒金属屑,在传感器表面造成了约 15x15 像素的Cluster坏点。这种物理损伤,算法只能尽量掩盖,无法根治。
3.4 Hot Pixel(热像素)
Hot Pixel,热像素,这个名字很形象——它跟温度直接相关。
传感器工作时会发热,温度升高后,某些像素的暗电流会异常增大,导致输出值偏高。温度降下来,它又恢复正常了。
Hot Pixel 的几个特征:
- 温度敏感:曝光时间越长、环境温度越高,越明显
- 可逆性:冷却后恢复正常,不是永久损坏
- 分布规律:通常集中在传感器边缘(散热较差的位置)
- 亮度相关:暗场下最明显,亮场下被信号淹没
实测数据:在 60°C 环境下,Hot Pixel 数量可能是 25°C 时的 5-10 倍。所以手机拍夜景发烫时,噪点突然变多,不全是算法问题,Hot Pixel 贡献很大。
处理 Hot Pixel,我建议用暗场校准法。在完全遮光条件下拍一张暗帧,记录每个像素的暗电流值,然后在正常拍摄时减去这个底噪。但要注意,暗帧需要定期更新,因为传感器老化后暗电流会变化。
3.5 四种坏点的关系与对比
为了让你看得更清楚,我画了一张结构图,把这四种坏点的关系梳理了一下:
3.6 实际项目中的处理优先级
在实际项目中,我不会对所有坏点一视同仁。处理优先级是这样的:
- Cluster坏点 > 静态坏点 > 动态坏点 > Hot Pixel
- Cluster坏点影响面积大,视觉上最明显,必须优先处理
- 静态坏点虽然单个影响小,但数量多了也难看
- 动态坏点和Hot Pixel,很多时候靠多帧降噪就能掩盖
我的经验:在产线端,我会把静态坏点和Cluster坏点作为硬性指标,超过阈值直接判退。动态坏点和Hot Pixel则作为软性指标,允许一定数量,靠算法后处理修复。