计算机视觉 Camera-如何控制摄像头的输出尺寸(分辨率)
- 摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)
- windowing
- Cropping
- Skip/Subsample
- Scale
- Binning
- 总结
摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)
摄像头 sensor 的技术手册中往往标识了其支持的最大输出尺寸,如下:
在最大尺寸为 2688 x 1944 的情况下,如何获取一个适合自己的输出尺寸,如 1920 x 1080,有多种方法。典型的有:windowing、crop、subsample、skip、binning、scaling 几种。今天我们就来唠唠这几种方法的区别和基本原理。
windowing
Windowing 方法是通过控制 camera sensor 的输出像素窗口来控制最终得到的图像分辨率大小的。
举例:
如下是一个像素矩阵,左下角为坐标(0,0)处。通过控制 sensor 输出窗口的起始坐标,以及输出窗口的长、宽就可以得到想要的分辨率。如起始坐标为(0,0),长、宽分别为 340 x 240,就可以得到一个 340 x 240 分辨率的输出。这种方法的优势是真正工作的 sensor pixel 减少了,曝光时间等参数缩小了,因此可以增加帧率。但是很显然,这种方式减小了 sensor 的视角。
Cropping
Cropping,即裁剪通常发生在 Camera sensor 的下级处理单元中,比如 ISP 或者 Codec。裁剪是指对于一个 1920*1080 的 sensor 输出图像,我们只裁剪其中的一部分。
如下,我们在原图中裁剪出一小部分作为最终的输出:
显然,与 windowing 不同,crop 是在得到图像后,指定一个起始地址和裁剪的长、宽来框定一个裁剪范围。有时在一些图像处理软件中,裁剪的过程称为 ROI,即 Region of interest,其意就是框定一个感兴趣的范围。如果 sensor 支持 crop,那么其实也是在原始数据输出后,从大尺寸上裁剪出来的,因此并不能改善帧率,同时,这种方法缩减了最终图像的视场角。
Skip/Subsample
Skip 和 Subsample 的原理类似,都是在 sensor 完成采集,输出数据(Readout)阶段,按照一定的规则只抽取部分像素点的数据作为输出来实现的。
如下所示,在输出数据时,可以隔列输出,将原本 8 列的数据,舍弃 4 列,仅输出剩余四列的像素对应的数据。
当然也可以行、列都仅输出部分的数据:
这种抽取部分像素的值进行输出方式承认会损失一部分图像细节,但因为像素点排列很紧密,还是能还原原始图像的大部分轮廓和颜色的。这种方式没有影响参与曝光的像素点的个数,仅仅是在 readout 阶段作了取舍。因此 Subsample 后的帧率与原始尺寸的帧率一样,不会加快帧率;此外Subsample 后的图像视角与原始尺寸基本一样,不会缩小图像视角。
Scale
Scaling 即缩放。Scaling 又分为 scale down 即缩小、scale up 放大。可以水平\垂直方向缩放,也可以水平、垂直同比例缩放,本质是相关位置的像素的分解与融合成更少、更多的像素。这种控制图像大小的方式,多出现在图像处理的后端,如 ISP 和 LCD 控制器上。
如下是一个水平缩放的效果示例:
Binning
Binning 发生在像素 readout 阶段,是一种合并读出的处理策略。与 Skip 不同的是,Binning 不是舍弃部分像素值,而是将所有相同颜色(通道)的像素值融合为一个像素值(可以简单认为是均值处理)输出。如下图所示为 2 x 2 binning(即水平、垂直方向均 2 倍融合),4 x 4 的 16 个像素的值,通过融合,变成了一个 2 x 2 的 4 个像素的值。这将数据量减小了 4 倍。
binning 通常可以加快帧率,改善低光照下的图像质量(多个像素感光性能好,信噪比高),并且保留了原始曝光像素的视角。
总结
1)本文讲述了几种控制 Camera 系统的输出图像尺寸-分辨率的方法,包含 windowing、Cropping、Skip、Subsample、Scale、Binning 几种方法。
2)不同的 sensor 、不同的 Camera 系统支持的控制输出尺寸的方法不同。不同的方法对图像的视场角、帧率、图像质量等的影响也不同。大家应该结合具体 sensor 的特性、产品需求使用合适的方法。
(感谢点赞或收藏,关注不迷路)