Android camera2:采用什么样的上采样/下采样来适应我的流?

时间:2016-10-05 07:40:39

标签: android image camera

我希望在不必处理RAW输出的情况下获得具有最小失真的图像流(无噪声降低等)。 我正在处理两个流(一个使用已弃用的camera时),一个用于预览,一个用于处理。我理解camera2 api,但我想知道在将传感器输出安装到表面时使用了什么样的上采样/下采样?

更具体地说,我正在处理缩放图像,并根据有关croppingreferences的相机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表面。这种转变的本质就是我想知道的。

1 个答案:

答案 0 :(得分:1)

使用的缩放算法取决于设备;通常在功率效率和速度方面,通常在相机图像信号处理器(ISP)流水线末端的硬件模块中进行缩放。

因此,您通常不能依赖它进行任何特定的缩放或过滤。不幸的是,如果你想了解整个处理流程,你必须从RAW开始并自己实现它。

如果您使用的是同一台设备,旧的相机API和新的camera2 API会与相同的硬件抽象层和相同的硬件缩放器进行通信,因此缩放输出通常会完全匹配相同的分辨率。 (除了LEGACY级别的设备,其中camera2可能需要额外的基于GPU的缩放,这将是双线性下采样 - 但你真的不知道何时适用)。