前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【单目测距】已知相机角度如何测距

【单目测距】已知相机角度如何测距

作者头像
读书猿
发布2024-02-05 15:19:22
1740
发布2024-02-05 15:19:22
举报
文章被收录于专栏:无人驾驶感知无人驾驶感知

前言

  • 承接上篇博客【单目测距】单目相机测距
  • 上篇博客告诉你基本思路,现在我们结合实际情况做个测距分析,比如相机存在角度如何测距。
  • 对此方法测距做误差分析,分析影响误差因素。

测距

已知相机高度 h,已知俯仰角 p,易求 OA。深度 OA 求得,则距离易知。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
import numpy as np

h = 1.5  # 相机离地面1.5m高
pitch = -0.023797440420123328  # 弧度
pixe_x, pixe_y = 888, 700  # 图像像素点,接地点
CameraMat = np.array([[1008.79199578, 0, 945.9802333],
                      [0, 1009.03003689, 537.81211307],
                      [0, 0, 1]])  # 相机内参

R = np.array([[-0.0330564609, 0.0238237337, 0.999169505],
              [0.999452124, -0.000862625046, 0.0330863791, ],
              [0.00165014972, 0.999715802, -0.0237821659]])  # 旋转矩阵
T = np.array([0.11, -0.01, 0.13])

sigma = np.arctan((pixe_y - CameraMat[1][2]) / CameraMat[1][1])
z = h * np.cos(sigma) / np.sin(sigma + pitch)  # 深度
x_pixe, y_pixe = 2 * CameraMat[0][2] - pixe_x, 2 * CameraMat[1][2] - pixe_y  # 根据自定坐标系选择是否中心对称转换
camera_x = z * (x_pixe / CameraMat[0][0] - CameraMat[0][2] / CameraMat[0][0])
camera_y = z * (y_pixe / CameraMat[1][1] - CameraMat[1][2] / CameraMat[1][1])
camera_z = z
distance_machine_direction = R[0][0] * camera_x + R[0][1] * camera_y + R[0][2] * camera_z + T[0]  # 纵向距离
distance_transverse_direction = R[1][0] * camera_x + R[1][1] * camera_y + R[1][2] * camera_z + T[1]  # 横向距离
print(distance_machine_direction, distance_transverse_direction)

误差分析

  • 误差影响因子排名。排名越靠前误差影响越大
  • pitch
  • pixe_y
  • yaw
  • h
  • roll
  • T
  • 如果相机本身抖动剧烈,需要对距离进行一些处理,如添加跟踪对距离进行处理。这里不过多赘述。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 测距
  • 误差分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档