CityEngine从影像提取屋顶纹理并贴图

来源:互联网 发布:董小飒淘宝月收入 编辑:程序博客网 时间:2024/05/01 18:04

前言

        一段时间以来,一直有朋友在问屋顶纹理如何从影像中获取的相关问题, 其实在2012年的用户大会的Demo剧场的《CityEngine城市建模新选择》就有这个问题的相关介绍,详见http://wenku.it168.com/d_000565555.shtml。但是在《CityEngine城市建模新选择》中每一个建筑的屋顶纹理用的都是整个影像,为数据的使用带来了很大的不便。为了实现每一个建筑所调用的屋顶纹理都是其顶部那一块的影像,笔者准备了解决方案以飨读者。

数据准备与数据需求

        通过《CityEngine城市建模新选择》的介绍我们了解到,屋顶纹理的获取是与坐标相关的,因而建筑底面数据与影像上相对应的建筑屋顶的坐标应是一致的,也即是要满足以下两个要求:
1.选择的影像是正摄影像;
2. 建筑底面数据与影像数据是相匹配的。

解决问题的关键

       通过上面的描述,可以把整个问题归结为四个技术关键点:
1.如何通过建筑底面得到对应的建筑屋顶的切片影像,即影像的裁切问题;
2. 矢量数据需要那些属性的问题;
3. 如何在规则中检索建筑底面的影像,即影像命名的问题;
4. 规则编写的问题。
       下面将针对这些问题及最终的解决方案做一下阐述。

解决方案

        所用数据:影像为“AotiImage.tif”,矢量数据“Buildings_footpring3D.shp”。

影像裁切

        影像裁切阶段需要确定矢量数据每个要素的名称、对应裁切后影像的尺寸和起点坐标,并实现了基于每个要素的影像裁切,其过程较为复杂,为简化相应的工作流程,为此我们制作一个GP工具(该工具在ArcGIS 10.0及以前版本不可用),其界面如下:


分别输入建筑底面的矢量数据和原始的影像,然后选择输出的路径(文件夹)点击OK运行即能得到结果(数据量大时运行的时间会相对较长),在裁切结果的目录下能看到裁切后的结果如下图:
 
同时会发现处理之后,矢量数据在原有属性字段的基础上会增加如下内处字段:
 

结合《CityEngine城市建模新选择》里面的内容,我们知道有了这些信息我们就可以对以前的规则稍加调整就可以实现屋顶的影像纹理贴图。


 

工程创建及规则调整

1.工程与场景创建:《【CityEngine教程文档】---01 基础教程》里有详细的介绍,这里不再赘述。
2. 数据导入:复制调整后的矢量文件到data文件夹下,复制存放切割后的影像文件夹到assets文件夹下,复制原始影像文件到maps文件夹下(这三个文件夹都存放在新建工程的目录下);
3. 数据加载:导入原始影像文件、矢量数据到当前工程下;
4. 调整原始规则:调整后的结果如下(建筑墙面的贴图不在本文重点关注之中);
 

5.利用规则生成三维模型,这个时候我们就会得到屋顶纹理与影像协调一致的场景效果如下:


思考

        CityEngine做为一个建模软件、做为一个基于规则的建模软件,需要很多的数据处理过程为其提供基础数据、提供属性信息。因而在做基于规则的建模时,要把ArcGIS的数据处理与规则需求、把行业标准与规则编写结合起来,这样基于规则构建的模型才更具备现实意义。


工具及示例工程地址:下载