目录
  • 1 使用Meshlab进行配准
  • 2 获取三个方向角度

1 使用Meshlab进行配准

我们首先要获取本双目相机拍摄点云图像,因为我使用的双目相机本身转换出的深度图效果较差,这里推荐Raftstereo进行深度图生成!!!后面如果有需要可以做一个环境配置的博客。

下载Meshlab官网:下载

这个下载很简单我们就不做过多介绍了。

首先要选择一个参考点云,一个配准点云。我选择的参考点云是平行于地面进行拍摄,pitch角度为0。这里后面会做介绍。配准点云就是我们要计算角度的点云。选择要上传的两个点云进行上传。

上传好了以后就是这个样子。

点击Filters->Normals,Curvatures and Orientation->Computer normal for point sets计算两组点云的法向量。

选择Neighbour num,这里只推荐选择10,选择Preview,点击Apply,有时候会发现图像没变化,是有可能法向量计算到反面了,调整数量可以计算到正面,但是可能配准之后的点云会有阴影,因此要换一个点云,进行配准。两组点云都计算完法向量。正面都是白色。

之后,点击Align按钮,进行配准。选择平面拍摄的参考点云,点击Glue here Mesh。另一个点云点击Point Based Glueing,点击取消use False Color,可以看到点云的纹理,方便我们选择点。至少选择4对点之后点OK确认,尽量选择边界作为配准点。双击鼠标左键进行选择,按住Ctrl双击左键消除选择。

配准之后图像。完全重合在一起。配准完成。如果配之后发现不是纹理的,就在右侧中间部分找到vert点击(两个点云都是)。

保存矩阵文件,点击File->Save Project As。选择Align Project,进行保存。之后使用浏览器打开,获得旋转矩阵。计算角度。

2 获取三个方向角度

import numpy as np

print("请输入旋转矩阵的元素(每行三个元素,用空格分隔):")

R = np.zeros((3, 3))
for i in range(3):
    row = input(f"输入第 {i + 1} 行: ").strip().split()
    R[i] = [float(num) for num in row]

# 计算角度
yaw = np.arctan2(R[1, 0], R[0, 0])
pitch = np.arcsin(-R[2, 0])
roll = np.arctan2(R[2, 1], R[2, 2])

yaw_deg = np.degrees(yaw)
pitch_deg = np.degrees(pitch)
roll_deg = np.degrees(roll)

print(f"Yaw: {yaw_deg:.15f} degrees")
print(f"Pitch: {pitch_deg:.15f} degrees")
print(f"Roll: {roll_deg:.15f} degrees")

yaw是平行于地面旋转相机,pitch是俯拍角度,roll则是在水平面方向滚动。

详情可参考:参考

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐