本發(fā)明涉及攝影測量與遙感領(lǐng)域,尤其涉及一種低資源消耗的實(shí)時(shí)核線方法和實(shí)時(shí)核線系統(tǒng)。
背景技術(shù):
攝影測量中必須通過立體像對(兩個攝站對同一地物攝取相互重疊的兩張像片),構(gòu)建與地面相似的立體模型才能確定地面點(diǎn)的三維空間位置。要達(dá)到立體量測的目的,必須建立立體像對。攝影基線與任一物方點(diǎn)所作的平面與影像面的交線,為通過該物方點(diǎn)的核線。核線在航攝像片上是相互不平行的,它們相交于核點(diǎn)。但如果要建立的立體像對達(dá)到可測量的精度,就必須先將像片上的核線投影到一對相對水平的像片上,即生成核線影像,再生成立體像對量測。
現(xiàn)在最常用的生成核線影像的方法是一種基于數(shù)字影像幾何糾正的方法。通過核線重采樣方法,使用精確的核線方程,逐個像素計(jì)算核線上影像像素點(diǎn)坐標(biāo)與原始影像上像素點(diǎn)坐標(biāo)的對應(yīng)關(guān)系,重新采樣像素值,生成核線影像。最后使用核線影像建立立體像對,達(dá)到立體量測的目的。
也有一些專家學(xué)者提出了實(shí)時(shí)核線的思想,即不生成核線影像,直接使用原始影像,在計(jì)算機(jī)顯示立體像對時(shí),對影像進(jìn)行實(shí)時(shí)的核線計(jì)算(只計(jì)算窗口顯示范圍),也可以達(dá)到立體量測目的。
現(xiàn)有的核線算法雖然能夠準(zhǔn)確的描述核線影像與原始影像間的關(guān)系,但卻需要大量的計(jì)算,消耗了大量的額外的計(jì)算時(shí)間和存儲空間。核線變換并非線性變換,每個像素都要經(jīng)過復(fù)雜的矩陣計(jì)算。一幅無人機(jī)拍攝的較小的影像(4912*7360)要經(jīng)過近4000萬次矩陣計(jì)算才可以生成一份核線影像,大型航空攝影影像更是會達(dá)到上億甚至數(shù)十億次矩陣計(jì)算,這勢必會消耗大量的計(jì)算時(shí)間。另外,由于每一個立體像對都需要計(jì)算一組核線影像,但最終目的只是通過核線影像立體量測制作數(shù)字線劃圖dlg,這些生成的核線影像則成為了臨時(shí)文件,浪費(fèi)了存儲空間。
雖然有人提出實(shí)時(shí)核線算法,通過在立體像對顯示的過程中實(shí)時(shí)計(jì)算核線影像來避免生成核線影像帶來的消耗大量計(jì)算時(shí)間和存儲空間的問題,但依然存在計(jì)算量大的問題。比如在筆記本電腦屏幕(1366*768)上顯示立體像對,兩張核線影像要經(jīng)過超過200萬次矩陣計(jì)算,隨著屏幕分辨率的增大計(jì)算量呈平方關(guān)系遞增。這導(dǎo)致的結(jié)果就是對cpu計(jì)算能力要求極高,并且在立體像對平移、縮放時(shí)很難保證及時(shí)計(jì)算得到核線影像,常常出現(xiàn)卡頓現(xiàn)象,用戶體驗(yàn)較差。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種低資源消耗的實(shí)時(shí)核線方法和實(shí)時(shí)核線系統(tǒng),以解決現(xiàn)有技術(shù)計(jì)算量大,計(jì)算速度慢的問題。
具體地,本發(fā)明是通過如下技術(shù)方案實(shí)現(xiàn)的:
本發(fā)明提供一種低資源消耗的實(shí)時(shí)核線方法,所述實(shí)時(shí)核線方法包括:
將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形;
對所述多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取所述多個三角形頂點(diǎn)在其核線影像上的坐標(biāo);
在所述三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換。
本發(fā)明還提供了一種低資源消耗的實(shí)時(shí)核線系統(tǒng),所述實(shí)時(shí)核線系統(tǒng),包括:
劃分單元,用于將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形;
坐標(biāo)獲取單元,用于對所述多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取所述多個三角形頂點(diǎn)在其核線影像上的坐標(biāo);
變換單元,用于在所述三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換。
本發(fā)明實(shí)施例,將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形,對多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取多個三角形頂點(diǎn)在其核線影像上的坐標(biāo),在三角形內(nèi)部,根據(jù)坐標(biāo)通過拉伸或壓縮變換對影像的像素進(jìn)行線性變換,避免了在立體測圖之前生成核線影像,節(jié)省了計(jì)算時(shí)間和存儲空間,同時(shí)使用cpu和gpu進(jìn)行計(jì)算,保證了低配置計(jì)算機(jī)的計(jì)算速度。
附圖說明
圖1是本發(fā)明一示例性實(shí)施例示出的一種低資源消耗的實(shí)時(shí)核線方法的流程圖;
圖2是本發(fā)明一示例性實(shí)施例示出的核線變換示意圖;
圖3是本發(fā)明一示例性實(shí)施例示出的三角形頂點(diǎn)的核線變換示意圖;
圖4是本發(fā)明一示例性實(shí)施例示出的實(shí)時(shí)核線立體像對顯示效果圖;
圖5是本發(fā)明一示例性實(shí)施例示出的一種低資源消耗的實(shí)時(shí)核線系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本發(fā)明相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
在本發(fā)明使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本發(fā)明。在本發(fā)明和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本發(fā)明可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本發(fā)明范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
如圖1所示為本發(fā)明一示例性實(shí)施例示出的一種低資源消耗的實(shí)時(shí)核線方法的流程圖,所述實(shí)時(shí)核線方法包括:
步驟s101,將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形。
在本發(fā)明實(shí)施例中,原始影像首先根據(jù)行列排布的規(guī)則,劃分為多個三角形。劃分的三角形的數(shù)量是整個實(shí)時(shí)核線方法的關(guān)鍵,如果劃分的三角形數(shù)量取最大極限,則每個像素都進(jìn)行了精確核線運(yùn)算,精度雖然最高,但運(yùn)算量大、計(jì)算速度慢;如果剖分三角形數(shù)量取最少,則計(jì)算量很少,計(jì)算速度快,但精度難以保證。對于劃分的三角形的數(shù)量,可以通過實(shí)驗(yàn)取一個合適的值,使得該值的三角形數(shù)量在計(jì)算精度和計(jì)算速度上達(dá)到平衡,具體的值可以根據(jù)實(shí)際使用的需要進(jìn)行設(shè)定,在此不做贅述。
通常在計(jì)算三角形數(shù)量時(shí)并不能取極限值,只要在核線的顯示范圍內(nèi)繪制足夠的三角形,讓平面上顯示的三角形足夠小,就可以保證核線影像的精度。
如圖4所示為本發(fā)明一示例性實(shí)施例示出的經(jīng)過實(shí)時(shí)核線后的立體像對顯示效果圖,圖4中顯示的是通過三角形貼圖方式顯示的核線影像,屏幕分辨率1366*768,范圍內(nèi)大約繪制了5000個三角形。一個像對的左右影像通過疊加顯示后,只存在左右視差,未發(fā)現(xiàn)上下視差(如若核線影像精度不足,會產(chǎn)生上下視差)。這樣的核線影像,如果放大顯示,則會在屏幕范圍內(nèi)重新繪制5000個三角形,三角形大小不會隨影像的縮放而變化,因此誤差不但不會被放大,還會隨著顯示影像的放大而減小。
需要指出的是,該步驟由系統(tǒng)的cpu通過計(jì)算實(shí)現(xiàn)。
步驟s102,對所述多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取所述多個三角形頂點(diǎn)在其核線影像上的坐標(biāo)。
在本發(fā)明實(shí)施例中,通過對三角形頂點(diǎn)作為控制點(diǎn)的核線計(jì)算,即可獲取三角形頂點(diǎn)在其核線影像上的坐標(biāo)。
需要指出的是,上述步驟由系統(tǒng)的cpu通過計(jì)算實(shí)現(xiàn)。
步驟s103,在所述三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換。
在本發(fā)明實(shí)施例中,原始影像上核線不平行,相交于核點(diǎn),但在經(jīng)過核線變換得到的核線影像上,核線卻是相互平行的。由此可見在整幅影像上,核線的變換不是線性的,每個像素需要的變換都不相同??紤]到核線與攝影基線的關(guān)系,核線必為直線,因此在小范圍內(nèi)核線的變化是有規(guī)律的。
具體的,所述根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換,包括:
根據(jù)所述坐標(biāo)通過拉伸或壓縮變換對影像的像素進(jìn)行線性變換。
所述在三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行變化,包括:
1.通過cpu計(jì)算獲取三角形頂點(diǎn)的控制點(diǎn);
2.通過gpu對所述控制點(diǎn)進(jìn)行紋理貼圖,并通過opengl渲染管線進(jìn)行渲染。
在本發(fā)明實(shí)施例中,使用gpu進(jìn)行紋理貼圖,是交由opengl的渲染管線完成的。在傳統(tǒng)方式的cpu計(jì)算影像中,以像素為單位進(jìn)行計(jì)算,處理效率低、速度慢,以cpu計(jì)算方式實(shí)現(xiàn)的核線,幾乎不可能做到“實(shí)時(shí)”。opengl可編程管線渲染則不相同,其渲染過程是一組狀態(tài)機(jī),只要將數(shù)據(jù)上傳到顯存指定位置,即可實(shí)現(xiàn)渲染、貼圖。因此,實(shí)時(shí)核線僅需計(jì)算好繪制頂點(diǎn)(核線變換后的三角形頂點(diǎn)控制點(diǎn))數(shù)據(jù)、繪制順序數(shù)據(jù)、貼圖uv值以及影像數(shù)據(jù),交由顯卡完成渲染,即可將核線影像顯示出來。
如圖2為本發(fā)明一示例性實(shí)施例示出的核線變換示意圖,圖2中的三角形區(qū)域,雖然在核線變換前后形狀發(fā)生變化,但在小范圍內(nèi)可以近似認(rèn)為原始影像上的三角形區(qū)域經(jīng)過均勻的拉伸或者壓縮變換得到核線影像上的三角形。顯然,這種三角形的拉伸或者壓縮變換,只要確定三角形的三個頂點(diǎn)的位置即可做到。
如圖3為本發(fā)明一示例性實(shí)施例示出的三角形頂點(diǎn)的核線變換示意圖,核線變換可以轉(zhuǎn)換為三角形變換,按照這種方法可以將影像剖分成為很多小三角形,以三角形頂點(diǎn)為控制點(diǎn),對控制點(diǎn)進(jìn)行精確的核線變換,三角形內(nèi)部則按照頂點(diǎn)的變換規(guī)律線性的拉伸或者壓縮變換,這樣就避免了對每個像素進(jìn)行計(jì)算,實(shí)現(xiàn)了快速核線變換。如圖3所示,將影像按行列劃分成多個三角形,對三角形頂點(diǎn)進(jìn)行精確的核線變換。
本發(fā)明實(shí)施例,將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形,對多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取多個三角形頂點(diǎn)在其核線影像上的坐標(biāo),在三角形內(nèi)部,根據(jù)坐標(biāo)通過拉伸或壓縮變換對影像的像素進(jìn)行變換,避免了在立體測圖之前生成核線影像,節(jié)省了計(jì)算時(shí)間和存儲空間,同時(shí)使用cpu和gpu進(jìn)行計(jì)算,保證了低配置計(jì)算機(jī)的計(jì)算速度。
如圖5所示為本發(fā)明一示例性實(shí)施例示出的一種低資源消耗的實(shí)時(shí)核線系統(tǒng)的結(jié)構(gòu)圖,所述實(shí)時(shí)核線系統(tǒng),包括:
劃分單元501,用于將原始影像根據(jù)行列規(guī)則劃分為預(yù)設(shè)的多個三角形。
在本發(fā)明實(shí)施例中,原始影像首先根據(jù)行列排布的規(guī)則,劃分為多個三角形。劃分的三角形的數(shù)量是整個實(shí)時(shí)核線方法的關(guān)鍵,如果劃分的三角形數(shù)量取最大極限,則每個像素都進(jìn)行了精確核線運(yùn)算,精度雖然最高,但運(yùn)算量大、計(jì)算速度慢;如果剖分三角形數(shù)量取最少,則計(jì)算量很少,計(jì)算速度快,但精度難以保證。對于劃分的三角形的數(shù)量,可以通過實(shí)驗(yàn)取一個合適的值,使得該值的三角形數(shù)量在計(jì)算精度和計(jì)算速度上達(dá)到平衡,具體的值可以根據(jù)實(shí)際使用的需要進(jìn)行設(shè)定,在此不做贅述。
通常在計(jì)算三角形數(shù)量時(shí)并不能取極限值,只要在核線的顯示范圍內(nèi)繪制足夠的三角形,讓平面上顯示的三角形足夠小,就可以保證核線影像的精度。
如圖4所示為本發(fā)明一示例性實(shí)施例示出的經(jīng)過實(shí)時(shí)核線后的立體像對顯示效果圖,圖4中顯示的是通過三角形貼圖方式顯示的核線影像,屏幕分辨率1366*768,范圍內(nèi)大約繪制了5000個三角形。一個像對的左右影像通過疊加顯示后,只存在左右視差,未發(fā)現(xiàn)上下視差(如若核線影像精度不足,會產(chǎn)生上下視差)。這樣的核線影像,如果放大顯示,則會在屏幕范圍內(nèi)重新繪制5000個三角形,三角形大小不會隨影像的縮放而變化,因此誤差不但不會被放大,還會隨著顯示影像的放大而減小。
需要指出的是,該步驟由系統(tǒng)的cpu通過計(jì)算實(shí)現(xiàn)。
坐標(biāo)獲取單元502,用于對所述多個三角形以頂點(diǎn)為控制點(diǎn)逐個進(jìn)行核線計(jì)算,獲取所述多個三角形頂點(diǎn)在其核線影像上的坐標(biāo)。
在本發(fā)明實(shí)施例中,通過對三角形頂點(diǎn)作為控制點(diǎn)的核線計(jì)算,即可獲取三角形頂點(diǎn)在其核線影像上的坐標(biāo)。
需要指出的是,上述步驟由系統(tǒng)的cpu通過計(jì)算實(shí)現(xiàn)。
變換單元503,用于在所述三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換。
在本發(fā)明實(shí)施例中,原始影像上核線不平行,相交于核點(diǎn),但在經(jīng)過核線變換得到的核線影像上,核線卻是相互平行的。由此可見在整幅影像上,核線的變換不是線性的,每個像素需要的變換都不相同。考慮到核線與攝影基線的關(guān)系,核線必為直線,因此在小范圍內(nèi)核線的變化是有規(guī)律的。
具體的,所述根據(jù)所述坐標(biāo)對影像的像素進(jìn)行線性變換,包括:
根據(jù)所述坐標(biāo)通過拉伸或壓縮變換對影像的像素進(jìn)行線性變換。
所述在三角形內(nèi)部,根據(jù)所述坐標(biāo)對影像的像素進(jìn)行變化,包括:
1.通過cpu計(jì)算獲取三角形頂點(diǎn)的控制點(diǎn);
2.通過gpu對所述控制點(diǎn)進(jìn)行紋理貼圖,并通過opengl渲染管線進(jìn)行渲染。
在本發(fā)明實(shí)施例中,使用gpu進(jìn)行紋理貼圖,是交由opengl的渲染管線完成的。在傳統(tǒng)方式的cpu計(jì)算影像中,以像素為單位進(jìn)行計(jì)算,處理效率低、速度慢,以cpu計(jì)算方式實(shí)現(xiàn)的核線,幾乎不可能做到“實(shí)時(shí)”。opengl可編程管線渲染則不相同,其渲染過程是一組狀態(tài)機(jī),只要將數(shù)據(jù)上傳到顯存指定位置,即可實(shí)現(xiàn)渲染、貼圖。因此,實(shí)時(shí)核線僅需計(jì)算好繪制頂點(diǎn)(核線變換后的三角形頂點(diǎn)控制點(diǎn))數(shù)據(jù)、繪制順序數(shù)據(jù)、貼圖uv值以及影像數(shù)據(jù),交由顯卡完成渲染,即可將核線影像顯示出來。
以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本發(fā)明方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。