关于Sensor和ISP,对输出图像做Crop和Downscale的注意事项
01
背景
客户要求调试ov的一款分辨率为4608x2592的Sensor,但目前我司的Soc最大支持分辨率是4096x3456,所以目前能出的最大分辨率为4096x2592(11M) 。
客户要求ISP要出两路视频流 (11M+1080P) ,且不能有视场角(fov)的损失,
1080P是作为显示的流,11M是用于拍照,所以基于这个需求,总结分析一下Sensor和ISP做crop,downscale的注意事项。
02
需求分析
-
这款Sensor支持不同尺寸分辨率的输出4608x2592、3840x2160、2304x1296、1920x1080,但这些尺寸的fov是否都一样呢?
-
4096x2592不是标准的16:9的分辨率(目前的显示屏、电视屏基本都是16:9),ISP作downscaler成1080P (为不损失fov), 因为像素长宽比不同,图像肯定会有压扁;
-
Sensor出不同尺寸的分辨率对图像效果是否会有影响?有哪些影响 ?
-
ISP或者后端的编码对图像作crop\downscale是否对图像效果有影响 ?有哪些影响 ?
03
分析结论
-
不一定都一样,这要看sensor裁剪像素的方式,是直接crop还是binning,通过binning和skipping的方式减少像素是不会损失fov的,
binning是将相邻像元(相同颜色)感应的电荷加在一起,以一个像素的模式读出(也就4个像素变为了1个),
所以上述尺寸中,3840x2160和1920x1080、4608x2592和2304x1296的fov是一样的,因为其像素数存在4:1的关系
-
4096x2592的分辨率压缩成1920x1080的分辨率,因为像素长宽比不一样,所以图像肯定会有压扁,
所以senosr只能出4k(3840x2160)的分辨率,能正常压缩到1080P(因为长宽比都是16:9),
且4K和1080P fov是一致的,但4K是要比sensor 全尺寸的分辨率(4096x2592)的fov是要小的;
-
Sensor出不同的分辨率对图像效果肯定是有影响的,最直接的曝光时间肯定会不同,后端ISP的处理也会导致有差异,
比如自动曝光、自动白平衡,这些都是需要通过统计全局的像素点来计算得到合适的一个值,
所以sensor出的每组分辨率都要对应单独的一套效果参数;
-
后端ISP或者编码做crop时对图像不会存在影响,因为isp是对raw图像的处理,sensor输入的raw是不变的,
但ISP或者编码做downscale时,清晰度方面肯定会较之前要差一些;
04
总结
和客户沟通后,目前的做法是,Sensor直接出8M的分辨率,ISP输出8M+1080P两路视频流(1080P是8M经过ISP downscale得到),
还存在另一个拍照的应用,Sensor直接出11M的流,从中截取1fps用于拍照;
此时之前的两路流是关闭掉了,这样就满足了客户必须要11M的问题,以及两路视频流不存在fov的差异。
所以拿到一款sensor的调试任务后不是直接调试效果,而是要搞清楚项目的需求,存在的问题,因为客户对有些方面也是不了解的
(客户就觉得sensor出的分辨率都binning得到的,不存在fov的差异)需要你来提醒它,避免做无用功。
推荐阅读:
这可能是介绍Android UvcCamera最详细的文章了
深圳上班,
生活简简单单,
14年开始从事Android Camera相关软件开发工作,
做过车载、手机、执法记录仪......
公众号记录生活和工作的点滴,
点击关注“小驰笔记”,期待和你相遇~