点云配准用python怎么样

Python014

点云配准用python怎么样,第1张

点云配准过程,就是求一个两个点云之间的旋转平移矩阵(rigid transform or euclidean transform 刚性变换或欧式变换),将源点云(source cloud)变换到目标点云(target cloud)相同的坐标系下。

可以表示为以下的方程:

其中就是target cloud与source cloud中的一对对应点。

而我们要求的就是其中的R与T旋转平移矩阵。

使用reshape命令对矩阵进行整形。使用方式reshape(X,m,n...)

改进方式:

a(:,:,1)=[1

2

34

5

67

8

9]

a(:,:,2)=[0

0

10

1

01

0

0]

a(:,:,3)=3

for

j=1:3

k=a(j,:,:)

k=reshape(k,3,3)%更改位置,3,3按照自己的矩阵变化,但要保证数目相同

[x,y]=eig(k)%x:特征向量y:特征值。后期自己再改正哈程序

end

根据我的使用经验,我认为一般性的科研可以使用numpy工具链做为主力。

首先,在写矩阵计算相关的语句时,numpy的语法几乎能逼近MATLAB的简洁程度,而其他语言相对来说稍微“难看、难写”一些。

其次,当程序不仅仅涉及到科学计算时,用Python就可以大发神威了。比如我自己遇到的一个实际问题:需要对点云进行一些非常复杂的优化操作,之后需要画出三维图且支持一些拉近拉远转视角的操作,并且还要做出一个不错的界面方便调整参数、载入数据等等。看到画三维点云的第一反应就是用OpenGL,但是使用C/C++写那些非常繁杂的数值优化...用MATLAB可以很舒服、很便捷地写出优化部分的代码,但是直接画大规模的三维点云的速度,以及它那令人忧伤的GUI...

那Python就行吗?是的。在数值计算方面,Numpy/Scipy,以及强大的机器学习包scikit.learn,让这个过程十分惬意。在画三维点云方面,PyOpengl包完全就是OpenGL的Python封装,速度非常快,而且语法几乎同OpenGL一样。最后,使用PyQt写出基于Qt的GUI,这至少是一个标准的完备的GUI包,外观功能都不错。最后的最后,这个程序不需改动就可以跨平台运行,只要Linux/Windows用户按照标准过程安装了相应的包就可以使用,不用折腾本地编译之类的事情。

还有一个问题是速度。Windows下使用python(x,y)、Linux下源里默认安装方法的Python链接的都是较慢的Blas/Lapack库,而MATLAB默认链接MKL,所以矩阵计算速度会慢非常多。但是至少在Linux下是很容易让Numpy链接上MKL的,这样的Numpy计算速度与MATLAB几乎相同,所以速度不是严重的问题。也许C++能在循环上秒杀Python,但是如果你涉及到矩阵计算,用的普通的BLAS/LAPACK库,那么在核心的某几步上会慢成渣,从而在总的速度上被Python超越,得不偿失。当然你也可以让C++程序链接上MKL库,但要移植到别的平台又是一番折腾。

最后就是开发环境,个人推荐Eclipse的Pydev,用起来几乎同MATLAB一样,尤其是调试和看变量值方面。

在统计问题方面,用R写起来最舒服,因为包全,这一点Python或者C比不上。而且R也能链接MKL大大加快速度。还有就是,如果你要写统计方面的论文,那论文里的代码用R似乎会“显得”你更“

专业”一些。

上学期有流形学习课,我用scikit.learn包,几乎每次只改一句话就能提交作业(把LLE变成ISOMAP什么的)。还有一门统计学习课,让我深刻感觉到R就是用来写老师布置的ESL后面的那些编程题的,因为那些方法的作者,以及这本书的作者,写的就是R的包。至于大规模计算、实际的大型工程问题,我没有经验,所以不能提供更多信息了。

补充:如果觉得自己链接MKL库编译Numpy和R麻烦的话,Python可以使用Canopy(就是之前的EPD),R可以使用Revolution R,都是一些商业公司帮配置好的完整发行版,链接了MKL库并支持其他一些特性(例如自带IDE等)。前者各平台都有,后者仅限Windows平台。