0%

基于形态学的3D点云重建

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

这是一年前做的一个小算法,今天把它搬运过来。该算法的主要目的是利用灰度形态学腐蚀对3D点云进行曲面重建。
给定点云的数据文件(这是美国卫星的数据,能在官网上下载到),寻找一种方法,重建原来的曲面。点云数据为卫星扫描的las文件。
点云数据:

![pointCloudOri.jpg](/blog/images/pointCloudOri.jpg) 原始点云
![pointCloudFinal.jpg](/blog/images/pointCloudFinal.jpg) 处理后的效果

由于是卫星得到的数据,因此可以发现数据点基本都是楼房的屋顶。
而他的平面视图如下:

![pointCloudFromTop.jpg](/blog/images/pointCloudFromTop.jpg)

从这张图中,能看出扫描的轨迹。同时,我们也能发现,数据点过于稀疏,这是该数据的一个特点。由于数据点过于稀疏,传统的滤波插值等手段的效果均不好。因此在这里采用灰度形态学腐蚀运算原理如下:

![pointCloudgreyfilter.jpg](/blog/images/pointCloudgreyfilter.jpg)

相当于用一个小面片向上推,直到他卡住推不动了,则这是的高度值为新灰度图的值。这本质上也是一个低通滤波的过程,经过处理后,滤掉了多余的噪点,屋顶非常平滑。处理前后的效果对比如下:

![pointCloudBeforeProc.jpg](/blog/images/pointCloudBeforeProc.jpg) 处理前
![pointCloudAfterProc.jpg](/blog/images/pointCloudAfterProc.jpg) 处理后

最终得到的灰度图:

![pointCloudGreyMap.png](/blog/images/pointCloudGreyMap.png)
注意这里格式一定要用png(或其他无损的格式,jpg是有损的格式,如果用jpg会造成边缘毛刺)

然后利用3Dmax的地形制作功能,制作地形图。
首先在3Dmax中新建一个平面,设置分段尽量多,然后对该评先添加Displace修改器,在修改器中将位图指定为该灰度图即可。

![pointCloud3DMaxDis.jpg](/blog/images/pointCloud3DMaxDis.jpg)
下图是最终的效果,可见这种方法重建的效果还是很好的。
![pointCloudFinal2.jpg](/blog/images/pointCloudFinal2.jpg)