#灵感# raw图质量是camera tuning 的第一步,当排查一些图像质量问题时,总要抓raw 分析一下。罗列一些遇到的问题和解决方案。
目录
1、A 光下的raw 颜色惨淡,
2、raw图某个角亮度异常,
3、raw 图发紫:
4、raw图有几行或几列异常条
5、HDR的长帧raw和短帧raw亮度一样
6、raw的像素值读出来和设置不一样
7、raw ok 但画面显示的方向不对,尺寸不对
产品输出的YUV 饱和度低,增加ISP 饱和度设置却改善有限。抓raw 发现raw的颜色就很淡,但更换个光源,发现D65 光下颜色正常。
解决:发现没有安装红外滤光片,A 光的红外光影响了A下的raw。(D65 的红外没有这么多)
正常用于白天的camera设备,都需要安装滤光片,滤除650nm 以上的红外光。
校准lsc时,发现左上角的像素亮度明显大于其它角。且每个光源下都有此问题。
查raw 发现,左上角的像素异常
把raw拉入compare 看raw的像素数据,发现所有的raw左上角这几个像素值都被固定写死为同一个数值,猜测可能是sensor的一些配置值或者ISP设置的标记值。
解决:修改起始点,移掉这一行。
输出的YUV 全屏紫色,bypass ISP 模块,无实质性改善。抓raw 发现raw很紫,24色卡的颜色也不对。
解决:sensor的 first pixel 设置导致读取的bayer pattern不合适,需要移位一下,换个其它bayer pattern顺序。
raw 常用的四种顺序: GRBG、RGGB、BGGR、GBRG。ISP 常用RGGB。
需要修改sensor 的window location的起始位置。
可以看到下图右侧几列异常像素条中没有有效信息,test更换环境,此异常并不随环境改变。
解决:将sensor 的输出设置修改为”多出8行8列“。
原因:可能使用的ISP 有设置x,y的起始位置,如果ISP分辨率是1920*1080,sensor的输出也只设置为1920 * 1080, 则ISP的起始位不为(0,0)时会导致最终的有效分辨率不够, 不够的地方就表现为异常的空白像素条。
问题:camera的动态视频,能看到画面中黑白交接的地方出现闪烁,抓图发现是图像移位情况。
初步排查发现长帧的raw和短帧的raw 亮度一样,看tuning 工具,显示的sensor长短帧曝光行有十几倍的差距。
解决:改了硬件的一个寄存器的值。发现之前的短帧被长帧替换掉了,之前输出的两帧都是长帧。改之后长短帧亮度有明显差异,画面闪烁也随之消失。
但当前项目画面中高亮选短帧,暗处选长针。导致画面的信噪比比较差。
错位的抖动可能和帧率、带宽有关系。
raw 理论上 12bit = 0xfff 。但 实际的max luminance = 0xffc,
分析 raw其实是10bit, 因为不足12bit ,在低2位补00成12bit,就是0xffc。
raw输出12/10-bit , 表示输出的一个像素点有12bit、10bit数据.
解决:
将原来的localBufTmp[i] = localBuf[i] >> 2;改为localBufTmp[i] = ((localBuf[i] >> 2) & 0x03FF);
右移两位,去掉低位补的00。把高位多余的数据屏蔽掉,变成10bit 对应的 1111 1111 11=0x3ff.
另外,如果图像出现圈圈儿:是因为看图工具设置的raw bit 和实际raw的bit 不匹配,所以出现断层。
使用常规横屏,画面却变成了竖屏? 且明显有个角畸变严重。抓取的raw 是正常的。
解决:video 的输出配置有问题。重新设置layer out 尺寸。