加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 相似的Camera.Parameters.getHorizo??ntalViewAngle()和

发布时间:2020-12-15 05:14:07 所属栏目:Java 来源:网络整理
导读:这一切都在标题中,但在现已弃用的 Android Camera API中,有两种方法:Camera.Parameters.getHorizo??ntalViewAngle()和Camera.Parameters.getVerticalViewAngle(). 现在,使用当前的Camera2 API,似乎在文档中没有相应的内容.我假设这是因为FOV角度比简单的水
这一切都在标题中,但在现已弃用的 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,而是首先按像素阵列像素数与有效数组像素数的比例进行缩放(SENSOR_INFO_ACTIVE_ARRAY_SIZE / SENSOR_INFO_PIXEL_ARRAY_SIZE) .

然后,视场取决于您配置的输出的纵横比(16:9 FOV将不同于4:3 FOV),相对于有源阵列的纵横比,以及裁剪区域的纵横比(数字变焦)如果小于完整的活动阵列.

每个输出缓冲区将最小化进一步裁剪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将是相同的,因为最大区域裁剪将导致两个输出使用完整的有效阵列宽度:

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))

当输出宽高比为< =有源阵列宽高比(letterboxing)时,上述工作原理;如果不是这样,则输出水平尺寸减小,垂直尺寸覆盖整个有源阵列(柱箱).然后,水平方向的比例因子为active_array_aspect / output_aspect. 如果要计算放大视图的FOV,请将裁剪区域尺寸/纵横比替换为活动阵列尺寸/纵横比.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读