#AEAI03007. 深度关键点三维恢复

深度关键点三维恢复

题目描述

机器人要抓取一个点,不能只知道它在图像上的像素位置,还要知道它在相机坐标系中的三维坐标。具身智能部将 RGB-D 相机的反投影过程整理成这道题。

给定深度图、相机内参 fx fy cx cy 和若干像素查询点 (u, v)。若查询点有效,请用针孔相机模型恢复三维坐标;若像素越界或深度为 0,输出 INVALID

输入格式

  • 第一行输入两个整数 H W
  • 随后输入 H*W 个整数,表示深度图,单位为毫米;深度为 0 表示无效。
  • 接着输入四个浮点数 fx fy cx cy
  • 然后输入整数 Q
  • 最后输入 Q 个查询点,每个为两个整数 u v

输出格式

  • 对每个查询点输出一行。
  • 若有效,输出 X Y Z,单位为米,保留 6 位小数。
  • 若无效,输出 INVALID

判定规则

使用标准输出比较。

  • 像素坐标为 0-based,u 对应列,v 对应行。
  • 深度 Z = depth[v][u] / 1000.0
  • 反投影公式为 X=(u-cx)*Z/fxY=(v-cy)*Z/fy

样例

输入样例 1

2 3
1000 0 2000
1500 1000 500
500 500 1 1
3
0 0
1 0
3 0

输出样例 1

-0.002000 -0.002000 1.000000
INVALID
INVALID

样例解释 1

第一个点深度为 1000 毫米,可恢复坐标;第二个点深度为 0,第三个点越界,均无效。

输入样例 2

1 1
1200
600 600 0 0
1
0 0

输出样例 2

0.000000 0.000000 1.200000

样例解释 2

唯一像素深度为 1.2 米,且像素点正好位于主点处,因此 X=Y=0