我希望在不必处理RAW输出的情况下获得具有最小失真的图像流(无噪声降低等)。
我正在处理两个流(一个使用已弃用的camera
时),一个用于预览,一个用于处理。我理解camera2 api,但我想知道在将传感器输出安装到表面时使用了什么样的上采样/下采样?
更具体地说,我正在处理缩放图像,并根据有关cropping和references的相机2文档:
对于非原始流,将进行任何额外的每个流裁剪,以最大化流的最终像素区域。
整个概念很容易理解,但它也提到:
输出流使用此矩形生成其输出,如有必要,裁剪到较小的区域以保持流的宽高比,然后缩放传感器输入以匹配输出的配置分辨率。
但我还没有找到有关此缩放的任何信息。使用哪种方法(基于过滤器,双三次,边缘定向等)?有没有办法获得这些信息?有没有办法可以实际选择使用哪一个?
关于已弃用的camera
,我猜测缩放比较简单,因为它可能等同于只有一组有限的裁剪区域SCALER_CROPPING_TYPE_CENTER_ONLY
对应于曝光的变焦比。但是图像缩放是否与camera2
中的缩放相同?如果有人可以发光,我会感到高兴。
相机传感器:5312x2988(16:9)
我想要一个4倍变焦所以裁剪区域应该是(1992,1120,1328,747)
(顺便说一下奇数尺寸会发生什么?例如使用SCALER_CROPPING_TYPE_CENTER_ONLY
设备?)
现在我有一个大小(1920,1080)的表面,裁剪区域和流比适合,但必须转换1328x747值以填充1920x1080表面。这种转变的本质就是我想知道的。
答案 0 :(得分:1)
使用的缩放算法取决于设备;通常在功率效率和速度方面,通常在相机图像信号处理器(ISP)流水线末端的硬件模块中进行缩放。
因此,您通常不能依赖它进行任何特定的缩放或过滤。不幸的是,如果你想了解整个处理流程,你必须从RAW开始并自己实现它。
如果您使用的是同一台设备,旧的相机API和新的camera2 API会与相同的硬件抽象层和相同的硬件缩放器进行通信,因此缩放输出通常会完全匹配相同的分辨率。 (除了LEGACY级别的设备,其中camera2可能需要额外的基于GPU的缩放,这将是双线性下采样 - 但你真的不知道何时适用)。