基于局部曲率熵和四叉树结构的三维地形曲面优化方法与流程

文档序号:12604536阅读:520来源:国知局
基于局部曲率熵和四叉树结构的三维地形曲面优化方法与流程

本发明涉及一种基于局部曲率熵和四叉树结构的三维地形曲面优化方法,属于三维图形学及三维数字地形建模领域。



背景技术:

地形三维可视化建模及实时表达技术是地理信息科技领域的核心技术之一,也是三维地理信息系统建设的关键和基础技术之一。地形的数字化表达通常采用数字高程模型(DigitalElevationModel,简称DEM),是用一组有序数值阵列形式表示地面高程的一种实体地面模型,是地形高低起伏的数学表达。

DEM根据子域划分的方式可分为两大类:规则格网和不规则三角网。规则格网数据结构简单,存储处理方便,进行格网绘制时快速直接,而且便于运用细节层次(LevelofDetail,简称LOD)模型进行组织调度,可实现大规模地形数据的实时可视化浏览与分析。对应于两种不同的数据结构,地形简化算法主要分为基于四叉树结构的规则格网简化算法和基于不规则三角网的简化算法。前者速度快、组织方便,并且可以与LOD模型结合,实现动态、多细节层次的实时简化、调度和可视化,但简化效果不如后者,并只能针对规则化的DEM数据进行简化;后者的简化效果可达到最优,数据来源可以是任意的散乱点云,但速度却要比前者慢一个甚至几个数量级,而且整个模型只能一次加载,无法实现多细节层次、多尺度的动态调度。然而,随着三维扫描设备在地理信息领域的广泛应用,地形点云数据的来源也更加丰富,数据量的剧增为基于散乱点云的三维地形模型构建和简化提出了更高的要求。如何在散乱数据源的基础上,基于四叉树结构和规则格网实现地形曲面的快速构建、高效简化和实时可视化,是该领域的热点和难点问题。

由于四叉树所具有的层次结构,地形绘制过程中在不同层次细节的地形块之间的拼接处,常常存在细节度较高的面片的顶点不能很好地附着在细节度较低的面片边上的现象,产生空间上的一个距离差,此时便会出现裂缝现象。目前已有多种消除裂缝的方法,比如构建限制性四叉树修补裂缝,增加裙边法修补裂缝,排序法修补裂缝等等,但这些方法比较复杂且难以实现,在全球大地形数据处理中限制了计算机中央处理器(CPU)性能的发挥。

地形模型简化既要充分地压缩数据量,又要保存足够的地形细节信息。最理想的情 况就是让地形变化复杂的位置尽量剖分得更加细致,而对地势平坦的区域则尽可能地简化剖分。那么,评价是否继续细分的依据就显得非常重要。地形的曲率是表征某位置坡度的变化率,也说明了该位置地形的复杂程度。但是,由于曲率只能表征某一点的地形细节信息,敏感度较高。如果直接以曲率作为细分评价标准,会使得地形层次网格之间的过渡具有很大的跳跃性,相邻网格块的细节层次可能相差甚远,尤其是地势平坦的区域容易过度简化,使得简化后的地形曲面出现分布不均匀的现象,造成地形模型浏览过程中的不连续和不完整。



技术实现要素:

为了解决现有技术的不足,本发明提供了一种基于局部曲率熵和四叉树结构的三维地形曲面优化方法,该方法以散乱的、带有地表高程属性点云数据(规则DEM、地表调查点、等高线等)为数据源,用距离反比权重法(IDW法)进行细分网格节点的高程属性计算,以局部曲率熵作为网格细分的测度依据,进行四叉树的构建;充分利用四叉树结构快速遍历的优势,通过判断树上父子节点之间的关系来更新树结构,实现相邻不同细节层次网格之间裂缝的消除,不仅在算法效率上得到保障,而且其消除裂缝的方法也更加合理。通过该方法,将无序的散乱的地形点云进行了LOD多细节层次的规则网格化组织,并且根据树的动态更新实现了相邻不同细节层次网格之间裂缝的消除,为大规模地形数据的实时、多尺度动态调度和可视化表达提供了保障与技术支撑。

本发明为解决其技术问题所采用的技术方案是:提供了一种基于局部曲率熵和四叉树结构的三维地形曲面优化方法,包括以下过程:

(1)执行步骤(1-1)至步骤(1-10)以完成基于散乱地形点云和局部曲率熵的四叉树结构规则格网LOD构建:

(1-1)设置待构建的四叉树的最大深度N和局部曲率熵测度的最小阈值R0;

(1-2)载入带有地表高程属性的地形数据,所述地形数据包括规则格网DEM数据、地表调查点和等高线,将载入的地形数据离散成为空间散乱点云集;

(1-3)用距离反比权重法进行插值,获取空间散乱点云集的最大边界矩形的四个顶点的高程,以这四个顶点构成的节点作为四叉树的根结点Root,让当前结点pNode指针指向根结点Root,从根结点开始进行四叉树构建,则四叉树的每个父亲结点包含4个孩子结点m_pLeft、m_pLeftMid、m_pRightMid和m_pRight;

(1-4)以深度优先的方式依次递归每个结点的四个子结点进行判断,即对于每个结点node,根据该结点内部的节点按边组织,相邻两个节点构成一条边,依次得到 m_LeftLine、m_DownLine、m_RightLine、m_UpLine四条边,每条边的变量存储这条边上的对应节点,所述细分判断包括以下过程:获取当前结点node所在的深度n,更新当前结点指针pNode,判断当前结点node的深度n<N是否成立,若n<N成立则转步骤(1-5),否则转步骤(1-9);

(1-5)获取node对应的四个节点q1、q2、q3和q4,求取中心点p的坐标;

(1-6)根据周围点的信息,求取p点的局部曲率熵R:

(1-7)判断R>=R0是否成立,如果成立,则转步骤(1-8),否则转步骤(1-9);

(1-8)将当前结点node均匀四分,求取9个节点中除去点q1、q2、q3和q4之外5个节点的坐标,用IDW法插值获得对应点的高程值,并将四个子区S1、S2、S3、S4作为当前结点node的孩子结点,按顺序加入四叉树中,然后转步骤(1-4)继续递归调用;所述子区包含四条边m_LeftLine、m_DownLine、m_RightLine和m_UpLine;

(1-9)判断所有子树是否递归完成,如果成立则转步骤(1-10),否则转步骤(1-4);

(1-10)四叉树构建完成,获取四叉树上所有叶子结点的节点信息,构建地形曲面模型并做可视化绘制和渲染;

(2)执行步骤(2-1)至步骤(2-5)以完成基于树更新的不同细节层次网格之间的裂缝消除:

(2-1)获取步骤(1-10)构建完成的四叉树的根结点指针pRoot;

(2-2)第一次更新:从下向上更新父亲结点,对于父亲结点的每一条边,将孩子结点中对应分布在这条边上的所有节点按次序添加到父亲结点的节点列表中,依次处理父亲结点的四条边;

(2-3)第二次更新:从上向下更新非叶子结点,对于当前结点的一条边,判断与该节点邻接的兄弟结点的对应边,将兄弟结点中多出来的节点,对应添加到当前结点的节点列表中;

(2-4)第三次更新:从上向下更新孩子结点,对孩子四个孩子结点的每一条边,对应判断其父亲结点,将父亲结点中多的节点,对应添加到孩子结点对应节点列表中;

(2-5)获取四叉树上所有叶子结点的节点信息,构建地形曲面模型并做可视化绘制和渲染,得到消除裂缝的建模结果。

步骤(1-1)中四叉树的最大深度N的范围为[6,12],局部曲率熵测度的最小阈值 R0的范围为[5,20]。

步骤(1-6)根据周围点的信息,利用以下公式求取p点的局部曲率熵R:

<mrow> <msub> <mi>R</mi> <mi>i</mi> </msub> <mo>=</mo> <mo>-</mo> <msub> <mi>p</mi> <mi>i</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <msub> <mi>p</mi> <mi>i</mi> </msub> <mo>-</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>p</mi> <mi>j</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <msub> <mi>p</mi> <mi>j</mi> </msub> </mrow>

其中,Ri为任意点i处的局部曲率熵,k为p点临近范围内点的个数,临近范围为预设的范围,Pi为点i处的曲率概率分布,其计算公式为:

<mrow> <msub> <mi>P</mi> <mi>i</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>K</mi> <mi>i</mi> </msub> <mrow> <msub> <mi>K</mi> <mi>i</mi> </msub> <mo>+</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>K</mi> <mi>j</mi> </msub> </mrow> </mfrac> </mrow>

Pj为点j处的曲率概率分布,其计算公式为:

<mrow> <msub> <mi>P</mi> <mi>j</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>K</mi> <mi>j</mi> </msub> <mrow> <msub> <mi>K</mi> <mi>j</mi> </msub> <mo>+</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>K</mi> <mi>i</mi> </msub> </mrow> </mfrac> </mrow>

其中,Ki为点i处的曲率,Kj为点i邻域内点j处的曲率,曲率为已知量。

本发明基于其技术方案所具有的有益效果在于:

(1)熵是局部不确定性的量度,用于描述其所提供的信息量。某点的熵值越大,以该点为中心的局部区域的无序程度越高,该点提供的信息量就越大。在曲率的基础上进行求熵运算,可以降低其敏感性,减弱曲率特征无法顾及较大邻域的影响。局部曲率熵特征在一定程度上反映了地形高程的起伏变化,能够较好地代表一定范围地形的复杂程度。某点的曲率熵值越大,代表该点地形变化越复杂,简化时应当尽量保留该数据点;反之,则应进行简化。用局部曲率熵作为网格简化及四叉树节点是否继续往下延伸的依据,既能保证简化程度,又可以尽可能地保留地形细节特征,具有其独特的优势;

(2)本发明以大量散乱地形点云数据为基础,通过IDW插值算法,实现了基于四叉树结构的规则格网LOD多细节层次模型的构建,为地形模型的动态、多尺度调度和实时可视化表达提供了保障;

(3)本发明用局部曲率熵作为网格简化及四叉树节点是否继续往下延伸的判断依据,既能保证简化程度,又可以尽可能地保留地形的细节特征,降低了以曲率作为测度的敏感性,使得生成的地形曲面在不同细节层次之间过渡时具有较好的有连续性和稳定性;

(4)本发明充分利用四叉树结构快速遍历的优势,通过判断树上父、子结点之间的关系来更新树结构,实现裂缝的消除,在算法效率上得到保障,而且是让细节层次更高的结点去更新粗层次的结点,保证了裂缝消除结果的合理性与准确性;

(5)本发明可在各种三维地质信息系统、地理信息系统、地表景观建模与模拟系统等软件中推广应用。

附图说明

图1是本发明的总体流程。

图2是本发明中四叉树结构和多细节层次网格的示意图:图2是(a)为四叉树结构示意图;图2是(b)为多细节层次的网格示意图。

图3是本发明中曲率和曲率熵的对比图:图3(a)为某地形曲面的曲率图;图3(b)为对应的曲率熵示意图。

图4是本发明中裂缝的产生与缝合示意图:图4(a)是裂缝产生前的多细节层次网格;图4(b)为添加高程属性后产生的裂缝;图4(c)为裂缝的缝合过程;图4(d)为裂缝消除后的网格。

图5是本发明中树的更新过程示意图:图5(a)为初始的多细节层次网格;图5(b)为将网格的边按细节层次分离后的显示效果;图5(c)为第一次更新,蓝色的点为孩子结点对父亲结点更新后,父亲结点中添加的节点;图5(d)为第二次更新,黄色的点为根据兄弟结点更新当前结点后添加的节点;图5(e)为第三次更新,红色的点是用父亲结点去更新孩子结点时添加的节点。

图6是本发明中基于四叉树结构的地形曲面建模结果(裂缝消除前):图6(a)为全局和局部曲面填充的可视化效果;图6(b)为对应的网格显示效果。

图7是本发明中裂缝消除后的地形曲面:图7(a)为全局的曲面填充表达;图7(b)为全局的网格表达;图7(c)为局部范围的网格表达。

图8是本发明中地形曲面建模后网格的分布密度与曲率熵分布的对比图:图8(a)为N=8,R0=10时地形曲面的网格分布密度;图8(b)为对应的曲率熵分布情况。

图9是本发明中不同简化程度的建模效果对比。

具体实施方式

下面结合附图和实施例对本发明作进一步说明。

本发明提供了一种基于局部曲率熵和四叉树结构的三维地形曲面优化方法,该方法以散乱的、带有地表高程属性点云数据(规则DEM、地表调查点、等高线等)为数据 源,用IDW法进行细分网格节点的高程属性的插值计算,以局部曲率熵作为网格细分的测度依据,以输入数据的最大边界矩形网格作为四叉树的根结点,根据深度优先的方式进行四叉树的递归判断,对所有符合条件的网格进行四分,并将其作为当前结点的孩子结点,直到所有的符合细分条件的结点全部判断完成,则可得到基于四叉树结构的LOD多细节层次模型;再者,充分利用四叉树结构快速遍历的优势,通过判断树上父、子节点之间的关系来更新树结构,实现相邻不同细节层次网格之间裂缝的消除,不仅在算法效率上得到保障,而且其消除裂缝的方法也更加合理。通过该方法,将无序的散乱的地形点云进行了LOD多细节层次的规则网格化组织,并且根据树的动态更新实现了相邻不同细节层次网格之间裂缝的消除,为大规模地形数据的实时、多尺度动态调度和可视化表达提供了保障与技术支撑。

参照图1,该方法包括以下过程:

(1)执行步骤(1-1)至步骤(1-10)以完成基于散乱地形点云和局部曲率熵的四叉树结构规则格网LOD构建:

(1-1)设置待构建的四叉树的最大深度N和局部曲率熵测度的最小阈值R0;最大深度N的范围为[6,12],局部曲率熵测度的最小阈值R0的范围为[5,20];

(1-2)载入带有地表高程属性的地形数据,所述地形数据包括规则格网DEM数据、地表调查点和等高线,将载入的地形数据离散成为空间散乱点云集;

(1-3)用距离反比权重法进行插值,获取空间散乱点云集的最大边界矩形的四个顶点的高程,以这四个顶点构成的节点作为四叉树的根结点Root,让当前结点pNode指针指向根结点Root,从根结点开始进行四叉树构建,则四叉树的每个父亲结点包含4个孩子结点m_pLeft、m_pLeftMid、m_pRightMid和m_pRight;

(1-4)如图2(a)所示,以深度优先的方式依次递归每个结点的四个子结点进行判断,即对于每个结点node,根据该结点内部的节点按边组织,相邻两个节点构成一条边,依次得到m_LeftLine、m_DownLine、m_RightLine、m_UpLine四条边,每条边的变量存储这条边上的对应节点,如图2(b)所示;所述判断包括以下过程:获取当前结点node所在的深度n,更新当前结点指针pNode,判断当前结点node的深度n<N是否成立,若n<N成立则转步骤(1-5),否则转步骤(1-9);

(1-5)获取node对应的四个节点q1、q2、q3和q4,求取中心点p的坐标;

(1-6)根据周围点的信息,求取p点的局部曲率熵R:具体可利用以下公式求取p 点的局部曲率熵R:

<mrow> <msub> <mi>R</mi> <mi>i</mi> </msub> <mo>=</mo> <mo>-</mo> <msub> <mi>p</mi> <mi>i</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <msub> <mi>p</mi> <mi>i</mi> </msub> <mo>-</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>p</mi> <mi>j</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <msub> <mi>p</mi> <mi>j</mi> </msub> </mrow>

其中,Ri为任意点i处的局部曲率熵,k为p点临近范围内点的个数,临近范围为预设的范围,Pi为点i处的曲率概率分布,其计算公式为:

<mrow> <msub> <mi>P</mi> <mi>i</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>K</mi> <mi>i</mi> </msub> <mrow> <msub> <mi>K</mi> <mi>i</mi> </msub> <mo>+</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>K</mi> <mi>j</mi> </msub> </mrow> </mfrac> </mrow>

Pj为点j处的曲率概率分布,其计算公式为:

<mrow> <msub> <mi>P</mi> <mi>j</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>K</mi> <mi>j</mi> </msub> <mrow> <msub> <mi>K</mi> <mi>j</mi> </msub> <mo>+</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </munderover> <msub> <mi>K</mi> <mi>i</mi> </msub> </mrow> </mfrac> </mrow>

其中,Ki为点i处的曲率,Kj为点i邻域内点j处的曲率。曲率的计算由其它已有软件(如ArcGIS等)完成,然后将曲率栅格图载入本方法中,按要求获取对应位置的曲率,依次求取对应位置的曲率熵,如图3所示为输入的曲率和经过计算获得的曲率熵分布特征的对比图;

(1-7)判断R>=R0是否成立,如果成立,则转步骤(1-8),否则转步骤(1-9);

(1-8)将当前结点node均匀四分,求取9个节点中除去点q1、q2、q3和q4之外5个节点的坐标,用IDW法插值获得对应点的高程值,并将四个子区S1、S2、S3、S4作为当前结点node的孩子结点,按顺序加入四叉树中,然后转步骤(1-4)继续递归调用;所述子区包含四条边m_LeftLine、m_DownLine、m_RightLine和m_UpLine;

(1-9)判断所有子树是否递归完成,如果成立则转步骤(1-10),否则转步骤(1-4);

(1-10)四叉树构建完成,获取四叉树上所有叶子结点的节点信息,构建地形曲面模型并做可视化绘制和渲染,如图6所示,发现相邻不同细节层次的网格之间存在裂缝。

如图4所示,为了消除裂缝,必须在粗层次的边P1P4上添加点P2'、P3',并使其与相邻细节单元的顶点P2、P3重合。为了能实现这一目标,需要对树上较粗层次的网格节点与其它结点做对比,在对应的边上添加点,并更新树上结点中的节点列表。

(2)执行步骤(2-1)至步骤(2-5)以完成基于树更新的不同细节层次网格之间的裂缝消除,如图5所示:

(2-1)获取步骤(1-10)构建完成的四叉树的根结点指针pRoot;

(2-2)第一次更新:从下向上更新父亲结点,对于父亲结点的每一条边,将孩子结点中对应分布在这条边上的所有节点按次序添加到父亲结点的节点列表中,依次处理父亲结点的四条边;

如图5(c)所示,白色小圈○所表示的节点是孩子结点由于其细节层次更深,与父亲结点相比较多出来的节点,通过父、子结点的对比更新,可使父、子结点之间因细节层次不同而产生的裂缝得以消除;

(2-3)在步骤(2-2)的结果基础上进行第二次更新:从上向下更新非叶子结点,利用兄弟结点的邻接边更新当前结点四条边上的对应节点,对于当前结点的一条边,判断与该节点邻接的兄弟结点的对应边,将兄弟结点中多出来的节点,对应添加到当前结点的节点列表中;

如图5(d)所示,⊕所表示的节点是由于相邻兄弟结点之间由于其细节层次不同,而多出来的对应节点,通过同一深度相邻兄弟结点之间的对比更新,可使兄弟结点之间因细节层次不同而产生的裂缝得以消除;

(2-4)第三次更新:从上向下更新孩子结点,因为在第二次更新中,父亲结点可能由于其兄弟结点的影响,加入了新的节点,这将引起其与孩子结点对应位置的节点不一致而存在裂缝,所以,对孩子四个孩子结点的每一条边,对应判断其父亲结点,将父亲结点中多的节点,对应添加到孩子结点对应节点列表中;

如图5(e)所示,●所表示的节点是由于步骤(2-3)中非叶子兄弟结点之间的相互更新,使得父亲结点有了比其孩子结点更多的节点,通过从上到下父亲结点对孩子结点的更新,完成了树的更新,保证了相邻不同细节层次网格对应边上节点的完全一致,从而消除了裂缝。

(2-5)获取四叉树上所有叶子结点的节点信息,如图7所示,构建地形曲面模型并做可视化绘制和渲染,得到消除裂缝的建模结果。

经过以上步骤得到了以地形细节信息为简化依据的四叉树LOD多细节层次模型,并已通过树的更新完成了相邻不同细节层次网格之间的裂缝消除。在此四叉树LOD结构的地形模型基础上,可完成大规模地形曲面的动态调度和可视化表达。

如图8所示为地形曲面建模后网格的分布密度与曲率熵分布的对比图,可以看出本 方法的建模结果在很大程度上保留了地形的细节特征,其网格划分的密度和曲率熵的分布具有很好的一致性,这些说明了本发明的有效性和可靠性。

如图9所示是不同简化程度的建模效果对比,对于固定的最大树深N,随着局部曲率熵测度的最小阈值R0的改变,其对应的地形曲面网格数目、简化程度都随着改变,通过N和R0可灵活控制生成地形曲面的精度。

综上,本发明提供的一种基于局部曲率熵和四叉树结构的三维地形曲面优化方法,以散乱的、带有地表高程属性点云数据为数据源,用距离反比权重法(IDW法)进行细分规则网格节点高程属性的插值计算,以局部曲率熵作为网格细分的测度依据,以输入数据的最大边界矩形网格作为四叉树的根结点,根据深度优先的方式进行四叉树的递归判断,对符合条件的网格进行四分,并将其作为当前结点的孩子结点加入四叉树,直到所有的符合细分条件的结点全部判断完成,则可得到基于四叉树结构的规则格网多细节层次模型(LOD模型);再者,充分利用四叉树结构快速遍历的优势,通过判断树上父、子节点之间的关系来更新树结构,实现相邻不同细节层次网格之间裂缝的消除。通过该方法,将无序的散乱的地形点云进行了多细节层次的规则化组织,并且通过该四叉树的动态更新实现了相邻不同细节层次网格之间裂缝的消除。

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