技术领域本发明属于计算机视觉,人工智能,自动化等领域,涉及大量图片在三维场景中的视点标定方法,更具体的是,在少量交互下,对同一场景大量图片进行相机自动定标的方法。
背景技术:
随着互联网和相机技术的不断发展,人们越来越习惯于拍摄照片并分享到网络上。常见的社交网站Facebook、Twitter、人人网、新浪微博等,每天都有大量的用户上传所拍摄的照片。除此之外,还有一些摄影爱好者图片分享网站,每天也有大量图片上传,例如Flickr、网易Lofter等。进入大数据时代,基于照片的数据分析才刚刚开始。很多数据分析任务,都需要感知图片在场景中的位置。目前情况下,某些摄录设备会自动在照片上加上GPS(GlobalPositioningSystem)信息,例如iPhone、单反相机。不过互联网上更常见的情况是图片中不携带GPS信息。于是,确定每张图片在场景中的位置是一个热切的需求。常见的单张图片定标方法,是在网格三维模型和图片上标记一系列的对应点,据此采用直接线性变换的方法(DirectLinearTransformation-DLT)确定该图片在网格三维模型下的相机内外参数。如果同一场景有大量图片需要标定,则采用该方案代价很高。过于高昂的代价,使得一些数据分析任务根本不能进行。
技术实现要素:
发明目的:本发明所要解决的技术问题是针对现有技术领域的空白,提供一种对同一场景下大量图片的自动定标方法,给定某个场景的大量图片和网格三维模型情况下,用户仅需要极少量的交互即可得到每张照片的拍摄位置和焦距。技术方案:本发明公开了大量图片在三维场景中的视点标定方法,其特点在于仅需要少量的交互即可确定大量图片和网格三维模型之间的空间位置关系,并提出了一种算法自动地确定每张图片拍摄时所在位置以及焦距信息,其特征在于,包括以下步骤:步骤1,数据准备:选定一个场景,例如凯旋门、巴黎圣母院、自由女神等,获取其相关的摄影图片及对应的网格三维模型;步骤2,图片之间的自标定:对图片应用SfM(StructurefromMotion,运动中探知结构)算法,得到场景的部分点云三维模型,并推断出每张摄影图片在该点云三维模型下的相机内外参数;步骤3,校准点云三维模型和网格三维模型:网格三维模型来源于互联网素材库,与步骤4求得的网格三维模型会有一定差异。在此标定6个以上的对应点后,使用数值优化的方法求解两个模型之间的变换;步骤4,确定摄影图片在网格三维模型下的相机内外参数:利用校准点云三维模型和网格三维模型变换的传递性质,求得摄影图片在网格三维模型下的拍摄参数;步骤5,渲染和评价:经过步骤4得到了一系列相机内外参数,将每对拍摄参数分别应用于网格三维模型上进行渲染,生成结果图片,比较生成的结果图片和原摄影图片视点是否一致,并评价算法效果的优劣。其中,步骤1中包括以下步骤:步骤1-1,选定一个场景,例如:凯旋门、巴黎圣母院、自由女神等,从互联网上使用爬虫获取该场景一定量(一般300张以上)的摄影图片;步骤1-2,获取该场景的网格三维模型,可以从3DWarehouse上搜索并下载。一律使用3DSMax导出为WavefrontOBJ格式保存。步骤2中,图片之间的自标定是指在所有图片上提取特征,并使用特征匹配的方法寻找图片之间的关系,建立并解决优化问题得到场景的点云三维模型,以及各张图片在点云三维模型下的相机内外参数,包括以下步骤:步骤2-1,对获取的每张摄影图片使用SIFT算法(Scale-invariantfeaturetransform,尺度不变特征转化)提取特征点,每个特征点可以表示为一个128维的特征向量fea=(α1,α2,α3,……,α128),点i和点k对应特征向量feai和feak,它们之间的距离distik定义为distik=Σj(αij-αkj)2]]>其中αij表示特征向量feai的第j个分量,αkj表示特征向量feak的第j个分量,该特征向量用于检测两幅图像之间是否有匹配关系;步骤2-2,检测两幅摄影图片之间是否有匹配关系:计算每张图片的SIFT特征点,每张图片的每个特征点都由128维的向量来描述,通过特征向量来计算不同图片中特征点之间的距离来确定这两张图片之间是否有匹配关系;每一张摄影图片i都对应一个相机,一个相机的参数有7个参数来描述,分别是具有三个分量的旋转向量Θi=[θi1θi2θi3],一个具有三个分量的平移向量ti=[ti1ti2ti3]和焦距fi;如果两幅摄影图片中有相同的点p,则这个点p和两个相机的中心位置O1以及O2是共面的,因此得到极线约束uiTFijuj=0,其中参数ui和uj分别存放着点p在摄影图片i中的坐标位置和点p在摄影图片j中的坐标位置,Fij为摄影图片i和图片j之间构成的基础矩阵,对任意两幅摄影图片使用RANSAC方法对极线约束求出基础矩阵,由此基础矩阵计算出两幅摄影图片之间检测出的SIFT特征点相对应的个数ninliers,nmatch表示一般情况下应该匹配的特征点的个数,inliers表示通过基础矩阵验证之后的SIFT特征匹配的特征点,match则表示一般情况下应该匹配的SIFT特征点,当ninliers>nmatch,则判定这两幅摄影图片之间有匹配关系,nmatch的取值为常量;步骤2-3,从所有匹配摄影图片中的SIFT特征点匹配最多的两幅摄影图片开始一个一个地加入相机,每一个特征匹配的联通部分定义了一个三维点Xj,误差函数e如下式所示定义为投影的3D点和检测的特征点之间的平方和:e=∑i∈I∑j∈X(i)f(rij)2,其中I是所有摄影图片的集合,X(i)是投影到摄影图片i上的三维点的集合,函数f(rij)是一个鲁棒性误差函数,rij是检测出来的摄影图片i和摄影图片j之间互相匹配的特征点的位置和投影的三维点之间的差值,如下式所示:rij=mij-uij,其中mij是检测的特征点的位置,uij是三维点Xj在摄影图片i上的投影点,通过下式计算:uij=Ki(RiXj+ti),其中,Ki是摄影图片i对应的相机的投影矩阵,Ri是图片i对应的旋转矩阵,ti为图片i对应的平移向量,使用莱文贝格-马夸特算法来解决这个非线性的最小平方问题,每一次的迭代都具有如下形式:Φ=(JTJ+σ2Cprior-1)-1JTr,]]>其中Φ=[Θ,X]是由相机参数Θ和结构化参数三维点坐标X所组成的向量,r是向量剩余值,J=δr/δΦ,J是一个M×N的雅克比矩阵,M是测量数据的数量即检测数的SIFT特征点数量的2倍,N=nΘ+nX,nΘ表示相机参数的数量,nX表示结构参数三维点的数量,Cprior为一个先验的协方差矩阵,直接求出Φ,得出每个摄影图片对应的相机参数;步骤2-4,通过摄影图片对应的相机参数,恢复出点云三维模型:选取其中的一个相机作为标准的坐标系,通过相机参数得到特征点的平面坐标,从而恢复出点云三维模型。真实3D场景中的点会在相机中心到对应图片中点的射线上,当再加入一个有相同特征点的相机时,就有了两条射线,而这两条射线的交点就是3D场景中的真实点的位置。步骤3中,校准点云三维模型和网格三维模型,是指在两个模型上标定6个或以上的对应点,求得两个不同模型之间的变换关系,包括以下步骤:步骤3-1,使用程序同时载入该场景的点云三维模型和网格三维模型;步骤3-2,在点云三维模型和网格三维模型上分别拾取n个对应点,n≥6,并得到这些点在各自模型中的坐标表示,记yk为第kk个点在点云三维模型中的坐标,1≤k≤n,记xk为第k个点在网格三维模型中的坐标;步骤3-3,将拾取的点坐标作为输入,推导变换参数和已知点对坐标之间的关系:yk=cRxk+t,其中,i是对应点的下标,c、R和t是三个未知的参数,c表示点云三维模型和网格三维模型之间的尺度变换参数,为一个实数;R表示旋转变换,是一个3x3的实数矩阵;t表示平移变换,是一个三维的实数向量;步骤3-4,将点对坐标关系转换为一个二阶优化问题:minc,R,tΣ||yk-(cRxk+t)||2,]]>上式表示通过找到合适的参数c,R,t,使得经过公式变换后的点坐标与实际点坐标之间误差的平方和最小;步骤3-5,将优化问题转换为数值优化库-Levmar中的形式,并使用莱文贝格-马夸特(Levenberg-Marquardt)方法求解。根据最小化目标反复迭代,求得c,R,t这三个参数。步骤4中,通过变换的传递,得到每张摄影图片在网格三维模型下的相机内外参数,包括以下步骤:步骤4-1,根据步骤3-5得到的三个参数,将任何一个在网格三维模型下的点坐标x,在点云三维模型下对应的坐标y为:y=cRx+t,步骤4-2,假设一张摄影图片在点云三维模型下的外参数为(R′,t′),其中,R′表示相机的旋转矩阵,为一个3x3的正交矩阵;t′为相机的平移向量,是一个3维向量。(R′,t′)即构成了拍摄图片时相机的外参数,则点云坐标系下任一点y在相机坐标系下的坐标y′表示为:y′=R′y+t′;步骤4-3,使用以下公式得到网格三维模型到该相机坐标系的坐标变换:y′=R′y+t′=R′(cRx+t)+t′=cR′Rx+(R′t+t′);步骤4-4,在网格三维模型下,将该摄影图片视点的外参数表示为(cR′R,R′t+t′),内参数与步骤2求出的内参数保持一致,得到外参数中的相机拍摄的视点和在内参数中的相机焦距信息。步骤5中,使用步骤4得到的相机参数,渲染网格三维模型从而便于评价,包括以下步骤:步骤5-1,对每张摄影图片,使用OpenGL(开源图形库)渲染网格三维模型,其中,以步骤4得到的相机外参数作为渲染时的“模型-相机变换”;以步骤2得到的相机内参数作为渲染时的“投影变换”。渲染的结果以PNG图片格式存储;步骤5-2,比较原图和对应的渲染结果,模型渲染结果与原图愈一致,则表示相机标定的效果愈精准。相对于查看恢复出的相机内外参数数据,浏览模型渲染图用户能够更简单地评价恢复得到视点的正确性。有益效果:本发明的显著优点是:(1)本发明提出的大量图片在三维场景中的视点标定方法在一定程度上弥补了该领域的空白,解决了传统单独标定每张图片的方法效率低下的问题;(2)本发明提出的自动标定算法具有一般性,对常见单建筑场景均适用;(3)本发明提出的自动标定方法准确率高,大部分情况下恢复出的视点与原视点一致。附图说明图1为本发明方法的基本流程图。图2为凯旋门的摄影作品,作为欲标定的图片集。图3为凯旋门的网格三维模型。图4为生成的点云三维模型。图5为三维模型的校准过程示例。图6为算法最终的可视化结果。具体实施方式下面结合附图和具体实施方式对本发明做更进一步的具体说明。本方法的流程图如图1所示,分为五大过程,首先是准备需要标定的摄影图片,以及用于代表场景的网格三维模型;其次是在图片上提取特征并利用图片相关关系,恢复出部分的点云三维模型;之后建立优化目标,确定网格三维模型到点云三维模型的变换;然后推导出每张图片在网格三维模型下的相机内外参数;最后使用得到的相机内外参数,渲染网格三维模型到图片文件,比较视点恢复的效果。具体的说,如图1所示,本发明公开了一种大量图片在三维场景中的视点标定方法,主要包括以下几个步骤:步骤1,数据准备:选定一个场景,例如凯旋门、巴黎圣母院、自由女神等,获取好其相关的摄影图片及对应的网格三维模型;步骤2,图片之间的自标定:对图片应用SfM算法,得到场景的部分点云三维模型,并推断出每张摄影图片在该点云三维模型下的相机内外参数;步骤3,校准点云三维模型和网格三维模型:网格三维模型来源于互联网素材库,与步骤4求得的网格三维模型会有一定差异。在此标定6个以上的对应点后,使用数值优化的方法求解两个模型之间的变换;步骤4,确定摄影图片在网格三维模型下的相机内外参数:利用校准点云三维模型和网格三维模型变换的传递性质,求得摄影图片在网格三维模型下的拍摄参数;步骤5,渲染和评价:经过步骤4得到了一系列相机内外参数,将每对拍摄参数分别应用于网格三维模型上进行渲染,生成结果图片,比较生成的结果图片和原摄影图片视点是否一致,并评价算法效果的优劣。其中,步骤1中包括以下步骤:步骤1-1,选定一个场景,例如:凯旋门、巴黎圣母院、自由女神等,从互联网上使用爬虫获取该场景300张以上的摄影图片;步骤1-2,获取该场景的网格三维模型,可以从3DWarehouse上搜索并下载。一律使用3DSMax导出为WavefrontOBJ格式保存。步骤2中,图片之间的自标定是指在所有图片上提取特征,并使用特征匹配的方法寻找图片之间的关系,建立并解决优化问题得到场景的点云三维模型,以及各张图片在点云三维模型下的相机内外参数,包括以下步骤:步骤2-1,对获取的每张摄影图片使用SIFT算法(Scale-invariantfeaturetransform,尺度不变特征转化)提取特征点,每个特征点可以表示为一个128维的特征向量fea=(α1,α2,α3,……,α128),点i和点k对应特征向量feai和feak,它们之间的距离distik定义为distik=Σj(αij-αkj)2]]>其中αij表示特征向量feai的第j个分量,αkj表示特征向量feak的第j个分量,该特征向量用于检测两幅图像之间是否有匹配关系,;步骤2-2,检测两幅摄影图片之间是否有匹配关系:计算每张图片的SIFT特征点,每张图片的每个特征点都由128维的向量来描述,通过特征向量来计算不同图片中特征点之间的距离来确定这两张图片之间是否有匹配关系;每一张摄影图片i都对应一个相机,一个相机的参数有7个参数来描述,分别是具有三个分量的旋转向量Θi=[θi1θi2θi3],一个具有三个分量的平移向量ti=[ti1ti2ti3]和焦距fi;如果两幅摄影图片中有相同的点p,则这个点p和两个相机的中心位置O1以及O2是共面的,因此得到极线约束uiTFijuj=0,其中参数ui和uj分别存放着点p在摄影图片i中的坐标位置和点p在摄影图片j中的坐标位置,Fij为摄影图片i和图片j之间构成的基础矩阵,对任意两幅摄影图片使用RANSAC方法对极线约束求出基础矩阵,由此基础矩阵计算出两幅摄影图片之间检测出的SIFT特征点相对应的个数ninliers,当ninliers>nmatch,nmatch,表示一般情况下应该匹配的特征点的个数,inliers表示通过基础矩阵验证之后的SIFT特征匹配的特征点,match则表示一般情况下应该匹配的SIFT特征点,则判定这两幅摄影图片之间有匹配关系,nmatch的取值为常量;步骤2-3,从所有匹配摄影图片中的SIFT特征点匹配最多的两幅摄影图片开始一个一个地加入相机,每一个特征匹配的联通部分定义了一个三维点Xj,误差函数e如下式所示定义为投影的3D点和检测的特征点之间的平方和:e=∑i∈I∑j∈X(i)f(rij)2,其中I是所有摄影图片的集合,X(i)是投影到摄影图片i上的三维点的集合,这里的函数f(rij)是一个鲁棒性误差函数,rij是检测出来的摄影图片i和摄影图片j之间互相匹配的特征点的位置和投影的三维点之间的差值,如下式所示:rij=mij-uij,其中mij是检测的特征点的位置,uij是点Xj在摄影图片i上的投影点,通过下式计算:uij=Ki(RiXj+ti),其中,Ki是摄影图片i对应的相机i的投影矩阵,Ri是图片i对应的旋转矩阵,ti为图片i对应的平移向量,使用莱文贝格-马夸特算法来解决这个非线性的最小平方问题,每一次的迭代都具有如下形式:Φ=(JTJ+σ2Cprior-1)-1JTr,]]>其中Φ=[Θ,X]是由相机参数Θ和结构化参数三维点坐标X所组成的向量,r是向量剩余值,J=δr/δΦ,J是一个M×N的雅克比矩阵,M是测量数据的数量即检测数的SIFT特征点数量的2倍,N=nΘ+nX,nΘ表示相机参数的数量,nX表示结构参数三维点的数量,Cprior为一个先验的协方差矩阵,直接求出Φ,得出每个摄影图片对应的相机参数;步骤2-4,通过摄影图片对应的相机参数,恢复出点云三维模型:选取其中的一个相机作为标准的坐标系,通过相机参数得到特征点的平面坐标,真实3D场景中的点会在相机中心到对应图片中点的射线上,当我们再加入一个有相同特征点的相机时,我们就有了两条射线,而这两条射线的交点就是3D场景中的真实点的位置。步骤3中,校准点云三维模型和网格三维模型,是指在两个模型上标定6个或以上的对应点,求得两个不同模型之间的变换关系,包括以下步骤:步骤3-1,使用程序同时载入该场景的点云三维模型和网格三维模型;步骤3-2,在点云三维模型和网格三维模型上分别拾取n(n≥6)个对应点,并得到这些点在各自模型中的坐标表示,记yk为第k(1≤k≤n)个点在点云三维模型中的坐标,记xk为第k个点在网格三维模型中的坐标;步骤3-3,将拾取的点坐标作为输入,推导变换参数和已知点对坐标之间的关系:yk=cRxk+t,其中,k是对应点的下标,c、R和t是三个未知的参数,c表示点云三维模型和网格三维模型之间的尺度变换参数,为一个实数;R表示旋转变换,是一个3x3的实数矩阵;t表示平移变换,是一个三维的实数向量;步骤3-4,将点对坐标关系转换为一个二阶优化问题:minc,R,tΣ||yk-(cRxk+t)||2,]]>上式表示通过找到合适的参数c,R,t,使得经过公式变换后的点坐标与实际点坐标之间误差的平方和最小;步骤3-5,将优化问题转换为数值优化库-Levmar中的形式,并使用莱文贝格-马夸特(Levenberg-Marquardt)方法求解。根据最小化目标反复迭代,求得c,R,t这三个参数。步骤4中,通过变换的传递,得到每张摄影图片在网格三维模型下的相机内外参数,包括以下步骤:步骤4-1,根据步骤3-5得到的三个参数,将任何一个在网格三维模型下的点坐标x,在点云三维模型下对应的坐标y为:y=cRx+t,步骤4-2,假设一张摄影图片在点云三维模型下的外参数为(R′,t′),其中,R′表示相机的旋转矩阵,为一个3x3的正交矩阵;t′为相机的平移向量,是一个3维向量。(R′,t′)即构成了拍摄图片时相机的外参数,则点云坐标系下任一点y在相机坐标系下的坐标y′表示为:y′=R′y+t′;步骤4-3,替换步骤4-2公式中的变量y,得到网格三维模型到该相机坐标系的坐标变换:y′=R′y+t′=R′(cRx+t)+t′=cR′Rx+(R′t+t′);步骤4-4,在网格三维模型下,将该摄影图片视点的外参数表示为(cR′R,R′t+t′),内参数与步骤2求出的内参数保持一致,等价于得到了蕴含在外参数中的相机拍摄的视点和蕴含在内参数中的相机焦距信息;步骤5中,使用步骤4得到的相机参数,渲染网格三维模型从而便于评价,包括以下步骤:步骤5-1,对每张摄影图片,使用OpenGL(一种开源图形库)渲染网格三维模型,其中,以步骤4得到的相机外参数作为渲染时的“模型-相机变换”;以步骤2得到的相机内参数作为渲染时的“投影变换”。渲染的结果以PNG图片格式存储;步骤5-2,比较原图和对应的渲染结果,模型渲染结果与原图愈一致,则表示相机标定的效果愈精准。相对于查看恢复出的相机内外参数数据,浏览模型渲染图用户能够更简单地评价恢复得到视点的正确性。实施例本实施例的实验硬件环境是:Intel(R)Core(R)i5-2300CPU2.8GHz,10GB内存,NVIDIAGTX550显卡,软件环境是MicrosoftVisualStudio2013、QtCreator3.3,MicrosoftWindows8Professional和Matlab2012a。测试样例来自网络上公开的图片。步骤1,数据准备:选定一个场景,例如凯旋门、巴黎圣母院、自由女神等,准备好其相关的摄影图片,及对应的网格三维模型。此处选择凯旋门模型作为演示,图2a和图2b(图中文字与本发明内容无关)是需要定标的图片,图3是凯旋门的网格三维模型;步骤2,图片之间的自标定:对图片应用SfM算法,得到场景的部分点云三维模型,并推断出每张图片在该点云三维模型下的相机内外参数。算法运行完毕后,得到的点云三维模型如图4所示;步骤3,校准点云三维模型和网格三维模型:网格三维模型来源于互联网素材库,与步骤4求得的网格三维模型会有一定差异。在此标定6个以上的对应点后,使用数值优化的方法求解两个模型之间的变换。标定点云三维模型和网格三维模型的过程分别如图5a和图5b所示;步骤4,确定图片在网格三维模型下的相机内外参数:利用变换的传递性质,求得图片在网格三维模型下的拍摄参数;步骤5,渲染和评价:经过步骤4得到了一系列相机内外参数,将每对参数分别应用于网格三维模型上进行渲染,可以生成一系列的图片。比较生成的图片和原图片视点是否一致,从而评价算法效果的优劣。算法的部分结果如图6a~图6d所示,每张图片在结果中对应两个输出,其中,图6a和6c(图中文字与本发明内容无关)分别是两张不同的原图,图6b和6d分别是原图标定后的渲染效果图。模型渲染结果与原图愈一致,则表示相机标定的效果愈精准。本发明提供了一种大量图片在三维场景中的视点标定方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。