发明名称 一种交互式三维城市全景地图的自动生成方法
摘要 本发明涉及一种交互式三维城市全景地图的自动生成方法。该方法基于城市形态及格式塔理论,通过建立估计城市空间认知的能量函数偏离项和遮挡项,把道路扩宽、视点提高、建筑位移和建筑高度降低等手段与优化方法结合,利用线性化约束条件的能量函数,实时求解最小化能量函数,从而实现了交互式三维数字城市全景地图的自动生成。该方法提供了一种可视化速度快、城市场景变形小的三维数字城市全景地图的制作方法,在城市导航、空间位置服务等方面具有广阔的应用前景。
申请公布号 CN102663957B 申请公布日期 2016.01.13
申请号 CN201210058801.4 申请日期 2012.03.08
申请人 北京师范大学 发明人 张立强;邓浩;张良
分类号 G06T17/00(2006.01)I;G06T19/20(2011.01)I;G09B29/00(2006.01)I 主分类号 G06T17/00(2006.01)I
代理机构 代理人
主权项 一种交互式三维城市全景地图的自动生成方法,其特征在于,包括如下步骤:步骤一:基于ε距离邻域和β‑骨架规则识别街区内建筑空间分布模式所要构建DT图的结点为建筑足迹(footprint)多边形的重心,结点之间的距离为建筑足迹多边形间的最小距离;先构造结点的Delaunay三角网,从Delaunay三角网内筛选连接边,建立结点的最小生成树MST;下一步,基于ε距离邻域规则,在Delaunay三角网内选择距离小于阈值ε,且满足β<1时,把β‑骨架规则的非MST边加入子图中,得到满足ε距离邻域条件的DT子图;对于DT子图中度为1的结点,在Delaunay三角网中寻找其满足β<1时,β‑骨架规则最短的非MST边,并将该边加入子图中;步骤二:提取城市建筑格式塔聚类设定合理的阈值以找出潜在的格式塔聚类,进而用经训练的支持向量机分类器加以判别;整个建筑的格式塔聚类提取分为2步:(1)确定潜在的建筑格式塔聚类,(2)提取具有格式塔特征的建筑;步骤三:基于光线跟踪的城市感兴趣特征可见性计算利用光线跟踪实现城区道路可见性判断,将一条光线和与其相交的遮挡物作为一个遮挡对;每个遮挡对记录有光线、遮挡物及光线击中点参照于遮挡物重心的相对坐标;对于光线与建筑的相交测试,先判断光线在二维上是否相交,快速排除不相交的建筑,再在三维上判断光线是否与建筑的各个面相交;如有交点,则建筑为遮挡物,取距离参考点最近的交点为击中点,否则建筑不造成遮挡;采用动态的KD树结构加快二维平面上光线跟踪;步骤四:建立城市全景图的约束条件和能量项(1)建立城市全景图的能量函数偏离项为了保证格式塔聚类的共同命运特征,建立街区内格式塔聚类位移约束;对道路形状、道路与建筑冲突进行约束,以保证街区与道路的相对位置,此外,约束建筑高度与视点高度,最后针对漫游时出现的视图抖动与闪烁现象,建立时空一致性约束;(2)建立城市全景图能量函数的遮挡项定义x为包含建筑重心与道路条带顶点的二维位置的向量,h为建筑高度向量;对于一个遮挡对{p<sub>r</sub>,B<sub>i</sub>},参考点p<sub>r</sub>的可见性表示为x的函数;设造成遮挡的建筑B<sub>i</sub>高度为h<sub>i</sub>,足迹重心为v′<sub>Bi</sub>,与其相邻的道路线段为v′<sub>i0</sub>v′<sub>(i+1)0</sub>,则视线在建筑上的击中点为<img file="FSB0000134363120000021.GIF" wi="444" he="87" />t<sub>{pr,Bi}</sub>为p<sub>r</sub>、<img file="FSB0000134363120000022.GIF" wi="60" he="73" />之间的向量,且p<sub>r</sub>由其相邻道路顶点表示p<sub>r</sub>=(1‑s)v<sub>i0</sub>′+sv<sub>(i+1)0</sub>′,0<s<1,有可见性函数的二次形式:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>D</mi><mrow><mo>{</mo><msub><mi>p</mi><mi>r</mi></msub><mo>,</mo><msub><mi>B</mi><mi>i</mi></msub><mo>}</mo></mrow></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>&ap;</mo><msup><msub><mi>I</mi><mi>LOS</mi></msub><mi>T</mi></msup><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>[</mo><mi>H</mi><mrow><mo>(</mo><msub><mi>p</mi><msub><mi>B</mi><mi>i</mi></msub></msub><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>p</mi><mi>r</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>-</mo><msub><mi>h</mi><mi>i</mi></msub><mrow><mo>(</mo><msub><mi>p</mi><mi>v</mi></msub><mo>-</mo><msub><mi>p</mi><mi>r</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>]</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FSB0000134363120000023.GIF" wi="1704" he="109" /></maths>式中p<sub>v</sub>为视点二维位置,H为其高度;考虑所有遮挡对集合O,将(1)式离散化表示为x,h和H的函数(2),使感兴趣道路可见,<img file="FSB0000134363120000024.GIF" wi="1637" he="113" />由此能量函数的遮挡项表示为:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>E</mi><mi>occ</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mo>-</mo><mi>D</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>,</mo></mtd><mtd><mi>D</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>&lt;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn><mo>,</mo></mtd><mtd><mi>D</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FSB0000134363120000025.GIF" wi="1545" he="153" /></maths>步骤五:城市全景图能量函数的最优化求解(1)计算能量函数的最小二乘形式综合各约束,得到最终的能量函数偏离项E<sub>dev</sub>(x,h,H)=(E<sub>shp</sub>(x)+E<sub>rela</sub>(x)+E<sub>ges</sub>(x))+η<sub>1</sub>E<sub>road</sub>(x)+η<sub>2</sub>E<sub>dist</sub>(x) (4)+η<sub>3</sub>(E<sub>h1</sub>(h)+E<sub>h2</sub>(h))+η<sub>4</sub>E<sub>H</sub>(H)+η<sub>5</sub>E<sub>temp</sub>(x,h,H)上述各项都具有正定二次形式,将各项最小二乘形式有:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>E</mi><mi>dev</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>=</mo><mo>|</mo><mo>|</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mi>A</mi><mi>shp</mi></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mi>A</mi><mi>rela</mi></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mi>A</mi><mi>ges</mi></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>1</mn></msub><msub><mi>A</mi><mi>road</mi></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>2</mn></msub><msub><mi>A</mi><mi>dist</mi></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>A</mi><mrow><mi>temp</mi><mn>1</mn></mrow></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>A</mi><mrow><mi>temp</mi><mn>2</mn></mrow></msub></mtd><mtd></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>B</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>B</mi><mrow><mi>h</mi><mn>2</mn></mrow></msub></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><mi>I</mi></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd></mtd><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>4</mn></msub></mtd></mtr><mtr><mtd></mtd><mtd></mtd><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub></mtd></mtr></mtable></mfenced><mfenced open='(' close=')'><mtable><mtr><mtd><mi>x</mi></mtd></mtr><mtr><mtd><mi>h</mi></mtd></mtr><mtr><mtd><mi>H</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mi>b</mi><mi>shp</mi></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mi>rela</mi></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mi>ges</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>1</mn></msub><msub><mi>b</mi><mi>road</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>2</mn></msub><msub><mi>b</mi><mi>dist</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>b</mi><mrow><mi>temp</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>b</mi><mrow><mi>temp</mi><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>q</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>q</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>4</mn></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub></mtd></mtr></mtable></mfenced><msup><mrow><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FSB0000134363120000026.GIF" wi="1525" he="1054" /></maths>其中A<sub>(·)</sub>和B<sub>(·)</sub>分别对应各能量项与二维位置x和建筑高度h高度相关的矩阵,而b<sub>(·)</sub>和q<sub>(·)</sub>则是与对应各能量项与二维位置x和建筑高度h高度相关的向量,而<img file="FSB0000134363120000031.GIF" wi="74" he="80" />表示原权重系数η<sub>(·)</sub>的平方根;(2)数值求解1)能量函数的线性化对于E<sub>occ</sub>(x,h,H),求解能最小化E<sub>occ</sub>(x,h,H)消除遮挡,约束为令各遮挡对的可见性函数<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>D</mi><mrow><mo>{</mo><msub><mi>p</mi><mi>r</mi></msub><mo>,</mo><msub><mi>B</mi><mi>i</mi></msub><mo>}</mo></mrow></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>h</mi><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>&GreaterEqual;</mo><mn>0</mn><mo>,</mo></mrow>]]></math><img file="FSB0000134363120000032.GIF" wi="446" he="92" /></maths>有:<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mover><mi>x</mi><mo>&OverBar;</mo></mover><mo>=</mo><mi>arg</mi><munder><mi>min</mi><mrow><mover><mi>x</mi><mo>&OverBar;</mo></mover><mo>&Element;</mo><mi>P</mi></mrow></munder><msup><mover><mi>x</mi><mo>&OverBar;</mo></mover><mi>T</mi></msup><mi>H</mi><mover><mi>x</mi><mo>&OverBar;</mo></mover><mo>-</mo><mn>2</mn><msup><mover><mi>x</mi><mo>&OverBar;</mo></mover><mi>T</mi></msup><msup><mover><mi>A</mi><mo>&OverBar;</mo></mover><mi>T</mi></msup><mi>d</mi><mo>+</mo><msup><mi>d</mi><mi>T</mi></msup><mi>d</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math><img file="FSB0000134363120000033.GIF" wi="1254" he="125" /></maths><img file="FSB0000134363120000034.GIF" wi="1136" he="114" />(6)式线性化后<img file="FSB0000134363120000035.GIF" wi="850" he="168" /><maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><mi>s</mi><mo>.</mo><mi>t</mi><mo>.</mo><mi>G</mi><mfenced open='(' close=')'><mtable><mtr><mtd><mi>x</mi></mtd></mtr><mtr><mtd><mi>h</mi></mtd></mtr></mtable></mfenced><mo>&GreaterEqual;</mo><mi>c</mi></mrow>]]></math><img file="FSB0000134363120000036.GIF" wi="661" he="149" /></maths><maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><mi>A</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mi>A</mi><mi>shp</mi></msub></mtd></mtr><mtr><mtd><msub><mi>A</mi><mi>rela</mi></msub></mtd></mtr><mtr><mtd><msub><mi>A</mi><mi>ges</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>1</mn></msub><msub><mi>A</mi><mi>road</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>2</mn></msub><msub><mi>A</mi><mi>dist</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>A</mi><mrow><mi>temp</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>A</mi><mrow><mi>temp</mi><mn>2</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>,</mo><mi>b</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mi>b</mi><mi>shp</mi></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mi>rela</mi></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mi>ges</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>1</mn></msub><msub><mi>b</mi><mi>road</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>2</mn></msub><msub><mi>b</mi><mi>dist</mi></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>b</mi><mrow><mi>temp</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><msub><mi>b</mi><mrow><mi>temp</mi><mn>2</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>,</mo><mi>B</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>B</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>B</mi><mrow><mi>h</mi><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>5</mn></msub><mi>I</mi></mtd></mtr></mtable></mfenced><mo>,</mo><mi>q</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>q</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>3</mn></msub><msub><mi>q</mi><mrow><mi>h</mi><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mover><mi>&eta;</mi><mo>~</mo></mover><mn>4</mn></msub></mtd></mtr></mtable></mfenced><mo>.</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FSB0000134363120000037.GIF" wi="1353" he="591" /></maths>2)用Kalman滤波方法实现视点高度的平滑变化为了满足视点的时间一致性,使用Kalman滤波方法令视点高度平滑变化。
地址 100875 北京市海淀区新街口外大街19号科技处