本發(fā)明屬于傾斜攝影建模領(lǐng)域,特別是涉及模型基于傾斜影像邊緣特征自動調(diào)整的方法。
背景技術(shù):
建筑物的三維重建是一種獲取建筑物三維結(jié)構(gòu)詳細(xì)信息的重要手段,在城市規(guī)劃與管理、多規(guī)合一、房地一體、應(yīng)急指揮等領(lǐng)域得到廣泛的運(yùn)用。迄今為止,它一直是攝影測量、遙感、計算機(jī)視覺、模式識別以及測繪等領(lǐng)域長期研究的重中之重。
目前,市場主流的建模方式主要有純?nèi)斯そ?、全自動建模、半自動建模等?/p>
純?nèi)斯そ7椒ㄐ枰鈽I(yè)人員到實(shí)地對各個建筑進(jìn)行多角度的拍攝后,內(nèi)業(yè)人員根據(jù)外業(yè)人員拍攝得到的相片以及規(guī)劃圖在三維建模軟件中進(jìn)行人工建模。在這種建模方式下,由于外業(yè)人員無法獲得建筑的位置與尺寸,內(nèi)業(yè)人員在進(jìn)行建模時只能估算建筑的尺寸和位置,因此無法保證模型的精確性。建模完成后,還需要人工對模型進(jìn)行紋理貼附:內(nèi)業(yè)人員從外業(yè)人員采集的相片中摳取出建筑對應(yīng)的紋理內(nèi)容后對其進(jìn)行修正和美化,這個過程需要耗費(fèi)工作人員大量的時間和精力。
全自動建模方法基于傾斜攝影技術(shù),可根據(jù)影像空三數(shù)據(jù)實(shí)現(xiàn)全自動建模,它可以有效地提高建模效率、保證模型的坐標(biāo)精度。但是,全自動建模的模型成果為三角網(wǎng)模型,存在著數(shù)據(jù)量太大、建筑非單體化、建筑細(xì)節(jié)無法體現(xiàn)等問題。
半自動建模方法是在全自動建模技術(shù)的基礎(chǔ)上,利用傾斜影像、傾斜影像空三數(shù)據(jù)、三角網(wǎng)數(shù)據(jù)模擬航拍傾斜影像時攝像機(jī)的位置與姿態(tài),以此來進(jìn)行半自動建模與全自動紋理映射。相對于純手工建模,此方法可以大幅提高建模效率,省去外業(yè)實(shí)地拍攝、內(nèi)業(yè)紋理貼附的工序;相對于全自動建模,此方法可以大幅減少數(shù)據(jù)量、使模型可以實(shí)現(xiàn)單體化,并體現(xiàn)模型的細(xì)節(jié)。但是由于半自動建模是基于單張傾斜影像進(jìn)行建模,所以相對于全自動建模成果精度會有一定差距。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對半自動單體建模方法現(xiàn)有技術(shù)的不足,提供一種自動從多張影像中提取建筑邊緣特征,并根據(jù)邊緣特征信息自動調(diào)整模型來提高模型精度的方法,包括以下步驟:
步驟1,獲取傾斜影像的攝影機(jī)投影矩陣,具體是通過空三文件中影像的內(nèi)方位元素,即攝影中心s到像片的垂距f,和像主點(diǎn)在像框標(biāo)坐標(biāo)系中的坐標(biāo)px,py。計算出攝像機(jī)標(biāo)定矩陣k。
通過空三文件中的外方位元素,姿態(tài)用r矩陣表示,攝影中心的空間坐標(biāo)值用
結(jié)合攝像機(jī)定標(biāo)矩陣,可得出通過物點(diǎn)坐標(biāo)計算像點(diǎn)坐標(biāo)的公式如下:
即獲得了傾斜影像的投影矩陣
步驟2,獲取待調(diào)整三維模型的某一條邊線,得到該邊線的端點(diǎn)坐標(biāo)p1(x_1,y_1,z_1),p2(x_2,y_2,z_2)。結(jié)合傾斜影像的內(nèi)外方元素,算出端點(diǎn)在所有傾斜影像中的像點(diǎn)坐標(biāo)。然后根據(jù)判斷像點(diǎn)坐標(biāo)是否超出了影像范圍來對傾斜影像進(jìn)行篩選,具體是針對某一幅傾斜影像,通過公式x=px,計算出邊線兩端點(diǎn)p1、p2對應(yīng)的像點(diǎn)坐標(biāo),如果像點(diǎn)坐標(biāo)均在影像范圍內(nèi),也就是像點(diǎn)坐標(biāo)x、y大于0小于像平面長寬,則判定該條邊線投影在影像內(nèi)范圍內(nèi),影像通過了篩選。
步驟3,計算各個傾斜影像在對應(yīng)的視角下,邊線是否被模型其他面遮擋,以此來對傾斜影像進(jìn)行再次篩選。
步驟4,將模型邊線映射到通過篩選的傾斜影像中,獲得對應(yīng)的像平面線段。將線段放大至一個矩形。對矩形區(qū)域內(nèi)的影像進(jìn)行二值化處理。
步驟5,在影像二值化的基礎(chǔ)上進(jìn)行霍夫變換直線檢測,圖像中,直線在極坐標(biāo)中用(r,θ)表示,r=cos(θ)*x+sin(θ)*y。通過θ從0到180度旋轉(zhuǎn),可以用(r,θ)表示經(jīng)過(x0,y0)點(diǎn)的所有直線。
步驟6,將檢測到的所有線段投射到三角網(wǎng)模型上,根據(jù)投射獲得到線段計算出修正后的模型邊線的表達(dá)式。
步驟7,根據(jù)表達(dá)式,對邊線進(jìn)行修正。并依照以上步驟,對模型的每一條邊線都進(jìn)行修改。
步驟8,修正后的邊線破壞了模型的各個面結(jié)構(gòu)。根據(jù)模型之前各個面的位置與姿態(tài),再對模型各邊線進(jìn)行共面擬合。
在上述的基于影像邊緣特征的三維模型自動調(diào)整方法的方法,所述步驟3中,具體方法是通過空三文件,獲取到傾斜影像攝影中心的空間坐標(biāo)值
選擇模型的某一個面,將該面豎直投影到三角形平面上,即不改變面上各個頂點(diǎn)的x、y坐標(biāo)值,根據(jù)三角形平面坐標(biāo)方程式,計算出對應(yīng)的z坐標(biāo)值。如果通過投影后,面上各個頂點(diǎn)的z坐標(biāo)值都變大,說明模型面在三角形平面的下方,該面不會對邊線有遮擋。如果面上某些頂點(diǎn)的z坐標(biāo)值變小,則判斷該面是否對邊線有遮擋,具體包括:
步驟3.1、選擇投影面的某一條邊線。
步驟3.2、判斷邊線是否有頂點(diǎn)在三角形內(nèi),如果有頂點(diǎn)落在三角形,說明面對邊線有遮擋。
步驟3.3、如果邊線的頂點(diǎn)都在三角形外,則需要判斷三角形的三條線段是否與邊線有交點(diǎn)。如果有交點(diǎn)說明面對邊線有遮擋。
步驟3.4、遍歷投影面上的每一條邊線重復(fù)以上步驟,如果投影面上所有邊線的頂點(diǎn)都在三角形外,并且所有邊線與三角形的三條線段之間均無交點(diǎn),說面模型的這個面沒有遮擋邊線。
在上述的基于影像邊緣特征的三維模型自動調(diào)整方法的方法,所述步驟4中,通過篩選獲得符合條件的傾斜影像后,利用傾斜影像對應(yīng)的投影矩陣p計算出模型邊線在像平面上的投影。將投影得到的線段向垂直方向各向外擴(kuò)充5像素,在像平面上得到一個矩形框。
對于矩形內(nèi)的圖像i(x,y),前景(即目標(biāo))和背景的分割閾值記作t,屬于前景的像素點(diǎn)數(shù)占整幅圖像的比例記為ω0,其平均灰度μ0;背景像素點(diǎn)數(shù)占整幅圖像的比例為ω1,其平均灰度為μ1。圖像的總平均灰度記為μ,類間方差記為g。
定義圖像的背景較暗,并且圖像的大小為m×n,如圖1所示,圖像中像素的灰度值小于閾值t的像素個數(shù)記作n0,像素灰度大于閾值t的像素個數(shù)記作n1,則有:
n0+n1=m×n(3)
ω0+ω1=1(4)
μ=ω0×μ0+ω1×μ1(5)
g=ω0×(μ0-μ)2+ω1×(μ1-μ)2(6)
根據(jù)上述方程式,采用遍歷的方法得到使類間方差最大的閾值t,即為所求。最后通過閾值為依據(jù),將影像二值化。
在上述的基于影像邊緣特征的三維模型自動調(diào)整方法的方法,所述步驟6中,由篩選后的某一條線段的其中一個端點(diǎn)與攝影中心組成一條直線,然后求得直線與三角網(wǎng)模型的交點(diǎn),同此方法獲得線段另一個端點(diǎn)對應(yīng)的交點(diǎn)。
以此類推,獲得所有通過篩選的傾斜影像中所有通過篩選的線段投射到三角網(wǎng)上的點(diǎn)集。通過空間中離散點(diǎn)進(jìn)行線性擬合,獲得擬合線段的表達(dá)式。
空間直線方程可以簡化為:
用矩陣形式表達(dá)為:
當(dāng)有n個點(diǎn)時第i個點(diǎn)的方程為:
并聯(lián)n個方程得到:
最小二乘擬合:
化簡為:
求矩陣即可得到m,n,x0,y0,修正后的直線方程即為所得。
在上述的基于影像邊緣特征的三維模型自動調(diào)整方法的方法,所述步驟7中,定義直線方程為
以上求得的坐標(biāo),即為邊線兩頂點(diǎn),修正后的坐標(biāo)值。最后,依照以上步驟,對模型的每一條邊線都進(jìn)行修改。
在上述的基于影像邊緣特征的三維模型自動調(diào)整方法的方法,所述步驟8中,修正基于以下約束條件:
約束條件一、模型原來各個面的頂點(diǎn)在同一個平面上;
約束條件二、模型各個面的姿態(tài)與原始姿態(tài)相同;
具體方法是:根據(jù)原來面上的各個頂點(diǎn)的修正值,擬合出新的平面。平面方程一般表達(dá)式為:
ax+by+cz+d=0
方程推導(dǎo)為:
對于一系列的n個離散點(diǎn)(n≥3)擬合計算平面方程時,則使:
最小。
要使s最小,應(yīng)滿足:
通過解上述線性方程,得到a2的值。即獲得了修正后的平面方程。
獲得平面方程后,將各個頂點(diǎn)垂直投影至修正后的平面上。
將平面方程以ax+by+cz+d=0形式表達(dá),各個頂點(diǎn)坐標(biāo)值為(xi,yi,zi)。那么投影到平面上的坐標(biāo)為:
即得到了平面內(nèi)各個頂點(diǎn)最終的修正值。
本發(fā)明與現(xiàn)有半自動建模方式相比,具有以下顯著效果:1、本發(fā)明可以使模型根據(jù)傾斜影像邊緣特征進(jìn)行自動調(diào)節(jié),減少人工干預(yù),提高了建模效率;2、相對于人工參照單張傾斜影像調(diào)節(jié)模型的方式,本發(fā)明可以使模型同時參照多張傾斜影像進(jìn)行調(diào)整,進(jìn)而提升模型精度。
附圖說明
圖1為本發(fā)明實(shí)施例中影像二值化處理示意圖
圖2為本發(fā)明實(shí)施例中霍夫變換直線檢測用極坐標(biāo)表示直線示意圖。
圖3為本發(fā)明實(shí)施例中基于影像邊緣特征的三維模型自動調(diào)整方法方法流程圖。
具體實(shí)施方式
本發(fā)明是基于自動提取多張傾斜影像邊緣特征對模型進(jìn)行自動調(diào)整的方法。首先通過模型邊線與傾斜影像之間的空間關(guān)系,對傾斜影像進(jìn)行篩選,獲得包含有線條信息的影像。然后對模型邊線在傾斜影像中映射得到的線條根據(jù)影像大小進(jìn)行外擴(kuò),得到對應(yīng)矩形。接著在矩形區(qū)域內(nèi)進(jìn)行直線檢測獲取多個線條,并利用線條與三角網(wǎng)數(shù)據(jù)的映射關(guān)系對模型邊線進(jìn)行擬合,以修正模型各邊線的位置。最后在遍歷并調(diào)整了模型所有邊線后,根據(jù)模型原有結(jié)構(gòu)對邊線進(jìn)行二次擬合,獲得最終的模型成果。
下面結(jié)合附圖和實(shí)施例對本發(fā)明的技術(shù)方案作進(jìn)一步說明。
如圖3所示,本發(fā)明實(shí)施例的流程包包括有以下步驟。
步驟1,獲取傾斜影像的攝影機(jī)投影矩陣。
通過空三文件中影像的內(nèi)方位元素,即攝影中心s到像片的垂距(主距)f,和像主點(diǎn)在像框標(biāo)坐標(biāo)系中的坐標(biāo)px,py。計算出攝像機(jī)標(biāo)定矩陣k。
通過空三文件中的外方位元素(用于描述攝影中心的空間坐標(biāo)值和姿態(tài)的參數(shù)),姿態(tài)用r矩陣表示,攝影中心的空間坐標(biāo)值用
結(jié)合攝像機(jī)定標(biāo)矩陣,可得出通過物點(diǎn)坐標(biāo)計算像點(diǎn)坐標(biāo)的公式如下:
即獲得了傾斜影像的投影矩陣
步驟2,獲取模型的某一條邊線,得到該邊線的端點(diǎn)坐標(biāo)p1(x1,y1,z1),p2(x2,y2,z2)。結(jié)合傾斜影像的內(nèi)外方元素,算出端點(diǎn)在所有傾斜影像中的像點(diǎn)坐標(biāo)。然后根據(jù)判斷像點(diǎn)坐標(biāo)是否超出了影像范圍來對傾斜影像進(jìn)行篩選。
針對某一幅傾斜影像,通過公式x=px,可以計算出邊線兩端點(diǎn)p1、p2對應(yīng)的像點(diǎn)坐標(biāo),如果像點(diǎn)坐標(biāo)均在影像范圍內(nèi)(像點(diǎn)坐標(biāo)x、y大于0小于像平面長寬),則說明該條邊線投影在影像內(nèi)范圍內(nèi),影像通過了篩選。
步驟3,計算各個傾斜影像在對應(yīng)的視角下,邊線是否被模型其他面遮擋,以此來對傾斜影像進(jìn)行再次篩選。
通過空三文件,獲取到傾斜影像攝影中心的空間坐標(biāo)值
選擇模型的某一個面,將該面豎直投影到三角形平面上,即不改變面上各個頂點(diǎn)的x、y坐標(biāo)值,根據(jù)三角形平面坐標(biāo)方程式,計算出對應(yīng)的z坐標(biāo)值。如果通過投影后,面上各個頂點(diǎn)的z坐標(biāo)值都變大,說明模型面在三角形平面的下方,該面不會對邊線有遮擋。如果面上某些頂點(diǎn)的z坐標(biāo)值變小,則需要進(jìn)行下面的步驟來判斷該面是否對邊線有遮擋:
1.選擇投影面的某一條邊線。
2.判斷邊線是否有頂點(diǎn)在三角形內(nèi),如果有頂點(diǎn)落在三角形,說明面對邊線有遮擋。
3.如果邊線的頂點(diǎn)都在三角形外,則需要判斷三角形的三條線段是否與邊線有交點(diǎn)。如果有交點(diǎn)說明面對邊線有遮擋。
4.遍歷投影面上的每一條邊線重復(fù)以上步驟,如果投影面上所有邊線的頂點(diǎn)都在三角形外,并且所有邊線與三角形的三條線段之間均無交點(diǎn),說面模型的這個面沒有遮擋邊線。
遍歷模型中不包含邊線的每一個面,判斷其是否對邊線有遮擋。如果每一個面都不會對邊線有遮擋時,說明對應(yīng)的傾斜影像符合條件,通過篩選。
步驟4,將模型邊線映射到通過篩選的傾斜影像中,獲得對應(yīng)的像平面線段。將線段放大至一個矩形。對矩形區(qū)域內(nèi)的影像進(jìn)行二值化處理。
通過篩選獲得符合條件的傾斜影像后,利用傾斜影像對應(yīng)的投影矩陣p計算出模型邊線在像平面上的投影。將投影得到的線段向垂直方向各向外擴(kuò)充5像素,在像平面上得到一個矩形框。
對于矩形內(nèi)的圖像i(x,y),前景(即目標(biāo))和背景的分割閾值記作t,屬于前景的像素點(diǎn)數(shù)占整幅圖像的比例記為ω0,其平均灰度μ0;背景像素點(diǎn)數(shù)占整幅圖像的比例為ω1,其平均灰度為μ1。圖像的總平均灰度記為μ,類間方差記為g。
假設(shè)圖像的背景較暗,并且圖像的大小為m×n,如圖1所示,圖像中像素的灰度值小于閾值t的像素個數(shù)記作n0,像素灰度大于閾值t的像素個數(shù)記作n1,則有:
n0+ni=m×n(3)
ω0+ω1=1(4)
μ=ω0×μ0+ω1×μ1(5)
g=ω0×(μ0-μ)2+ω1×(μ1-μ)2(6)
根據(jù)上述方程式,采用遍歷的方法得到使類間方差最大的閾值t,即為所求。最后通過閾值為依據(jù),將影像二值化。
步驟5,在影像二值化的基礎(chǔ)上進(jìn)行霍夫變換直線檢測。
圖像中,直線在極坐標(biāo)中用(r,θ)表示,r=cos(θ)*x+sin(θ)*y。通過θ從0到180度旋轉(zhuǎn),可以用(r,θ)表示經(jīng)過(x0,y0)點(diǎn)的所有直線。
如圖2所示,對二值化影像內(nèi)的每一個點(diǎn),進(jìn)行如上操作,如果兩個不同的點(diǎn)進(jìn)行上述操作后得到的曲線在平面相交,這就意味著它們通過同一條直線。而越多曲線交于一點(diǎn)也就意味著這個交點(diǎn)表示的直線由更多的點(diǎn)組成。在程序中我們設(shè)置5作為直線上點(diǎn)的閾值來篩選影像中的直線。
通過以上算法獲得影像中所有檢測到的線段后,利用線條與模型邊線映射到像平面線段的夾角進(jìn)行篩選,只有夾角小于10度的線段才可以通過篩選。
步驟6,將檢測到的所有線段投射到三角網(wǎng)模型上,根據(jù)投射獲得到線段計算出修正后的模型邊線的表達(dá)式。
由篩選后的某一條線段的其中一個端點(diǎn)與攝影中心組成一條直線,然后求得直線與三角網(wǎng)模型的交點(diǎn),同此方法獲得線段另一個端點(diǎn)對應(yīng)的交點(diǎn)。
以此類推,獲得所有通過篩選的傾斜影像中所有通過篩選的線段投射到三角網(wǎng)上的點(diǎn)集。通過空間中離散點(diǎn)進(jìn)行線性擬合,獲得擬合線段的表達(dá)式。
空間直線方程可以簡化為:
用矩陣形式表達(dá)為:
當(dāng)有n個點(diǎn)時第i個點(diǎn)的方程為:
并聯(lián)n個方程得到:
最小二乘擬合:
化簡為:
求矩陣即可得到m,n,x0,y0,修正后的直線方程即為所得。
步驟7,根據(jù)表達(dá)式,對邊線進(jìn)行修正。并依照以上步驟,對模型的每一條邊線都進(jìn)行修改。
通過上一步驟得到的直線方程,依據(jù)直線方程對邊線頂點(diǎn)進(jìn)行修正。
假設(shè)直線方程為
以上求得的坐標(biāo),即為邊線兩頂點(diǎn),修正后的坐標(biāo)值。最后,依照以上步驟,對模型的每一條邊線都進(jìn)行修改。
步驟8,修正后的模型邊線破壞了模型的各個面結(jié)構(gòu)。根據(jù)模型之前各個面的位置與姿態(tài),再對模型各邊線進(jìn)行共面擬合。
調(diào)整了模型的所有邊線后,導(dǎo)致了模型原有面結(jié)構(gòu)被破壞(由于一個平面由三個頂點(diǎn)確定,而模型中一個面中總會有大于等于三個頂點(diǎn)存在,通過修正后,這些頂點(diǎn)會不在一個平面上)。所以需要對模型的面再進(jìn)行一次修正,修正的原則為:
1.保證模型原來各個面的頂點(diǎn)在仍然在同一個平面上
2.不改變模型各個面的姿態(tài)(水平面依舊為水平面,垂直面依舊為垂直面)
根據(jù)原來面上的各個頂點(diǎn)的修正值,擬合出新的平面。平面方程一般表達(dá)式為:
ax+by+cz+d=0
方程可推導(dǎo)為:
記:
對于一系列的n個離散點(diǎn)(n≥3)擬合計算平面方程時,則使:
最小。
要使s最小,應(yīng)滿足:
獲得平面方程后,將各個頂點(diǎn)垂直投影至修正后的平面上。
將平面方程以ax+by+cz+d=0形式表達(dá),各個頂點(diǎn)坐標(biāo)值為(xi,yi,zi)。那么投影到平面上的坐標(biāo)為:
即得到了平面內(nèi)各個頂點(diǎn)最終的修正值。
在具體實(shí)施中,本發(fā)明提供的方法可基于軟件技術(shù)實(shí)現(xiàn)自動運(yùn)行流程,也可采用模塊化方式實(shí)現(xiàn)相應(yīng)系統(tǒng)。
本文中所描述的具體實(shí)施僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實(shí)施案例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。