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

MeshLab中进行点云配准的更多相关文章

  1. 使用正态分布变换(Normal Distributions Transform)进行点云配准

    正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.下面是PCL官网上的一个例 ...

  2. PCL点云配准(1)

    在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视 ...

  3. 使用Meshlab软件将点云(Point Cloud)转换为模型(Mesh)

    使用Meshlab软件将点云(Point Cloud)转换为模型(Mesh) 启动Meshlab软件: 导入.ply点云文件: 接着点击: 弹出一个右侧边栏: 接着,计算每个点的法线: 输入100,点 ...

  4. FPFH+ICP点云配准

    A, UniformSampling降噪 B, ISS计算关键点, FPFH特征 在FeatureCloud::setInputCloud中读入点云,并调用processInput进行处理: proc ...

  5. 3D点云配准算法简述

    ​蝶恋花·槛菊愁烟兰泣露 槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去. 明月不谙离恨苦,斜光到晓穿朱户. 昨夜西风凋碧树,独上高楼,望尽天涯路. 欲寄彩笺兼尺素.山长水阔知何处? --晏殊 导读: 3D点云 ...

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

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

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

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

  8. 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

    在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...

  9. 【阿里云产品公测】在Laravel4框架中使用阿里云ACE的缓存服务

    作者:阿里云用户dvbhack 受论坛排版和格式限制,这篇帖子的格式不是很利于阅读,如果你看帖子觉得不那么舒服,可以看我发表在自己博客上的原文:http://www.ofcss.com/2014/04 ...

随机推荐

  1. [py]安装ipython

    系统:crunch bang11+python2.7.3 准备工具: sudo apt-get install python-pip python-dev build-essential 安装setu ...

  2. js获取单选框radio的值

    遇到一个js获取radio值的问题,原来根据frm.type.value取到的值在ie下是空值 解决办法:type为每个radio的值 var chkObjs=document.getElements ...

  3. SQLServer查询速度慢的原因

    查询速度慢的原因很多,常见如下几种:  1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应.  3.没有创建计算列导致查询不优化.  4.内存 ...

  4. android 项目学习随笔七(ViewPagerIndicator与ViewPager)

    1.ViewPagerIndicator https://github.com/JakeWharton/ViewPagerIndicator package com.viewpagerindicato ...

  5. VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装

    VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装在阿里云开源镜像地址下载镜像Index of /centos/7.2.1511/isos/x86_64/http://mirro ...

  6. Error: 16GU盘变1G,恢复

    最近装win10,chromium os之后,删除U盘中的文件,发现不能删除,脑子一热格式化了,发现16G突然变成了1G,这不是坑爹吗,刚买的新U盘呀.立马百度,发现有说是买的被骗了,有的说使用某个软 ...

  7. POJ 2192 :Zipper(DP)

    http://poj.org/problem?id=2192 Zipper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1 ...

  8. Effective STL

    第9条:慎重选择删除元素的方法 删除特定值元素,vector.string.deque用erase-remove:c.erase(remove(c.begin(),c.end(),1963),c.en ...

  9. PRINCE2七大原则(1)

    PRINCE2七大原则(1) 我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第二个原则:吸取经验教训. PRINCE2要求 ...

  10. javascript对象(2)

    Number对象 创建方法 var myNum=new Number(value); //返回一个新创建的Number对象var myNum=Number(value); //把Number()作为一 ...