用于colmap重建结果、pcd/ply、6D位姿的点云可视化工具

工具介绍:提供一款用于点云可视化windows的工具

可视化的对象包括:
1、colmap重建结果
2、pcd\ply格式的点云
3、位姿R|t可视化
4、在线接收点python发送的坐标
在这里插入图片描述

其他功能:点云保存、颜色修改、点云隐藏、点云大小调整
工具地址:用于colmap重建结果、pcd/ply、6D位姿的点云可视化工具

1、colmap重建结果可视化

Colmap是一款基于SFM进行点云重建的开源工具,但是使用colmap对重建的点云进行可视化时,需要提供一下四个文件数据(images,camera,points3D,project),其中images文件是用于存储图像的位姿和特征点、cameras文件保存相机的参数信息,points3D文件保存重建坐标点,project文件是保存colmap的配置信息。只有在一下四个文件齐全的情况下才可以使用colmap来加载重建结果
在这里插入图片描述
但是,通常情况下我们从共数据库中获取的数据只给我们提供了前三个文件,此时就无法使用colmap加载重建结果例如用于图像定位的:CMU 数据集,现有的colmap就无法对重建结果进行可视化。
在这里插入图片描述
因此,为例解决colmap无法加载重建点云的问题,该工具提供了一个对该类数据进行可视化的工具,使用过程:点击colmap->选择sparse文件所在路径,点击确定
在这里插入图片描述

2、pcd/ply点云可视化工具

pcd和ply是点云保存的通用格式,作为一款用于点云可视化的工具对该类数据的可视化必不可少。使用过程:点击读取点云》选择pcd/ply格式的点云》确定
在这里插入图片描述

R|t位姿可视化

熟悉坐标位置的读者或许知道R|t具体指什么,其中R是旋转矩阵,t是平移量,通过这两个参数就可以得到一个坐标点。
在该工具中,提供的接口读取的是一个txt文件,其中该文件保存的数据结构为(name,四元数,t)此处为什么要用四元组呢?因为四元数保存的数据只有四个,而旋转矩阵有9个,关于两者之间的变换过程如下。
在这里插入图片描述

# 四元数转R旋转矩阵
def qvec2rotmat(qvec):
    return np.array([
        [1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,
         2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],
         2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]],
        [2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],
         1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,
         2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]],
        [2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],
         2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],
         1 - 2 * qvec[1]**2 - 2 * qvec[2]**2]])
# R|t转xyz坐标
pos_xyz = R.T @ t

# 旋转矩阵转四元数
def rotmat2qvec(R):
    Rxx, Ryx, Rzx, Rxy, Ryy, Rzy, Rxz, Ryz, Rzz = R.flat
    K = np.array([
        [Rxx - Ryy - Rzz, 0, 0, 0],
        [Ryx + Rxy, Ryy - Rxx - Rzz, 0, 0],
        [Rzx + Rxz, Rzy + Ryz, Rzz - Rxx - Ryy, 0],
        [Ryz - Rzy, Rzx - Rxz, Rxy - Ryx, Rxx + Ryy + Rzz]]) / 3.0
    eigvals, eigvecs = np.linalg.eigh(K)
    qvec = eigvecs[[3, 0, 1, 2], np.argmax(eigvals)]
    if qvec[0] < 0:
        qvec *= -1
    return qvec

数据读取结果:
在这里插入图片描述

python坐标点在线读取

该功能可以实时获取python端发送的坐标点,并动态的绘制坐标点。
python端数据发送的代码如下:

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
client.connect((str(ip), 10101))
msg=client.recv(1024)
print("pose,x,y,z,r,g,b")
data=""
while(data!='exit'):
    data=input()
    client.send(data.encode('utf-8'))
client.close()

在这里插入图片描述
点云保存:选中需要保存的对象——》点击点云保存,输入**.pcd的文件名称将点云保存到本地。
python坐标点保存:点击 保存 按钮保存python端传输的坐标点:
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Colmap是一个用于稀疏三维重建的开源软件,它能够从多张图片中恢复相机的位姿Colmap的输出结果主要包括相机的内外参数以及图像的稀疏三维点云Colmap通过对每张图像进行特征提取和匹配,来估计相机的位姿。在特征提取阶段,Colmap会检测图像中的特征点,并计算每个特征点的描述子。在特征匹配阶段,Colmap将对每对图像之间的特征点进行匹配,从而找到它们之间的对应关系。 当Colmap完成特征提取和匹配后,它会使用RANSAC算法估计相机的初始位姿。RANSAC算法通过随机选择一些特征点组成假设模型,然后利用这些假设模型计算出位姿,并计算模型与实际数据之间的误差。通过重复这个过程来选取拟合误差最小的模型,并使用这个模型作为初始位姿Colmap输出的位姿主要包括相机的外部参数,即相机的旋转矩阵和平移向量。旋转矩阵描述了相机坐标系相对于世界坐标系的旋转关系,平移向量描述了相机坐标系相对于世界坐标系的平移关系。 除了相机的外部参数,Colmap还可以输出相机的内部参数,即相机的焦距、主点坐标和畸变系数。内部参数描述了相机的成像特性,例如焦距决定了相机的视场大小,主点坐标决定了图像坐标原点的位置,畸变系数则描述了相机透镜的形状。 最后,Colmap还可以输出图像的稀疏三维点云。这些点云是通过对每个图像的特征点进行三角化计算得到的,每个点的坐标代表了在世界坐标系中的位置。 综上所述,Colmap输出的位姿包括相机的内外参数以及图像的稀疏三维点云,这些信息可以用于进一步的三维重建和视觉定位任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuLaDe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值