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