一种基于单张图片的建筑物俯视轮廓的快速提取方法
技术领域
本发明涉及计算机视觉领域,尤其涉及一种基于单张图片的建筑物俯视轮廓的快速提取方法。
背景技术
三维重构在计算机视觉领域一直以来是个被深入研究但依然还存在很多未解问题的话题。三维重构在各种应用场合、生活场景中都起到了重要的作用,例如机器人的视觉导航、城市三维地图的重建等。从非俯视图片中提取建筑物顶部轮廓在某种程度上可以视为三维重构的子问题。现有的某些基于多张图片或者视频(等价于多张图片)的三维重构的技术方案是利用空间几何关系的约束(例如三角定位法)来估算图片里每个特征点的深度来进行三维重构。而基于单张图片的三维重构往往需要复杂的机器学习或者基于一些假设的求解线性规划的方法。其中一种方法认为大多数三维场景可以被分割为许多小块的近似平面,因此输入一张图片后,它先用超像素分割算法把图片里的三维场景分割为许多近似平面的超像素,然后对于每个超像素平面,它试图推测其位置和朝向。对于人们来讲,超像素的位置信息可以从不同的视觉深度线索来判断,比如草坪的材质从近处看和从远处看就不太一样;绿色的部分更可能是地上的草;蓝色的部分更可能是天空等等。因此文中通过有指导学习的方法先事学习这些视觉线索和不同深度之间的关系。具体的学习算法采用了马尔科夫条件随机场,这样就可以考虑邻近超像素平面之间相对深度的约束。例如两块相邻的图块更可能是同一个深度或者甚至是共平面的,而不是相距很远的。然后再根据事先学习好的知识推断图片中每个超像素块的三维关系。但是,这种方法的计算量大,常常需要较大的时延来计算出结果,且精度低,需要事先进行有指导学习。
发明内容
本发明的目的在于通过一种基于单张图片的建筑物俯视轮廓的快速提取方法,来解决以上背景技术部分提到的问题。
为达此目的,本发明采用以下技术方案:
一种基于单张图片的建筑物俯视轮廓的快速提取方法,假设图片中目标建筑为最高建筑,且图片里的场景符合曼哈顿世界假设,该方法步骤如下:
A、利用线段检测算法从图片中检测出所有线段;
B、从图片顶部开始,查找建筑物上最高的线段即目标建筑顶部轮廓的线段,并选取找到的第一根线段的端点作为根节点;
C、依据线段相对水平面上两个消点的位置,将从所述根节点起查找出的所有线段分为两类;
D、根据步骤C中的两类线段生成两条新线段,其中,所述两条新线段的方向为每类线段的平均方向,两条新线段的长度为每类线段中最长线段的长度;
E、把所述两个新线段链接到根节点上,并将所述两个新线段的另一个端点作为新的根节点,重新执行步骤C,开始重复添加新的线段,直至从所述新的根节点起再也找不到新的线段,从而得到所述目标建筑顶部轮廓线段的链表;
F、根据线段所属消点的类型以及线段的朝向校正它们之间的夹角,获得目标建筑物的俯视轮廓。
特别地,所述步骤F中根据线段所属消点的类型以及线段的朝向校正它们之间的夹角,具体包括:
根据线段所属消点的类型以及线段的朝向校正它们之间的夹角,计算公式如下:
其中,wi分别是第i根线段和第i+1根线段矫正之前和矫正之后的夹角,vi是第i根线段所属消点的类型,对于每次夹角的矫正都计算出一个相应的旋转矩阵Ri,当计算完所有夹角矫正的旋转矩阵后,顺序地把每根线段乘上相应的旋转矩阵,即对于第i根线段,它的旋转矩阵是
本发明提出的基于单张图片的建筑物俯视轮廓的快速提取方法无需事先进行机器学习或者基于多张图片的三维重构,仅通过单张图片就可以提取出图片内目标建筑物的俯视轮廓,在不失准确度的情况下,极大地提高了提取的速度。
附图说明
图1为本发明实施例提供的基于单张图片的建筑物俯视轮廓的快速提取方法流程图;
图2a、图2b、图2c分别为本发明实施例提供的示例图片一的原始图像、整体轮廓及目标建筑的俯视轮廓;
图3a、图3b、图3c分别为本发明实施例提供的示例图片二的原始图像、整体轮廓及目标建筑的俯视轮廓;
图4a、图4b、图4c分别为本发明实施例提供的示例图片三的原始图像、整体轮廓及目标建筑的俯视轮廓。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
首先,对针孔相机模型Pinhole Camera Model)进行简要说明。在针孔相机模型中,相机的孔径被视为一个点并且没有透镜用于聚焦光线。通过这种方式,可以忽略由透镜以及固定大小的孔径造成相片中未对准焦的模糊或者几何扭曲。在针孔相机模型中,现实中平行的线段,比如建筑物或者窗户的边缘,被投射到相片上会汇聚为一个点,简称消点(Vanishing Points)。
其次,对曼哈顿世界假设进行简要说明。大部分人造的场景都符合“曼哈顿世界假设”,在曼哈顿世界假设中,现实中所有的线条都平行于三个相互交正的方向。想象一下纽约曼哈顿区的建筑,高耸而又方正的大厦边缘、其窗户边缘和其楼体上的线条,基本上属于三个方向之一:在水平面上互相垂直的X、Y两个方向,以及垂直于水平面的Z方向。
基于曼哈顿世界假设,可以把图片里的所有线段比如建筑物的边缘、窗户的边缘等分为三类,每一类在远处都会汇聚成一个消点即消点,之后会根据消点的位置以及线段的所属消点种类来提取目标建筑的顶部轮廓。基本过程如下:首先计算消点的位置。采用了一个已有的技术来估算三个互相正交方向上的消点。具体来讲,该技术把一堆线段作为输入,并通过不断地迭代来估算消点,每次迭代我们都随机假设一个消点,然后每个线段要么指向那个消点要么不属于那个消点,当找到一组更好的消点的可能性低于某个阈值时则迭代停止。其次,在求出三个消点后,再根据图片中的线段朝向哪个消点把这些线段分为三类。需要说明的是,由于图片里的线段是在相机坐标空间下的,为了计算图片里这些线段在世界坐标空间下的位置,需要得到相机矩阵K,K由相机的内部和外部的参数共同决定:
其中f是相机的等效焦距,u和v是平移参数,在K中省去了由于透视转换造成的扭曲参数。而通过之前估算出的三个消点位置可以得到一个矩阵Q,也就是KKT,通过对Q的Cholesky分解可以算出K,根据K从而反推出图片中线段在世界坐标空间下的空间位置。
接下来具体说明本发明基于单张图片的建筑物俯视轮廓的快速提取方法的过程。本发明依据了两个假设,其一是假设图片中目标建筑为最高建筑,因此所需要提取的目标建筑的顶部轮廓的线段应该是图片里最高的线段。其二是假设图片里的场景符合曼哈顿世界假设,因此图片里的不同的线段在现实空间中要么互相平行、要么互相垂直。
如图1所示,基于上述两点假设,本实施例中基于单张图片的建筑物俯视轮廓的快速提取方法具体包括如下步骤:
S101、利用线段检测算法从图片中检测出所有线段。线段检测算法的实现方法有多种,在此不再赘述。
S102、从图片顶部开始,查找建筑物上最高的线段即目标建筑顶部轮廓的线段,并选取找到的第一根线段的端点作为根节点。
S103、依据线段相对水平面上两个消点的位置,将从所述根节点起查找出的所有线段分为两类。从根节点起,找到附近一定范围内足够数量的线段,并依据它们相对水平面上两个消点的位置把这些线段分为两类。
S104、根据步骤S103中的两类线段生成两条新线段。所述两条新线段的方向为每类线段的平均方向,两条新线段的长度为每类线段中最长线段的长度。
S105、把所述两个新线段链接到根节点上,并将所述两个新线段的另一个端点作为新的根节点,重新执行步骤S103,开始重复添加新的线段,直至从所述新的根节点起,再也找不到新的线段,从而得到所述目标建筑顶部轮廓线段的链表。链表的格式为:以线段为AB、BC为例,AB线段连着其一个B端点,该B端点连着下一根线段BC,BC线段继续连着其另一个端点C……依次类推。其中,所述步骤S103和步骤S104的目的为了排除图片噪点的干扰。
S106、根据线段所属消点的类型以及线段的朝向校正它们之间的夹角,获得目标建筑物的俯视轮廓。根据线段所属消点的类型以及线段的朝向校正它们之间的夹角,计算公式如下:
其中,wi分别是第i根线段和第i+1根线段矫正之前和矫正之后的夹角,vi是第i根线段所属消点的类型,对于每次夹角的矫正都计算出一个相应的旋转矩阵Ri,当计算完所有夹角矫正的旋转矩阵后,顺序地把每根线段乘上相应的旋转矩阵,即对于第i根线段,它的旋转矩阵是
本实施例中基于单张图片的建筑物俯视轮廓的快速提取方法已经在多个城市(北京、上海、无锡、香港)的多个地点拍摄了五十多张建筑物图片用于实验,而且如图2a、图2b、图2c,图3a、图3b、图3c及图4a、图4b、图4c所示,提取出的建筑物俯视轮廓非常准确。
本发明的技术方案无需事先进行机器学习或者基于多张图片的三维重构,仅通过单张图片就可以提取出图片内目标建筑物的俯视轮廓,在不失准确度的情况下,极大地提高了提取的速度。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。