MeshLab是一个开源、可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格。它支持多种文件格式:

  • import:PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, ALN
  • export:PLY, STL, OFF, OBJ, 3DS, COLLADA, VRML, DXF, GTS, U3D, IDTF, X3D

  下面来试一下MeshLab中的点云配准功能,为了进行验证,需要先创建两块位置姿态不匹配的点云。这里使用开源的三维建模软件Blender,首先在Blender中按X键删除默认的立方体后,按Shift+A创建一个猴头suzanne(Suzanne is Blender's alternative to more common test models such as the Utah Teapot and the Stanford Bunny),然后添加一个修改器,Subdivision Surface将Render设置为1之后点击Apply。

  接下来将其输出为PLY格式的文件( PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,它允许以ASCII码格式或二进制形式存储文件,在图形学的研究领域中PLY是种常用且重要的文件格式)

  然后将该猴头在Blender中平移和旋转到另一个位置,这里沿着XYZ轴分别平移了2个单位(Blender中使用键盘命令:GX2、GY2、GZ2),然后绕Z轴旋转了-45°(RZ-45),最后也将其输出为PLY文件。

  这一变换对应的变换矩阵T为:

  在MeshLab中导入这两个文件,渲染模式选为点后可以看到两块点云,如下图所示。

  接着点击工具栏上的Align按钮进行配准,这时会弹出一个Align Tool的对话框。首先要选择参考点云,这里将没有平移旋转的原始点云作为参考,然后点击Glue Here Mesh,选择好之后点云名字前面会出现一个星号。

  然后选择另一块点云,点击Point Based Glueing,这时弹出一个窗口,在两块点云上手动选择匹配点,至少选4对点之后点OK确认。双击鼠标左键进行选择,按住Ctrl双击左键消除选择。

  之后会发现,两块点云基本上重合在了一起,并且第二块点云名字前也出现了一个星号。初始配准之后,我们将进行ICP配准,注意Param ICP Default中的默认参数,根据需要进行修改。如果我们的两块点云大小相同,那么就要勾选Rigid matching选型。如果我们不勾选,那最终的变换矩阵中将会有一个缩放因子。

  • 采样点数目(Sample Number):this is the number of samples it pulls from each mesh to compare to the other meshes. You do not want to make this number too big. A small sample typically works quiet well. 1,000 to 5,000 is usually plenty.
  • Minimal starting distance:this ignores any samples that are outside of this range. Typically for a manually aligned object you want this to be large enough to encompass your 'point picking' error. A value of 5 or 10 (in millimeters) is usually a good start. Once the initial alignements are complete, drop it down to 1mm to 'fine tune'
  • Target distance(相当于均方误差mse):an average alignment error value that the software will try to obtain from the process
  • 最大迭代次数(Max iteration number):the maximum number of iterations that the software will perform

  点击Process之后软件开始自动计算,将工程保存为ALN文件(Align Project),之后用文本编辑器打开,可以看到Align文件中每一个点云都有一个代表其位置和姿态的旋转矩阵。

1.ply
#
1.000000 -0.000000 -0.000000 -0.000000
0.000000 1.000000 0.000000 -0.000000
0.000000 -0.000000 1.000000 -0.000000
0.000000 0.000000 0.000000 1.000000
2.ply
#
0.706755 -0.707458 0.000400 0.000489
0.707458 0.706755 0.000011 -2.828475
-0.000291 0.000275 1.000000 -1.999996
0.000000 0.000000 0.000000 1.000000

  将猴头从位置2变换到位置1的矩阵为T-1

  对比可以看出MeshLab中的Align配准工具正确计算出了变换矩阵T-1。需要注意的是,不要想当然的以为逆矩阵中的移动分量为(-2,-2,-2)T,参考《机器人学导论》中第2章——Spatial descriptions and transformations

已知B→A的齐次变换矩阵T,则A→B的齐次变换矩阵T-1如下:

参考:

http://blog.csdn.net/szchtx/article/details/7587999

http://download.csdn.net/detail/chx_man/6314891

转载于:https://www.cnblogs.com/21207-iHome/p/6034792.html

MeshLab中进行点云配准相关推荐

  1. 如何把meshlab中的圆环去掉_MeshLab中配准点云

    import:PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, A ...

  2. 在医学图像分析中使用ICP算法进行点云配准

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文转载自「计算机视觉工坊」,该公众号重点在于介绍深度学习.智能驾驶等领域,一个小众的公众号. 论文标 ...

  3. 【点云配准】点云配准中常用的评价指标(豪斯多夫距离/Hausdorff Distance、倒角距离/Chamfer Distance和陆地移动距离/Earth Mover‘s Distan

    1.概述 在点云配准问题中,我们通常会用相似性测度来评价两组点云之间的匹配程度,或作为迭代求解的代价方程(cost function),常见的相似性测度有均方误差(Root Mean Square E ...

  4. 博士论文阅读_仿生群智能优化算法及在点云配准中的应用研究

    1.应用领域 计算机视觉:高效的仿生群智能优化策略应用于解决复杂的三维点云配准问题. 概念: (1)点云:是一个数据集,数据集中的每个点代表一组X.Y.Z几何坐标和一个强度值,这个强度值根据物体表面反 ...

  5. 该如何学习三维点云配准的相关知识?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 知乎用户 上海交通大学 电子与信息博士在读 点云配准综述 本文意在 ...

  6. 点云配准学习路线及方法

    来源:https://gitee.com/wyfproject/Point-cloud-registration-master/repository/archive/master.zip 在gitee ...

  7. CVPR2020:训练多视图三维点云配准

    CVPR2020:训练多视图三维点云配准 Learning Multiview 3D Point Cloud Registration 源代码和预训练模型:https://github.com/zgo ...

  8. 点云配准的端到端深度神经网络:ICCV2019论文解读

    点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...

  9. 基于全景图像与激光点云配准的彩色点云生成算法(2014年文章)

    标题:The algorithm to generate color point-cloud with the registration between panoramic imageand lase ...

最新文章

  1. python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识
  2. OleDbCommand使用参数应该注意的地方
  3. 力士乐伺服电机编码器调零_力士乐伺服电机编码器故障维修来这里
  4. Android多线程研究(8)——Java中的原子性理解
  5. 并发运行的最佳实践_并发最佳实践
  6. ruby 三目运算符_Ruby运算符
  7. HTML基础学习(二)—CSS
  8. 软件质量保证与测试(秦航第二版)第二章
  9. 锐起BSD5.0企业无盘下载免费试用
  10. ASP.Net中控件的EnableViewState属性
  11. Windows 7提示数据错误 循环冗余检查怎么办?
  12. mysql ix锁_mysql锁详解
  13. 全国计算机二级c语言程序题库,全国计算机二级C语言操作题题库
  14. torch.bmm()和torch.matmul()函数的用法和区别,矩阵相乘
  15. ASP是什么?ASP初识
  16. Pcie(igb)网卡调试总结:tx uint hang异常解决方法
  17. pcntl_fork() has been disabled for security reasons报错
  18. Spine动画导入报错 : Could not automatically set the AtlasAsset for “xx“.you may set it manually
  19. 宏观经济调控政策笔记+
  20. wincc 数据库的连接方法

热门文章

  1. Android JNI 编程
  2. Vmware学习虚拟机操作时遇到的问题和解决
  3. 更新版-梳理前端开发使用eslint和prettier来检查和格式化代码问题
  4. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程
  5. Windows Server2008R2 域迁移
  6. jquery 选项卡插件
  7. System.Threading.Timer类的TimerCallback 委托
  8. matlab中矩阵的累加,累加和与累乘积在matlab中-read.ppt
  9. mysql的如何输入dateadd_mysql中date_add()函数的使用?
  10. Hibernate中自动生成数据库表的两种方式