建筑物墙面建模

建筑物墙面建模

通常我们要确定某个规则物体,可以提取相应的几何特征,例如一个球只需提取出球心坐标和半径大小即可唯一确定该球。本次建模对象主要是某大学主楼,每次处理的对象是主楼的一部分,且每一部分可以近似看作矩形。最后将已处理的部分同时用pcd_viewer_release.exe工具显示,并将处理后的结果与主楼原始点云显示结果进行对比,看处理结果是否合理。


建模算法流程

1.      将原始点云进行平面分割,得到若干个平面点云。【平面分割】

2.      对第一步中分割得到的平面进行聚类,聚类准则是若两个平面近似平行且相距较近,则将这两类聚为一类。【聚类】

3.      遍历得到每个类别,将每个类别中的所有平面投影到其中一个平面中。【投影】

4.      遍历投影后的结果平面,获取矩形平面的四个顶点。【获取矩形顶点】

5.      对获取到的矩形平面进行修剪。【修剪】

 

以上五步即为建模的算法流程。下面分别详细描述每一步:


平面分割

这里分割直接采用PCL提供的随即采样一致性分割算法SACSegmentation,分割时需要提供一个距离阈值,该值不宜太小也不宜太大,倘若太小就造成过度分割,太大会造成分割比较粗糙。这里经过实验,该阈值设为0.06效果较好。

分割后就得到若干个点云平面和对应的平面方程系数。


聚类

遍历第一步分割出来的平面,每次对两个不同的平面进行比较,如果这两个平面近似平行,则计算这两个”平行”平面间的”距离”,若得到的距离小于设定的阈值,那么就将这两个平面聚为一类。

其中,判断两个平面是否近似平行,有两种可行办法。其中一种是计算两个平面单位法向量间的欧式距离,如果该距离接近于0,则表示平面近似平行;另外一种是计算两个平面单位法向量间的余弦距离,如果该距离对应的角度小于某个阈值,则表示两个平面近似平行。本次实验采用第二种,阈值设为12.5度。

两个”平行”平面间的”距离”的计算是采用K近邻算法,遍历其中一个平面的点,对平面的点到另一个平面的距离进行加权平均,每个点对应的权值是该点周围半径为R的圆内点的个数。


投影

将聚类步骤中得到的近似平行的平面族投影到其中一个平面上,该基准平面的选取标准有两种,其中一种是点的个数最多的平面,另一种是最接近于垂直于地面的平面。本次实验比较两种效果后,决定采用第二种。当然选用第二个标准的前提是建筑物垂直于水平地面。


获取矩形顶点

获取矩形顶点即为获取平面的最小边界盒,这里假设矩形的上面两个顶点构成的边平行于水平地面。这里首先获取Z值最大的点(最高的点)和最小的Z值(最低的点),然后获取两侧最远的点,通过这两个点和最高点就可以确定边界盒矩形。


修剪

最初得到的各个平面矩形有可能是相交的,这样就造成角落出现突出的部分,因此有必要对这些突出部分进行修剪。

修剪算法就是每次分别对一个矩形平面的上下两条边和一个点云平面进行处理,如果边与点云平面直接相交且其中一个端点到点云平面的距离小于某个阈值,那么将该端点用交点替换;如果边的延长线与点云平面相交且其中一个端点到点云平面的距离小于某个阈值,仍然将距点云平面近的点用交点替换。如果边与点云平面相交,但是两个端点到平面距离大于阈值,那么有两种情况:第一种是这条边确实与点云平面相交,这种情况就不做处理;第二种是这条边与点云平面“伪相交”,这种情况是由于平面聚类分割时将原本不在一个平面的点聚类到一个平面上,造成投影后的平面与其他平面相交,这时候就需要从原始点云中获取该平面的真实边界点,如果边界点与边的端点相对应,那么就表示边与平面正常相交,但如果不对应,那么就表示“伪相交”,这时就要将重新获取边的端点。

在本次试验中,阈值设置为1.8。


算法阈值参数设置

const float EPSILON = 1.5;
const float ANGLE_THRESHOLD = (M_PI / 180 * 12.5);  //!平面间的夹角小于该阈值,可近似看作平行
const float PLN2PLN_THRESHOLD = 1.4;//;1.8;//1.0;  //!两近似平行平面间的距离小于PLN2PLN_THRESHOLD,就将两平面融合
const float CENTER2CENTER_THRESHOLD = 6.0;  //!两近似平行平面的重心间的距离小于CENTER2CENTER_THRESHOLD, 就将两平面融合
const float PNT2PLANE_THRESHOLD = 1.8;  //!点到平面间的阈值,若距离小于该阈值则将该点看作是平面的一部分

const float SEG_DIST_THRESHOLD = 0.06; //!两近似平行平面的重心间的距离小于CENTER2CENTER_THRESHOLD, 就将两平面融合
const int MAX_ITERS = 100;  //!平面分割时随机采样一致性算法中的迭代次数


结果

经过上面几步处理后就可以得到一些”矩形”,我们想要知道处理后的结果如何,就必须通过这些”矩形”重新画出建筑物的点云模型。

下面先给出原始建筑物点云(0.pcd 2.pcd  3.pcd  4.pcd)的显示:


经过以上几步处理的的结果显示为:


而实物图为:


主楼前的圆柱形的门柱处理效果很不好就没有在上面的途中显示。


算法局限性


本算法只能用于处理垂直于水平面的墙面,对于圆柱、圆锥等非平面以及不垂直于水平面的平面并不适用。

算法的几个步骤相关性比较大,例如平面分割没有做好,那么后面的修剪可能就存在问题。

另外,对于不同环境下设备采集到的点云,可能需要手动调整下阈值参数,方能得到相应的效果。


以上处理对应的代码见https://github.com/lming08/segment_plane_implicit/tree/Branch_2014_04_19


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 是的,Blender是一款非常适合用于建筑建模的软件。它拥有丰富的建模工具,能够帮助用户快速地创建复杂的建筑模型。此外,Blender还提供了许多用于渲染和动画的功能,可以让用户将建筑模型转化为真实感十足的图像和动画。 ### 回答2: Blender是一款功能强大的建模软件,绝对适合用于建筑建模。首先,它提供了广泛的工具和功能,可以帮助用户创建复杂的建筑物模型。它具有支持三维建模的多边形建模技术,用户可以使用它通过变换、拉伸、旋转等操作来构建各种建筑元素,如墙壁、柱子、梁等。 其次,Blender还具有强大的渲染功能,可以生成逼真的建筑渲染图像。用户可以根据需要调整光源、材质和纹理等属性,从而获得真实感十足的室内和室外场景。这对于建筑师和设计师来说,非常有价值,可以帮助他们展示设计概念并与客户进行交流。 此外,Blender还支持模型的导入和导出,可以与其他建筑软件进行兼容。用户可以根据需要将模型导入到其他建筑软件中进行进一步编辑和分析,或将Blender中完成的建筑模型导出为其他文件格式,如OBJ、FBX等。 总之,Blender具有丰富的建模工具、强大的渲染功能和与其他软件的兼容性,使其成为一款非常适合用于建筑建模的软件。无论是初学者还是专业人士,都可以通过Blender实现高质量的建筑建模和渲染。 ### 回答3: Blender是一款功能强大且免费的开源三维建模软件,它可以广泛应用于建筑建模领域。以下是Blender适合用作建筑建模的几个原因: 首先,Blender具有可视化和创造性工具,可以方便地创建建筑模型。它提供了多种建模工具,如多边形建模、曲线建模和体积封闭建模等,可以满足不同的建筑需求。通过建模和编辑工具,用户可以轻松地创建复杂的建筑结构和细节。 其次,Blender内置了灯光和渲染引擎,可以实现真实感的渲染效果。用户可以根据需要添加光源,调整材质和纹理,以达到逼真的建筑效果。此外,Blender还支持渲染动画,可以模拟建筑物的外观和光线在不同时间段的变化。 另外,Blender还具有粒子系统、物理模拟和动画工具,可以模拟建筑中的烟雾、火焰、水流等效果,使建模过程更加灵活和细致。这对于建筑设计师来说,可以模拟出更真实的场景和表现建筑的特点。 此外,Blender还支持导出多种格式的文件,可以与其他建模软件和工具进行兼容。这使得建筑师可以与其他协作者进行无缝合作,例如结构工程师、室内设计师和景观设计师等。 综上所述,Blender作为一款功能丰富的三维建模软件,确实非常适合用于建筑建模。它提供了全面的工具和功能,可以满足建筑领域的需求,并能够实现高质量的渲染效果。无论是建筑设计师还是相关专业人士,都可以充分利用Blender的优势来进行建筑建模

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值