1、问题背景:
前段时间调试一个项目,有发现在低照度场景下图上有很多明显的白点,如下图所示。以以往的调试经验来看这就是坏点,可以通过 ISP 中去坏点模块去将其抹掉,但这么多的明显坏点,通过去坏点模块去处理的话,肯定会损失一定的清晰度,后面试了也确实是这样。所以我们可以再确认下 sensor 端是否有去坏点的功能,以及要确认下这么多坏点是否符合 sensor 对坏点的管控标准。
2、问题分析
a. 关于坏点问题的排查方法
坏点肯定是 sensor 的问题,但首先要先确认清楚这个点是否就是坏点,可以通过抓取相应的raw图来做分析。因为最后输出的结果图上坏点比较明显,所以可以通过结果图上有坏点的位置,找到对应raw图上的位置,查看raw 图上是否有异常。
当坏点比较多,比较大,涉及到多个像素时,那可能会很容易从raw图上直接看到。但对于单个的,差异不是特别大的坏点像素,则是不那么容易被看到了,如果是这种情况,那就可以通过比对像素点与周围像素的亮度差异来判断是否是异常点了。
如下图所示,可以看到红框内的 B,Gb通道是要比周围像素要亮一点的,另外也可以通过相应工具去读取各个颜色通道的亮度值,这样会更加直观。
b. 关于坏点的管控标准
坏点的管控标准分为单个坏点和坏点集群,这个项目上模组厂给到的回复是,坏点单点的管控一般都是按照输出尺寸的0.02% Pixels,比如5M就是1000个,坏点集群标准小于等于3个为良品。只要2个连在一起的像素点就算一个簇(也可以自定义)。
关于坏点判定的定义是通过比对像素点与周围像素点亮度差异,将亮度差异大于规格值的判定为坏点。此项目上用到的是像素差异30%以上,则判定为坏点。如下图所示的是 sensor 部分 pxiel 的亮度显示图,Gr,R,Gb,B 四个颜色通道是一个像素。
图中黄色方框部分的Gr亮度为185,185周围Gr通道的亮度:116-127-128-122-169-123-126-129,9个Gr通道平均亮度为:136.1,(185-136.1)/185 = 26.4%,因此按照30%的浓度差异此点不是坏点。
同理,图中蓝色方框部分的R亮度为160,160周围R通道的亮度:79-77-74-123-77-83-82-75,9个R通道平均亮度为:92.2,(160-92.2)/160 = 42.2%,此点即是坏点。
同理,白色方框R的浓度差异可以算出为31.4%,判定为坏点,因此我们可以判定R通道有相连,这是一个坏点簇。
c. 关于坏点问题的调试方法
知道了坏点的管控标准后,就可以确认此处的坏点是否符合管控了,若满足管控标准,那就排除了生产品质上的问题。后续接着就是软件去调试,先确认sensor端是否有dpc处理的控制,通过查sensor datasheet 及咨询该sensor 厂的fae来了解怎么去修改。
下一步可以通过后端isp中的dpc模块去做处理,但这里调试时要注意,dpc强度开大后肯定会对画面的清晰度有损失,但其实dpc也会有降低噪声的效果。而这样就可以将后面的空域降噪的强度减弱一点,在不增加噪点的情况下将锐化的强度增加一点,看看是否可以恢复一点由于dpc开大导致的清晰度问题。这个具体要看isp pipeline,若dpc模块是在raw域做的,而降噪、锐化的模块在dpc后面去做的,那就很难通过后面模块的调试来恢复清晰度了。
3、问题总结
关于项目调试过程中遇到的坏点问题,一般按如下步骤去进行排查:
a. 先判断遇到的是不是坏点,通过抓取raw图去看,及利用相应raw图工具去做分析。
b. 从模组厂或 sensor 厂了解坏点的管控标准,确认是否满足坏点的管控标准,排查生产品质问题。
c. 通过查 sensor datasheet 及咨询该 sensor 厂的fae来了解该 sensor 是否有 dpc 处理的控制。
d. 通过后端isp中的dpc模块去做处理,但调试时要注意可以通过dpc模块后的降噪及锐化的各个模块去平衡清晰度的效果。