一种支持跨Tile的拓扑连接的三维大型水域修复技术的制作方法

文档序号:18512951发布日期:2019-08-24 09:15阅读:308来源:国知局
一种支持跨Tile的拓扑连接的三维大型水域修复技术的制作方法

本发明涉及三维模型数据修复技术领域,尤其涉及一种支持跨tile的拓扑连接的三维大型水域修复技术。



背景技术:

地理信息测绘行业通过无人机空中摄影,使用空中三角测量技术重建大地的三维模型。但是在重建水面的三维模型的时候,由于水面的色调单一,且存在反光的现象,所以在照片上提取出的水的特征点特别少,最后生成的水的三维模型残缺不全,有时水面甚至会高高扬起,目前还没有很好的解决水面的三维重建问题的算法,就算是行业领先的三维重建软件smart3d重建的水面也是破碎残缺的;三维建模人员建好水域的三维模型后,后期修模人员用手工的方法逐个tile进行水面三维模型的修复,他们先用第三方3d软件手动小心删除破碎的水块,然后用补洞或者放置平板的方法生成水块,最后通过uv展开的方法贴上水纹理,用ps进行纹理颜色调整和边缘融合;整个过程繁琐耗时,有些地方需要仔细切割再删除,而且放置平板的方法最后生成的水面和陆地在几何上是拓扑不连接的,当水面是那种大型水库,需要被分成许多个tile进行重建的时候,三维水域模型修复的工作量将会十分庞大。



技术实现要素:

本发明的目的是为了解决现有技术中存在手动修复水域三维模型工作过程繁琐的缺点,而提出的一种支持跨tile的拓扑连接的三维大型水域修复技术。

为了实现上述目的,本发明采用了如下技术方案:

设计一种支持跨tile的拓扑连接的三维大型水域修复技术,包括如下步骤;

步骤1:确定水域高程,大致画出水域范围,形成一个与待生成水面高程相同,但范围更大的假想的辅助水面;

步骤2:计算辅助水面与原始三维模型的相交线,这些相交线应该能大致体现出想要的水面轮廓,如果相交线整体或者局部无法体现出想要的水面轮廓,就用下一步的调整相交线的方法;

步骤3:调整相交线,调整水面高程可以全局调整相交线,但是水面高程的调整是有限制的;当生成的水面很杂乱,水面扬起很厉害的时候,怎么调整高程也没有效果;另外,实际水域修复中还有某块陆地由于某种原因想要变成水域的时候,这两种情况都可以通过局部调整模型三角面的位置,从而达到局部调整相交线的目的;

步骤4:完成相交线的分类,相交线可能来自岸地和小岛,也可能原先没有建好的水面碎片,甚至是与水域无关的陆地;通过手动选择一个相交线,自动连接所有同类型相交线的方法,分别确定陆地和岛的相交线,剩下没有被选择的相交线默认为水面碎片相交线和水域外的内陆相交线;水域外的内陆相交线是由于水域范围线大于实际水域导致的;岸地和小岛的相交线用于构建水域,水面碎片的相交线用于水面清理,内陆相交线则不做任何处理;

步骤5:生成逼真的水域纹理大图,先确定纹理的颜色采样点,用插值的方法生成水面纹理底图,然后添加波浪的效果,最后对水域与岸地交接的地方在纹理上进行纹理融合处理,使水和岸地纹理颜色过度自然;

步骤6:逐个tile进行水面几何和纹理的修复,具体的步骤如下;

(1)、通过岸地水岸线和tile边界构建单个tile的水面轮廓;

(2)、陆地与水面连接处切口的生成和水面碎片的删除;

(3)、新建水面,并与陆地进行拓扑连接;

(4)、小岛与新建水面的拓扑连接;

(5)、新建水面的uv展开和纹理贴图。

优选的,在步骤1中,在执行水域修复之前,需要用户先确定修复哪里的水域和修复好的水域的高程;确定修复哪里的水域可以通过鼠标框选的方式,画出一个描述水域大致范围的多边形,该多边形不需要准确的描述水域的轮廓,只需要把待修复的水域包含进去,后面算法会自己自动生成水域的精确轮廓,用户需要准确确定待生成水域的高程,而且为了生成正确表达水域的水面轮廓,水域的高程后面又可修改。

优选的,在步骤1中,假想的辅助水面是一个与待生成水面高程相同但范围比真实水域更大的虚拟水面,辅助水面不需要真正生成,可以用一系列等高程的有序点表示,水域范围多边形中每个点取相同的水域高程,就确定了一个辅助水面。

优选的,在在步骤2中,辅助水面与水岸模型的相交线是使用辅助水面切割原始三角网模型生成的一系列切割点有序排列的线段,其中,每一条相交线有下列属性:a、相交线自身的id;b、所属的tile;c、平面与三角网相交的有序点链;d、平面与三角网相交的有序边id链;e、是否是首尾闭合的相交线;f、水岸线的类。

优选的,在步骤3中,辅助水面与水岸模型的相交线需要体现出水面的轮廓,如果相交线整体或者局部无法体现出水面的轮廓,就需要调整相交线;相交线是辅助水面和水岸模型两者相交得来的,可以通过调整辅助水面的高程或者调整水岸模型来调整相交线,调整水面的高程是全局地调整相交线,所有的相交线都随着水面高程的改变而改变,但水面高程的可调范围是很有限的,而且有时候三维水域模型局部的水扬起得很厉害,完全失去了水的特征,这时候无论怎样调整水域高程都没有用,就需要通过局部调整模型三角形的高程来局部调整相交线。

优选的,局部调整模型高程的方法是用户先画一个表示调整范围的多边形,然后把多边形范围内扬起的水块和陆地的模型三角面高程下沉到水面以下,则该局部模型和辅助水面的相交线也就会跟着移动,为了不使原模型变样进而影响美观,该方法有两个需要注意的地方:一个树梢的处理,另一个是多边形周围三角面的高程平滑。

优选的,在通过局部调整模型高程调整相交线的过程中,有些树生长在水边,树根在陆地上,但树梢延伸到了水面的上方,这时候就不能把树梢和树梢下面的水或者陆地一起下压到水面以下,否则会出现拓扑错乱;解决的方法是对多边形范围内的模型三角面进行联通聚类,然后统计每一个三角面联通成分在高程的变化,最后只调整高程范围相交于辅助水面高程的联通成分,这就需要用户画表示调整范围的多边形的时候,同时画到任意一个原始相交线的两边,该方法不仅可以处理树梢,还可以处理任何伸到水面上方的模型;当水面扬起特别厉害的时候,如果仅仅改变多边形内的三角面的高程,而多边形外的三角面高程不变,就会造成多边形内外的三角面之间衔接特别突兀,此时应该渐进地调整多边形外的一定范围内的三角面高程,通过全局调整相交线和局部调整相交线,最终可以使使相交线大致体现出水面的轮廓。

优选的,在步骤4中,相交线可以分为内陆相交线,岸地相交线,岛相交线,和水面碎片相交线,岸地相交线是水面和岸地交接处的相交线,而内陆相交线是由于辅助水面大于真实水域,辅助水面切割与水无关的陆地形成的相交线;岛有跨tile的,也有完全在一个tile内的,tile内的岛的相交线一定是闭合的,而跨tile的岛的相交线一定是不闭合的,跨tile的岛相交线在后面的几何修复过程中被视为岸地相交线,只有岸地相交线和岛相交线构成真实的水岸线,所以在后面的叙述中岸地相交线与岛相交线和水岸线等同,水面碎片相交线是辅助水面切割水域中央扬起的水面形成的,做好相交线的分类以后,后期就可以对不同的相交线进行不同的处理,从而构建正确整洁且美观的水面。

本发明提出的一种支持跨tile的拓扑连接的三维大型水域修复技术,有益效果在于:

(1)、操作简单的、交互少、自动化程度高。可同时跨多个tile进行水面的修复,批量处理多个tile的水域;

(2)、效率高,人工需要一两天手工修复好的任务量,本技术一个小时左右就可以做好;

(3)、效果好,可处理中间有小岛的水域,修复的水面与水岸几何上拓扑完全连接,水纹理还原度高,带波浪效果,且水面和岸地纹理过度自然。

附图说明

图1为本发明提出的一种支持跨tile的拓扑连接的三维大型水域修复技术的流程图;

图2为本发明提出的一种支持跨tile的拓扑连接的三维大型水域修复技术的水岸模型与辅助水面的相交线局部剖视图;

图3为本发明提出的一种支持跨tile的拓扑连接的三维大型水域修复技术的两种相交线连接方式示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

参照图1-3,一种支持跨tile的拓扑连接的三维大型水域修复技术,包括如下步骤;

步骤1:确定水域高程,大致画出水域范围,形成一个与待生成水面高程相同,但范围更大的假想的辅助水面,在执行水域修复之前,需要用户先确定修复哪里的水域和修复好的水域的高程;确定修复哪里的水域可以通过鼠标框选的方式,画出一个描述水域大致范围的多边形,该多边形不需要准确的描述水域的轮廓,只需要把待修复的水域包含进去,后面算法会自己自动生成水域的精确轮廓,用户需要准确确定待生成水域的高程,而且为了生成正确表达水域的水面轮廓,水域的高程后面又可修改;假想的辅助水面是一个与待生成水面高程相同但范围比真实水域更大的虚拟水面,辅助水面不需要真正生成,可以用一系列等高程的有序点表示,水域范围多边形中每个点取相同的水域高程,就确定了一个辅助水面;

步骤2:计算辅助水面与原始三维模型的相交线,这些相交线应该能大致体现出想要的水面轮廓,如果相交线整体或者局部无法体现出想要的水面轮廓,就用下一步的调整相交线的方法,辅助水面与水岸模型的相交线是使用辅助水面切割原始三角网模型生成的一系列切割点有序排列的线段,其中,每一条相交线有下列属性:a、相交线自身的id;b、所属的tile;c、平面与三角网相交的有序点链;d、平面与三角网相交的有序边id链;e、是否是首尾闭合的相交线;f、水岸线的类;

结合附图2,计算辅助水面与原始三角网模型的相交线采用区域增长的方法,具体实施步骤如下;

(1)首先找出所有原始模型与辅助水面相交的边,同时每一条边做上未被选中的记号;

(2)然后取出一条未被选中的边,利用三角网的拓扑结构,按照左边在前、右边在后的顺序往两边进行增长,在往两边增长的过程中,每选中一条边就做上选中的标记,并且记下选中的边与辅助水面相交的点,这一步如附图2所示,点链…p2p1p0p-1p-2…和边链…e2e1e0e-1e-2…都在往两边增长;

(3)当相交线的边链两头都到达了模型的边界边,或者相交线的边链两头到达了同一条边,就完成了相交线的增长,同时把该相交线的闭合方式及所属tile记录下来;

(4)继续找到下一条未做选中标记的边作为种子点,按照(2)和(3)的步骤找到下一条相交线;

(5)当所有原始模型与辅助水面的相交边都被选中,就找到了所有的相交线;

步骤3:调整相交线,调整水面高程可以全局调整相交线,但是水面高程的调整是有限制的;当生成的水面很杂乱,水面扬起很厉害的时候,怎么调整高程也没有效果;另外,实际水域修复中还有某块陆地由于某种原因想要变成水域的时候,这两种情况都可以通过局部调整模型三角面的位置,从而达到局部调整相交线的目的,局部调整模型高程的方法是用户先画一个表示调整范围的多边形,然后把多边形范围内扬起的水块和陆地的模型三角面高程下沉到水面以下,则该局部模型和辅助水面的相交线也就会跟着移动,为了不使原模型变样进而影响美观,该方法有两个需要注意的地方:一个树梢的处理,另一个是多边形周围三角面的高程平滑;

其中,有些树生长在水边,树根在陆地上,但树梢延伸到了水面的上方,这时候就不能把树梢和树梢下面的水或者陆地一起下压到水面以下,否则会出现拓扑错乱;解决的方法是对多边形范围内的模型三角面进行联通聚类,然后统计每一个三角面联通成分在高程的变化,最后只调整高程范围相交于辅助水面高程的联通成分,这就需要用户画表示调整范围的多边形的时候,同时画到任意一个原始相交线的两边,该方法不仅可以处理树梢,还可以处理任何伸到水面上方的模型;当水面扬起特别厉害的时候,如果仅仅改变多边形内的三角面的高程,而多边形外的三角面高程不变,就会造成多边形内外的三角面之间衔接特别突兀,此时应该渐进地调整多边形外的一定范围内的三角面高程,通过全局调整相交线和局部调整相交线,最终可以使使相交线大致体现出水面的轮廓;

步骤4:完成相交线的分类,相交线可能来自岸地和小岛,也可能原先没有建好的水面碎片,甚至是与水域无关的陆地;通过手动选择一个相交线,自动连接所有同类型相交线的方法,分别确定陆地和岛的相交线,剩下没有被选择的相交线默认为水面碎片相交线和水域外的内陆相交线;水域外的内陆相交线是由于水域范围线大于实际水域导致的;岸地和小岛的相交线用于构建水域,水面碎片的相交线用于水面清理,内陆相交线则不做任何处理;

相交线可以分为内陆相交线,岸地相交线,岛相交线,和水面碎片相交线,岸地相交线是水面和岸地交接处的相交线,而内陆相交线是由于辅助水面大于真实水域,辅助水面切割与水无关的陆地形成的相交线;岛有跨tile的,也有完全在一个tile内的,tile内的岛的相交线一定是闭合的,而跨tile的岛的相交线一定是不闭合的,跨tile的岛相交线在后面的几何修复过程中被视为岸地相交线,只有岸地相交线和岛相交线构成真实的水岸线,所以在后面的叙述中岸地相交线与岛相交线和水岸线等同,水面碎片相交线是辅助水面切割水域中央扬起的水面形成的,做好相交线的分类以后,后期就可以对不同的相交线进行不同的处理,从而构建正确整洁且美观的水面;

步骤5:生成逼真的水域纹理大图,先确定纹理的颜色采样点,用插值的方法生成水面纹理底图,然后添加波浪的效果,最后对水域与岸地交接的地方在纹理上进行纹理融合处理,使水和岸地纹理颜色过度自然,具体的实施步骤如下;

a、确定整个水域纹理的大小,水域纹理的大小是根据整个水域模型的大小和水域的分辨率计算得来的,具体的公式是:水域纹理的长宽等于水域模型的长宽或水域的分辨率;整个水域模型的大小可以通过上面一步相交线分类得到的所有岸地相交线和岛相交线的包围盒求得,水域的分辨率d的物理意义是三维水域模型单位像素贴图覆盖的模型大小,单位是m/pix,它可以近似等于陆地模型的分辨率,所以水域的分辨率d通过求模型陆地部分的分辨率求得;

b、根据用户在原始模型上的颜色采样数据生成纹理颜色底图,用户在原始模型上的颜色采样数据收集的是若干个三维空间xi的对应的颜色ci。利用上面的整个水域包围盒box大小和水域分辨率d参数,可以得到三维空间颜色采样点对应水域纹理空间中的位置,三维空间颜色采样点xi转换到纹理空间点ti的公式是:

ti=(xi-boxmin)/d,

boxmin是整个水域包围盒在x或y方向的最小值。由于水面是水平的,所以在上述公式中,三维空间的x和y方向分别对应纹理空间的列和行;最后一步采用插值的方法得到水域纹理空间每一个像素点pr,c的颜色cr,c。插值算法考虑了在纹理空间中每一个采样点ti的颜色ci对该像素点pr,c的影响,影响的权重是在纹理空间中采样点到该像素点pr,c的距离,插值算法的公式是:

s是该像素点到所有采样点的距离之和,实现了权重的归一化。

c、添加波浪效果,波浪效果可以通过使用波浪模板调节上一步生成的水域纹理颜色底图来实现,而且从任何角度进行拼接都不会产生纹理突变的断裂拼接感,添加波浪效果的公式是:

crgb|r,c=ratio*c波浪rgb|r,c+(1-ratio)*c′rgb|r,c

c波浪rgb和c′rgb分别是波浪和上一步水域纹理颜色底图的rgb分量,ratio是波浪rgb成分所占的比例,我们的经验值的是0.2;

d、水域边缘与岸地交接处进行纹理融合处理,水域边缘与岸地交接处进行纹理融合处理可实现水与岸地纹理的自然过渡,消除纹理的拼接感,为了实现这个效果,我们首先需要找到的水与岸地在纹理空间相接线,这个可以通过水与岸地在三维物理空间的相接线计算得到,三维模型空间的相接线到纹理空间相接线的位置转换公式是ti=(xi-boxmin)/d,这个公式我们在上面已经使用过;接下来就需要根据原始模型求出纹理空间中在相接线上及相接线周围的颜色,在三维物理空间中,我们可以求得岸地和岛相交线上及周围点的颜色,然后把它们位置转换到纹理空间,就可以求得纹理空间中在相接线上及相交线周围的颜色,至于采集相接线周围多大范围的颜色,这个需要根据实际效果检验,范围过小融合效果不好,范围过大会造成计算量过大,我们的经验值是在纹理空间宽30个像素;水与岸地相接线纹理融合处理的公式是:

crgb|r,c=ratior,c*c相接线rgb|r,c+(1-ratior,c)*c′rgb|r,c

c′rgb是上一步添加了波浪效果的rgb成分。c相接线rgb是相接线及相接线周围的rgb成分。ratior,c是相接线及相接线周围rgb成分所占比例,它是一个大小在相接线上为1,随着远离相接线向两边逐渐降为0值,而在上一步添加波浪效果的时候这个参数是一个恒定值;

步骤6:逐个tile进行水面几何和纹理的修复,具体的步骤如下;

(1)、通过岸地水岸线和tile边界构建单个tile的水面轮廓;一个tile的岸地水岸线既有闭合的也有不闭合的,对于一条闭合的岸地水岸线,它自身围起来的区域就是一个tile内小型独立的水面轮廓;一条岸地水岸线不闭合,说明这条岸地水岸线所在的水域一定是跨tile的,也就是这个水域被多个tile所分割,同时不闭合的岸地水岸线一定是搭在边界上的,所以通过构建水面轮廓的时候一定要考虑到tile边界,所以把一个tile内的水域轮廓的tile边界部分称为边界水岸线;

(2)、陆地与水面连接处切口的生成和水面碎片的删除;通过辅助水面切割岸地和小岛,并删除辅助水面下面的部分,而切割点就是岸地相交线和岛相交线上的节点,接着利用上一步计算出的水面轮廓,从未选中的相交线中找到位于水面轮廓中的水面碎片相交线,然后删除水面碎片相交线对应的碎片,这些碎片一部分在水面上面,另一部分在水面下面,都需要被删除掉。这一步相当于为下面几何和纹理的修复做清理的准备工作;

(3)、新建水面,并与陆地进行拓扑连接;生成陆地与水面用于连接的切口,并删除水域中央的水面碎片之后,这一步就是给水面打上补丁。首先利用上面求出的水面轮廓线生成一个平面的三角网格,然后把水面三角网和陆地三角网进行拓扑连接。在水面和陆地三角网融合过程中,相同位置的顶点进行合并,这样可以保证它们几何的拓扑连接;

(4)、小岛与新建水面的拓扑连接;小岛对于水面相当于衣服上要打补丁处的原有的花饰,修复好水域不仅要处理好水面,还要复原水面上原有的小岛,处理小岛的步骤为:

首先,计算小岛的独立模型,用户已经选出了小岛的相交线,并且删除了小岛在辅助水面以下的部分,由于上面一步先构建了水面,所以小岛下面还有新建的水面,但是它们并不拓扑连接,要找到小岛的几何结构,先要找到一个高于水面的并且在小岛相交线以内的三角面,然后对它进行区域增长,就可以得到小岛的所有三角面;

然后,用小岛的轮廓切割水面,并删除水面在小岛范围内的部分,想要让小岛和新建的水面进行拓扑连接,必须先在水面上切出一个和小岛轮廓一模一样的洞,小岛的轮廓就是用户选出的岛的相交线,在用相交线切割水面的时候,将三角形一分为二,而且需要把相交线也添加到水面三角网里面去,以保证切口是完整的岛相交线形状;

最后,水面和小岛的拓扑连接,因为小岛是带有纹理的,所以在水面小岛拓扑连接过程中一定要考虑到小岛的纹理,然后水面和小岛在公共边缘相同位置上的点进行合并,变成同一个顶点,这样可以保证他们几何的拓扑连接;

(5)、新建水面的uv展开和纹理贴图,上面已经生成了还原度高的,带波浪效果的,水域边缘与陆地交接处做了纹理融合处理的跨多个tile的水域纹理大图,然后需要首先切割出本tile内的水域纹理,然后将纹理贴到本tile水面模型上去,给水面模型的每个三角面和顶点分别赋上正确的纹理索引和uv;

由于水面是平整的,所以任何两块水域在三维模型空间和纹理空间有相同的比例关系,将整个水域模型在xy平面的起点设定为(x0,y0),一个tile内的某个水面在x和y平面的起始点分别是xmin,xmax和ymin,ymax,则这个tile内水面在整个水域纹理空间的行列起始点就是(xmin-x0)/d,(xmax-y0)/d和(ymin-x0)/d,(ymax-y0)/d,用这个二维矩形切割整个水域纹理大图得到的就是该tile内水面对应的纹理;在一个tile中,一个水面轮廓对应一张水面纹理,所以每个三角面的纹理索引和它所在的水面轮廓序号保持一致。由于水面是一个水平面,所以我们可以直接通过水面轮廓在xy平面的起始点和长宽计算三角面顶点的uv。设水面轮廓在xy平面的起始点是(wxmin,wymin),长宽是width和height,则三角面上任一顶点(x,y)的uv的计算公式是:

u=(x-wxmin)/width;

v=(y-wymin)/height;

通过这种方法,就为每个三角形和顶点赋上了正确的三角形索引和顶点uv。

在步骤3中,为了提高修水的自动化程度,本发明提供了一种根据用户选定的种子相交线自动进行同类型相交线聚类的算法,具体实施过程为:首先,根据用户选定的种子相交线进行同类型相交线聚类,同类型相交线聚类采用先构建相交线之间关系的树状拓扑图,然后在树状拓扑图中搜索包含种子水岸线的最大路径,得到一系列与种子相交线同类型的相交线。想要构建相交线之间关系的树状拓扑图,需要查明任意两个相交线之间是否存在连接关系,相交线之间的连接的情况存在两种情况;

结合附图3,左图是相交线1的尾(终点)和相交线2的头(起点)在两个tile相邻边处相连,右图是相交线1的尾和相交线2的头在两个tile的对角处相连,由于模型相邻tile之间边界存在重叠,且模型也会有微量偏移,所以我们不能采用计算任意两个相交线之间首尾的距离来决定两个相交线之间的连接关系,否则我们无法相对准确的地构建相交线之间关系的树状拓扑图,因为如果距离阈值设置过小,则会错失很多本该连接的相交线,如果距离阈值设置过大,则会造成很多错误的连接;这种算法的好处是,用户只需要少量的操作就可以实现相交线分类的任务;

在本发明中,不仅需要考虑两个相交线首尾的距离,还要判断两个相交线的tile是否前后左右相邻或者对角相邻,并且其中一个相交线的首点与另一个相交线的尾点搭载相交的边或者重叠的对角上,利用以上三个判断条件,一个大的距离阈值也能比较准确的判断两个相交线的连接情况,从而准确地构建相交线之间关系的树状拓扑图,得到相交线之间关系的树状拓扑图之后,从而可以搜寻最长路径,得到与种子相交线同类型的一系列相交线,需要注意的是,考虑到相交线所表达的水域轮廓的真实物理性质,这条最长路径里面不能包含重复的节点,整条路径要么是一个闭合大环,要么是一条长线。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1