gpt4 book ai didi

java - Camera.Parameters.getHorizo​​ntalViewAngle() 和 Camera.Parameters.getVerticalViewAngle() 的 Android Camera2 API 等效项是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:16 25 4
gpt4 key购买 nike

这一切都在标题中,但在现已弃用的 Android Camera API 中,有两个方法:Camera.Parameters.getHorizo​​ntalViewAngle() 和 Camera.Parameters.getVerticalViewAngle()。

现在,对于当前的 Camera2 API,文档中似乎没有与这些等效的东西。我假设这是因为 FOV 角度比简单的水平和垂直值更复杂和细微差别,但我无法在网上找到任何有关如何使用较新的 Camera2 API 计算 Android 设备的总视野的信息.

最佳答案

基本公式是

FOV.x = 2 * atan(SENSOR_INFO_PHYSICAL_SIZE.x / (2 * LENS_FOCAL_LENGTH))
FOV.y = 2 * atan(SENSOR_INFO_PHYSICAL_SIZE.y / (2 * LENS_FOCAL_LENGTH))

这是一个 approximation假设一个理想的镜头等,但通常足够好。

这会计算整个传感器像素阵列的 FOV。

但是,给定输出的实际视野会更小;首先,传感器的读出区域通常小于全像素阵列,因此不要直接使用 PHYSICAL_SIZE,您需要先按像素阵列像素数与 Activity 阵列像素数 (SENSOR_INFO_ACTIVE_ARRAY_SIZE/SENSOR_INFO_PIXEL_ARRAY_SIZE) 的比率对其进行缩放.

然后,视野取决于您配置的输出的纵横比(16:9 FOV 将不同于 4:3 FOV),相对于 Activity 阵列的纵横比, 以及裁剪区域的纵横比(数字缩放),如果它小于整个 Activity 阵列。

每个输出缓冲区将是为相应的捕获请求进一步裁剪 cropRegion 以达到正确的输出纵横比的结果。 (http://source.android.com/devices/camera/camera3_crop_reprocess.html 有图表)。

假设我们有一个像素阵列为 (120,120) 的传感器,我们有一个有源阵列矩形 (10,10)-(110,110),因此宽度/高度为 100,100。

我们配置两个输出,输出A是(40,30),输出B是(50, 50)。让裁剪区域保持在最大值 (0,0)-(100,100)。

输出 A 和 B 的水平 FOV 将相同,因为最大面积裁剪将导致两个输出都使用完整的 Activity 阵列宽度:

output_physical_width = SENSOR_INFO_PHYSICAL_SIZE.x * ACTIVE_ARRAY.w / PIXEL_ARRAY.w
FOV_x = 2 * atan(output_physical_width / (2 * LENS_FOCAL_LENGTH))

但是,垂直 FOV 会有所不同 - 由于纵横比不匹配,输出 A 将仅使用 3/4 的垂直空间:

active_array_aspect = ACTIVE_ARRAY.w / ACTIVE_ARRAY.h
output_a_aspect = output_a.w / output_a.h
output_b_aspect = output_b.w / output_b.h
output_a_physical_height = SENSOR_INFO_PHYSICAL_SIZE.y * ACTIVE_ARRAY.h / PIXEL_ARRAY.h * output_a_aspect / active_array_aspect
output_b_physical_height = SENSOR_INFO_PHYSICAL_SIZE.y * ACTIVE_ARRAY.h / PIXEL_ARRAY.h * output_b_aspect / active_array_aspect
FOV_a_y = 2 * atan(output_a_physical_height / (2 * LENS_FOCAL_LENGTH))
FOV_b_y = 2 * atan(output_b_physical_height / (2 * LENS_FOCAL_LENGTH))

当输出纵横比 <= Activity 数组纵横比(信箱)时,上述方法有效;如果不是这样,则输出水平维度会减少,垂直维度会覆盖整个有源阵列(邮筒)。水平方向的比例因子是 active_array_aspect/output_aspect。

如果要计算放大 View 的 FOV,请用裁剪区域尺寸/纵横比替换 Activity 阵列尺寸/纵横比。

关于java - Camera.Parameters.getHorizo​​ntalViewAngle() 和 Camera.Parameters.getVerticalViewAngle() 的 Android Camera2 API 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com