微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Yolo v3 Darknet 中测量检测到的物体的 X、Y、Z 坐标

如何解决在 Yolo v3 Darknet 中测量检测到的物体的 X、Y、Z 坐标

我使用在 Python 实现的暗网环境中运行的 Yolo v3 训练了一个 Yolo 网络来检测道路上的物体​​。

我使用的是英特尔实感 L515 和英特尔实感 D435i。

如何获取被检测物体的 X、Y、Z 坐标以及相机到物体本身的距离?

非常感谢任何帮助!

解决方法

基本上,您要进行的转换是投影的反向操作。我相信唯一重要的信息是你有一个深度相机和一个物体检测器产生的预测。您拥有的信息是 UV 坐标(在图像平面中)和深度(Z 坐标)。并且您想将 UVZ(像素坐标)转换为 XYZ(世界坐标)。注意 Z 在转换过程中不会改变。公共 Z 坐标允许您执行转换。

转换基于针孔相机模型 https://en.wikipedia.org/wiki/Pinhole_camera_model。您需要知道捕获图像的相机的内在参数。这些参数是焦距f和一个主点。

您可能还想访问 https://en.wikipedia.org/wiki/Camera_resectioning。您将在那里找到如何使用从焦距和主点创建的投影矩阵进行此转换。请注意,它们描述了从世界到像素坐标的投影。您需要计算逆投影矩阵以进行像素到世界的转换。

我还在 Tensorflow 中包含了一个使用投影矩阵的示例。

self.intrinsic_matrix = tf.constant([[self.focal_length[0],self.principal_point[0],0],[0,self.focal_length[1],self.principal_point[1],1,1]],dtype=tf.float32)
self.invr_projection_matrix = tf.linalg.inv(self.projection_matrix)

multiplied_uv = points_uvz[...,0:2] * points_uvz[...,2:3]
ones = tf.ones([points_uvz.shape[0],points_uvz.shape[1],1],dtype=points_uvz.dtype)
multiplied_uvz1 = tf.concat([multiplied_uv,points_uvz[...,2:3],ones],axis=-1)
tranposed_xyz = tf.matmul(self.invr_projection_matrix,multiplied_uvz1,transpose_b=True)
xyz = tf.transpose(tranposed_xyz,2,1])[...,:3]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。