【问题标题】:Android camera2: what kind of upsampling/downsampling is done to fit my streams?Android camera2:为了适合我的流,做了什么样的上采样/下采样?
【发布时间】:2016-10-05 07:40:39
【问题描述】:

我希望获得失真最小的图像流(无降噪等),而无需处理 RAW 输出。 我正在使用两个流(一个在使用已弃用的camera 时),一个用于预览,一个用于处理。我了解 camera2 api,但想知道在将传感器输出拟合到表面时使用哪种上采样/下采样?

更具体地说,我正在处理缩放图像,并根据有关 croppingreferences 的 camera2 文档:

对于非原始流,将执行任何额外的每个流裁剪以最大化流的最终像素区域。

整个概念很容易理解,但也提到:

输出流使用这个矩形来产生它们的输出,必要时裁剪到更小的区域以保持流的纵横比,然后缩放传感器输入以匹配输出的配置分辨率。

但我无法找到有关此缩放的任何信息。使用哪种方法(基于过滤器、双三次、边缘导向等)?有没有办法获得这些信息?有没有一种方法可以让我真正选择使用哪个?

关于已弃用的camera,我猜缩放只是更简单,从某种意义上说,它可能相当于拥有SCALER_CROPPING_TYPE_CENTER_ONLY,只有一组有限的裁剪区域对应于暴露的缩放比例。但是图像缩放是否与camera2 中的相同?如果有人能提供一些启示,我会很高兴。


现实生活中的例子

相机传感器:5312x2988(16:9)

我想要 4 倍缩放,所以裁剪区域应该是 (1992, 1120, 1328, 747) (顺便说一句,奇数尺寸会发生什么?例如SCALER_CROPPING_TYPE_CENTER_ONLY 设备?)

现在我有一个大小为 (1920, 1080) 的表面,裁剪区域和流比适合,但必须转换 1328x747 值以填充 1920x1080 表面。我想知道这种转变的本质。

【问题讨论】:

    标签: android image camera


    【解决方案1】:

    使用的缩放算法取决于设备;通常为了功率效率和速度,缩放是在硬件模块中完成的,通常在相机图像信号处理器 (ISP) 管道的末端。

    因此,您通常不能将其视为任何特定类型的缩放或过滤。不幸的是,如果您想了解整个处理管道,您必须从 RAW 开始并自己实现它。

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

    【讨论】:

    • 我不希望有人真正回答我的问题,也不指望缩放方法会被发布或记录,但是你永远不知道......所以感谢您接受时间和确认我的想法。
    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2019-09-25
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多