二维轮廓自动添加屋顶

   

1、背景介绍

     在提取建筑物轮廓点后,对轮廓点进行简化得到建筑物轮廓线。将轮廓线进行拉伸,变可得到建筑物白膜,如下图所示。这种形状比较简单,所重建模型实质上就是一个个立方体盒子,缺少屋顶细节,视觉观感上并不好。

建筑物白膜(缺少屋顶结构信息)

          但实际上,真实建筑物屋顶结构各不相同,由不同面片构成,具有复杂的屋顶结构,如下图所示。

2、基于CGAL自动生成斜坡屋顶

         一般的建筑物轮廓线矢量数据中并没有建筑物屋顶信息,相比较光秃秃的白模,如果能加上屋顶,其视觉观感就会好很多。本次介绍一种利用CGAL自动添加斜坡屋顶的方法。CGAL有个算法可以自动生成2D多边形骨架线,叫2D Straight Skeleton。具体的生成原理,可以去看官网上介绍。此次主要介绍如何利用CGAL生成屋顶,并使用PCL进行可视化显示。

2.1 环境配置

     本次程序需要安装依赖CGAL、PCL,其安装配置环境参考之前博客。本次实验在PCL1.11、CGAL5.5版本上运行。其中安装参考博客:

CGAL参考博客:CGAL环境配置(VS2019 PCL1.8)-CSDN博客

PCL参考博客:win11+VS2019下配置PCL1.11.1-CSDN博客

2.2 骨架线生成

     建筑物骨架线实质是对于一个闭合的多边形,在其内部生成其他线段。如下图所示,黑色线段为建筑物外轮廓,红色线段为骨架线。在CGAL库中,本质是生成了新的顶点,顶点与边相连,即可生成骨架线。

建筑物轮廓与骨架示意图

        生成骨架线API接口示例:

 SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly.vertices_begin(),
        poly.vertices_end());

2.3 三维模型可视化

    当然,生成的内部点是二维,没有高度,那么如何生成三维模型呢?可以采用如下简单策略:

(1)所有的外轮廓点,高程设置一个高度;

(2)所有的内部点,高程设置成另一个高度,一般是比外轮廓点高;

(3)对每个面对应的点,直接连接      

     可视化函数接口示例:

 viewer->addPolygon<pcl::PointXYZ>(contour, r, g, b, str);

3、测试与可视化

     源代码下载链接:https://download.csdn.net/download/qq_32867925/89323080

    程序运行环境 :PCL 1.11、CGAL 5.5、VS2019

3.1 骨架线生成测试

      假设组成外轮廓的形状如下,总共由A、B、C、D、E、F组成,每个点坐标如下:

A(0,0)、B(20,0)、C(20,20)、D(10,20)、E(10,10)、F(0,10)。具体可参考如下:

轮廓点分布示意图

       利用CGAL中骨架线生成函数create_interior_straight_skeleton_2,运行结果如下,总共生成了6个面,其中每个面组成的点数各不相同。如第一个面由3个点组成,三个点坐标为(0,0)、(5,5)、(0,10)组成。可以发现点(5,5)是生成点,(0,0)、(0,10)为轮廓边缘点,为已有点。

      分析每个面对应的点,其满足如下规律:

(1)首尾两个点为边缘点,非首尾点为生成的新的点

(2)按照点的顺序进行连接,是一个闭合的能够刻画真实形状的多边形

生成的面片

3.2 多边形可视化

     假设生成的点高程一样(z坐标相同),原始边缘点高程一样,将每个面对应的多边形进行可视化,结果如下。从俯视静态图,同一多边形颜色相同。三维动图展示了屋顶的三维空间结构,由6个面组成,每个面形状、高度各不相同。

俯视截图静态图三维框线动图三维面动图

L型屋顶测试

      从俯视静态图,同一多边形颜色相同。三维动图展示了屋顶的三维空间结构,由8个面组成,每个面形状、高度各不相同。

俯视截图静态图三维框线动图三维面动图

凹型屋顶测试

4、总结

      详细介绍使用CGAL中骨架线生成方法,快速生成屋顶结构。

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云实验室lab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值