本發(fā)明涉及建立影像金字塔技術(shù)領(lǐng)域,具體為一種用于快速建立影像金字塔的IO多線程計算方法。
背景技術(shù):
隨著遙感技術(shù)的高速發(fā)展和對地觀測系統(tǒng)的日臻成熟,各種分辨率的遙感衛(wèi)星每時每刻都在獲取數(shù)以千兆的地表影像,遙感數(shù)據(jù)已逐漸成為空間數(shù)據(jù)更新的主要數(shù)據(jù)源,這對海量遙感數(shù)據(jù)的組織、管理和應(yīng)用提出了更大的挑戰(zhàn)。如何高效管理以及局部更新海量影像數(shù)據(jù)已經(jīng)成為迫切需要解決的理論與實踐問題。目前解決此問題常用的方法是對影像進行多級重采樣,切分成瓦片,構(gòu)建遙感影像瓦片金字塔模型,通過犧牲存儲空間換取響應(yīng)速度方面的高效。
金字塔(Pyramid)一詞應(yīng)用到計算機領(lǐng)域最早出現(xiàn)于Lance Williams在1983年發(fā)表的“pyramidal parametrics”一文中,為了減少對原始影像進行縮放訪問時的反復(fù)計算機開銷,文中提出采用“pyramidal parametrics”方法對圖像進行過濾和采樣,預(yù)先生成一列分辨率連續(xù)降低的圖像以增加瀏覽順暢和減少瀏覽時的走樣變性。影像金字塔是以原始圖像為基礎(chǔ)通過重采樣依次生成不同比例尺的各層影像數(shù)據(jù),并且各層均是以相同大小的多個切片文件進行保存。服務(wù)器在處理用戶的請求時,首先定位到比例尺最接近的一層數(shù)據(jù)上,然后查詢出覆蓋用戶請求范圍的影像切片并返回給客戶端,最后在網(wǎng)頁完成拼接再呈現(xiàn)給用戶。在上述過程中,服務(wù)器只需要將用戶感興趣的少量數(shù)據(jù)傳輸給客戶端,并且不需要實時計算生成,因而響應(yīng)速度很快,幾乎可以實現(xiàn)實時縮放。
傳統(tǒng)并廣泛使用的影像金字塔建立技術(shù)是一種逐級建立的方式,因為每級金字塔的數(shù)據(jù)均來源于上一級。逐級建立的方式雖然實現(xiàn)較為容易,但是處理效率較低,因為每級金字塔會在創(chuàng)建時寫入,建立下一級時又會讀取一遍,這種模式下,當(dāng)影像較大的時候,例如數(shù)百GB,建立金字塔的時間會很漫長,無法滿足海量影像數(shù)據(jù)快速處理需求。
有鑒于此,特提出本發(fā)明。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于克服現(xiàn)有技術(shù)的不足,提供一種用于快速建立影像金字塔的IO線程計算方法,具有更高吞吐量和計算效率,能夠?qū)A坑跋駭?shù)據(jù)進行高效處理,設(shè)計和實現(xiàn)多線程流水線計算方法,降低整體的IO數(shù)據(jù)量,快速構(gòu)建影像金字塔。
為解決上述技術(shù)問題,本發(fā)明采用技術(shù)方案的基本構(gòu)思是:
一種用于建立影像金字塔的IO多線程計算方法,包括:
將原始影像數(shù)據(jù)根據(jù)原始影像的空間分辨率分配到影像金字塔的對應(yīng)層,然后在該層將原始影像數(shù)據(jù)切割為瓦片文件;
順序讀取原始影像瓦片數(shù)據(jù)并重采樣填充到第1級緩存區(qū)中;
根據(jù)第1級緩存區(qū)中的影像內(nèi)容生成第2級至最頂級緩存區(qū)中的部分行。
進一步的,上述用于建立影像金字塔的IO多線程計算方法,在所述順序讀取原始影像數(shù)據(jù)并重采樣填充到第1級緩存區(qū)中之前還包括:按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大??;每級別緩存區(qū)對應(yīng)一層影像金字塔。
進一步的,上述用于建立影像金字塔的IO多線程計算方法,所述按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大小中,確定第1級緩存大小的原則是需要確保影像數(shù)據(jù)經(jīng)過多次重采樣后最終能夠在頂層金字塔中保留至少1行像素,中間各個級別的緩存要求能夠至少保留前一級重采樣的結(jié)果并且不少于一個預(yù)定義的函數(shù)。
進一步的,上述用于建立影像金字塔的IO多線程計算方法,進行所述順序讀取原始影像數(shù)據(jù)并重采樣填充到第1級緩存區(qū)中,根據(jù)第1級緩存區(qū)中的內(nèi)容生成第2級至最頂級緩存區(qū)中的部分行的操作過程中,使用四個獨立的線程并發(fā)執(zhí)行:
(1)原始影像數(shù)據(jù)讀取線程;
(2)0級到1級金字塔重采樣線程;
(3)2級到頂級金字塔重采樣線程;
(4)金字塔緩存區(qū)寫入線程。
一種實施上述方法的系統(tǒng),包括:
原始影像處理單元:被配置為將原始影像數(shù)據(jù)根據(jù)原始影像的空間分辨率分配到影像金字塔的對應(yīng)層,然后在該層將原始影像數(shù)據(jù)切割為瓦片文件;
影像讀取單元:被配置為順序讀取原始影像瓦片數(shù)據(jù);
影像處理單元:被配置為將原始影像瓦片數(shù)據(jù)重采樣填充到第1級緩存區(qū)中;根據(jù)第1級緩存區(qū)中的影像內(nèi)容生成第2級至最頂級緩存區(qū)中的部分行。
進一步的,上述用于建立影像金字塔的IO多線程計算系統(tǒng),還包括
緩存區(qū)分配單元:被配置為按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大?。幻考墑e緩存區(qū)對應(yīng)一層影像金字塔
采用上述技術(shù)方案后,本發(fā)明與現(xiàn)有技術(shù)相比具有以下有益效果:
本發(fā)明通過對海量影像數(shù)據(jù)進行高效處理的影像金字塔構(gòu)建方法,在加載原始影像和保存影像文件操作過程中,用多線程并行的計算模式,有效的將IO時間和金字塔計算時間重疊在一起,降低整體的IO數(shù)據(jù)量,實現(xiàn)快速構(gòu)建影像金字塔。
附圖說明
圖1是本發(fā)明用于建立影像金字塔的IO多線程計算方法中,首次讀取原始影像數(shù)據(jù)并重采樣到第1級緩存區(qū)后各個級別緩存區(qū)中受影響的范圍;
圖2是再次讀取讀取原始影像數(shù)據(jù)并重采樣到第1級緩存區(qū)后的狀態(tài);
圖3是本發(fā)明多線程并發(fā)構(gòu)建影像金字塔流程圖;
圖4是本發(fā)明方法對圖像處理前的原始圖像;
圖5是本發(fā)明方法對圖4處理后的顯示影像。
具體實施方式
下面結(jié)合附圖和具體實施例,對本發(fā)明作進一步說明,以助于理解本發(fā)明的內(nèi)容。
如圖1-2所示,一種用于建立影像金字塔的IO多線程計算方法,包括:
將原始影像數(shù)據(jù)根據(jù)原始影像的空間分辨率分配到影像金字塔的對應(yīng)層,然后在該層將原始影像數(shù)據(jù)切割為瓦片文件;
按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大??;每級別緩存區(qū)對應(yīng)一層影像金字塔;
順序讀取原始影像瓦片數(shù)據(jù)并重采樣填充到第1級緩存區(qū)中;
根據(jù)第1級緩存區(qū)中的影像內(nèi)容生成第2級至最頂級緩存區(qū)中的部分行。
影像金字塔模型是一種多分辨率、規(guī)則化的空間格網(wǎng)模型,影像金字塔以原始遙感影像作為底層,也就是分辨率最高的層,經(jīng)過重采樣建立一系列地理空間范圍相同但分辨率由高到低的多級分辨率影像集。
本發(fā)明通過在內(nèi)存中為各級金字塔分別建立獨立的緩存,并使用流水線計算模式實現(xiàn)數(shù)據(jù)的IO和重采樣過程,能夠顯著降低整體的IO數(shù)據(jù)量,大幅度提升金字塔的生成效率。因此首先按照金字塔的采樣比例和內(nèi)存使用限制確定各級別緩存的大小,每個級別緩存區(qū)對應(yīng)一層影像金字塔;緩存區(qū)域的劃分,要保證使頂層金字塔影像(64×64或128×128大小以內(nèi))會完整的緩存在內(nèi)存中,確定第1級(針對原始影像采樣一次后形成的級別)緩存大小的原則是需要確保影像數(shù)據(jù)經(jīng)過多次重采樣后最終能夠在頂層金字塔中保留至少1行像素,中間各個級別的緩存要求能夠至少保留前一級重采樣的結(jié)果并且不少于一個預(yù)定義的函數(shù)(如256行或128行),其中預(yù)定義函數(shù)指對上一層影像執(zhí)行重采樣操作所依據(jù)的規(guī)則,如DPP=360.0/(2i×512)i=1,2,3…n)。
(1)影像瓦片金字塔快速構(gòu)建
S11.首先采用地圖投影方式將地球上的經(jīng)緯度坐標(biāo)信息轉(zhuǎn)化到一個二維平面上,然后將這個二維平面劃分成規(guī)格相同的網(wǎng)格,其中每個網(wǎng)格具有相同的像素大小,同一層的網(wǎng)格分?jǐn)傁嗤牡乩砜臻g范圍且每一像素代表相同的經(jīng)度或緯度的數(shù)值(即Degree per pixel,簡稱DPP),
其中:
DPP=360.0/(2i×512),
其中i為層號,512是網(wǎng)格水平方向上的像素大小,360.0是經(jīng)度的取值范圍大小。
為了實現(xiàn)多分辨率遙感影像間的平滑縮放瀏覽效果,相鄰層之間的空間分辨率通常是兩倍的關(guān)系,DPP值越大說明每像素代表的經(jīng)度或緯度范圍更大,圖像越粗糙;相反DPP值越小說明每像素代表的經(jīng)度或緯度范圍更小,圖像越精細(xì)。
S12.對所有的網(wǎng)格進行統(tǒng)一的編碼,經(jīng)過編碼的網(wǎng)格稱之為瓦片,每個瓦片由層號、列號和行號唯一確定,同一層內(nèi)的瓦片存在著瓦片編號到地理空間范圍的一一映射關(guān)系。每一層列數(shù)和行數(shù)均是上一層的兩倍,因此瓦片總數(shù)將是上一層的四倍。例如第一層瓦片數(shù)量為1行2列、共兩個瓦片,則第二層瓦片數(shù)量為2行4列、共八個瓦片,第三層為4行8列、共32個瓦片……以此類推,假設(shè)瓦片金字塔的總層數(shù)設(shè)為20,則瓦片總數(shù)達到了733007751850個,整個金字塔總數(shù)據(jù)量達到了PB(petabyte)級,瓦片金字塔的構(gòu)建不是一蹴而就的,而是一個持續(xù)構(gòu)建的過程。構(gòu)建開始,瓦片金字塔沒有真實的瓦片數(shù)據(jù),當(dāng)獲取到新地理范圍的原始影像時,根據(jù)該影像生成一部分瓦片數(shù)據(jù),不斷重復(fù)該獲取和生成的過程,整個瓦片金字塔的數(shù)據(jù)逐漸得到填充。
傳統(tǒng)的遙感影像瓦片金字塔的構(gòu)建方法有:
先采樣后切割;首先根據(jù)原始影像建立多層分辨率影像,然后對每層影像進行分片切割;如果某層影像沒有完成還需加載前一層的影像數(shù)據(jù)再次重采樣,每層影像完成后切割為瓦片文件并保存,其中影像的加載和保存操作都是執(zhí)行IO(Input/Output)操作;先采樣后切割的瓦片金字塔構(gòu)建,通常由于單幅遙感影像的數(shù)據(jù)量非常大,重采樣生成的新一層的影像數(shù)據(jù)也較大,由于受到內(nèi)存大小的限制,每生成新的一層影像數(shù)據(jù)時都需要將其從內(nèi)存保存至硬盤,當(dāng)完成了預(yù)定的分層之后,在進行影像切割時又需要重新加載相應(yīng)層的整幅影像數(shù)據(jù),這種方式雖然生成瓦片后只需要保存一次即可,但是中間過程的影像加載和保存操作需要執(zhí)行大量的IO操作,不適合采用集群對單幅影像進行分布式并行構(gòu)建。
本發(fā)明方法綜合考慮海量影像數(shù)據(jù)進行高效處理的影像金字塔構(gòu)建方法,涉及和實現(xiàn)多流程流水線計算模式,降低整體的IO數(shù)據(jù)量,快速構(gòu)建影像金字塔。
本發(fā)明按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大小后,利用先切割后采樣的構(gòu)建方法,首先將原始影像進行切割成瓦片,然后基于已生成的瓦片生成其他層瓦片;即將每層中每個瓦片的創(chuàng)建視為一個獨立的任務(wù),將原始影像數(shù)據(jù)根據(jù)原始影像的空間分辨率分配到影像金字塔的對應(yīng)層,然后在該層將原始影像數(shù)據(jù)切割為瓦片文件進行保存;下一層影像金字塔加載上一層影像金字塔的影像瓦片數(shù)據(jù)進行重采樣計算生成新的瓦片數(shù)據(jù)進行保存。
在此過程中,為了盡量減少執(zhí)行IO操作,本發(fā)明在必須的“加載原始影像數(shù)據(jù)”和“保存影像瓦片文件”步驟執(zhí)行IO操作:順序(按行從上到下)讀取(即加載)原始影像數(shù)據(jù),并對其重采樣填充到第1級緩存區(qū)中保存,第1級緩存區(qū)影像完成后,根據(jù)第1級影像內(nèi)容生成第2級緩存區(qū)部分行,第2級緩存區(qū)影像完成后,根據(jù)第二級影像內(nèi)容生成第3級緩存區(qū)部分行……按照此過程,直至生成最頂級緩存區(qū)的部分行。
在此過程中,除了第1級緩存每次都是完整的更新外,其他各級別都是利用新數(shù)據(jù)進行部分填充,如果某個級別的緩存區(qū)滿了,則創(chuàng)建一個新的緩存區(qū),并將原來的緩存內(nèi)容寫入文件。
此過程中,如圖3所示的,使用四個獨立的線程并發(fā)執(zhí)行:
1、原始影像數(shù)據(jù)讀取線程;
2、0級到1級金字塔重采樣線程;
3、2級到頂級金字塔重采樣線程;
4、金字塔緩存區(qū)寫入線程。
原始影像數(shù)據(jù)所在層在切割過程中可以隨著瓦片的生成先將部分緩存直至完全緩存,由于每個瓦片的創(chuàng)建都是獨立的,每個不相交的的瓦片子集可以進行一個線程,多個線程并行執(zhí)行同層瓦片的創(chuàng)建任務(wù),這樣先緩存的瓦片先被讀取,加快下一層瓦片的生成。根據(jù)原始影像數(shù)據(jù)建立多層瓦片之前,可將原始影像數(shù)據(jù)視為一層瓦片進行多線程處理,進而快速創(chuàng)建多層瓦片。
原始影像數(shù)據(jù)讀取線程完成對加載的原始影像數(shù)據(jù)瓦片的讀取,將讀取結(jié)果傳遞給0級到1級金字塔重采樣線程,0級到1級金字塔重采樣線程完成計算后將結(jié)果保存到第1級緩存區(qū)中,2級到頂級金字塔重采樣線程加載第1級緩存區(qū)內(nèi)容,逐級生成每級影像內(nèi)容并逐級保存到所在級別緩存區(qū)中;兩個重采樣線程在執(zhí)行過程中發(fā)現(xiàn)某個級別的緩存區(qū)已滿時,就把該緩存區(qū)內(nèi)容傳遞給金字塔緩存區(qū)寫入線程,以重新分配新的空間作為該級別的緩存區(qū),金字塔緩存區(qū)寫入線程把傳遞過來的緩存區(qū)內(nèi)容寫入新的緩存區(qū)文件后釋放原來的空間。
通過上述構(gòu)建過程,確保原始影像數(shù)據(jù)被讀取1次,其它各個級別緩存僅被寫入1次(無中間讀取過程)。
這四個線程是同時執(zhí)行操作的,隨著原始影像數(shù)據(jù)瓦片的生成,每個線程只完成自身的工作,例如原始數(shù)據(jù)讀取線程將讀到的數(shù)據(jù)傳遞出去后,并不會等待后續(xù)操作處理完成,而是直接讀取下一個范圍內(nèi)的原始影像數(shù)據(jù);本發(fā)明利用多線程實現(xiàn)影像數(shù)據(jù)的IO及重采樣,可以將海量遙感影像金字塔的構(gòu)建擴展到同層之內(nèi)以及層與層之間的并行創(chuàng)建,有效地將IO操作時間和金字塔重采樣計算時間重疊在一起,總體上減少了處理時間,大幅提升金字塔的生成效率。
所述“加載原始影像數(shù)據(jù)”與“保存影像文件”步驟執(zhí)行IO操作可通過現(xiàn)有適合的圖像處理軟件的輸入圖像功能將影像載入,軟件處理過后,可將圖像通過軟件的輸出功能將處理后的影像按所需格式保存到存儲介質(zhì)。
影像金字塔中第N層的x個像素采樣為第N+1層的一個像素。則x即為N層的采樣密度。采樣密度越小,可以得到越連續(xù)的縮放效果,但對應(yīng)金字塔分層數(shù)越多,數(shù)據(jù)冗余加大,占用更多磁盤空間;反之,采樣密度越大,影像金字塔數(shù)據(jù)量越小,但縮放效果差。因而,在實際應(yīng)用中,要綜合考慮影像大小、實際需求、算法設(shè)計等多種因素,選擇合適的采樣密度。本發(fā)明中,采樣密度=N×N;其中(N=2,3,4…)。
常用的重采樣算法主要有:最鄰近點法、取平均值法、雙線性插值法和三次立方卷積等。對于灰度圖像,本發(fā)明采用取平均值法和線性內(nèi)插法生成金字塔影像;或者采用雙三次卷積重采樣,該方法采樣后的圖像灰度效果較好,但速度較慢。對于專題圖像,不能使用平均值法和線性內(nèi)插法生成金字塔影像,本發(fā)明采用最鄰近點法生成影像金字塔,如圖4、5所示的,為某圖像處理前后的狀態(tài),由于專題圖像的局部細(xì)節(jié)具有特殊性,如果通過平均值壓縮算法進行重采樣,必然丟失所需的專題內(nèi)容,當(dāng)圖像解壓縮復(fù)原以后,必將丟失所需內(nèi)容細(xì)節(jié),達不到想要的效果。實際上,影像金字塔構(gòu)建過程就是一種數(shù)據(jù)壓縮過程,因此應(yīng)綜合考慮實際應(yīng)用中的精度要求和效率要求,選擇適當(dāng)?shù)膲嚎s算法用于構(gòu)建影像金字塔,以期能夠盡量降低細(xì)節(jié)或特征損失。
合理有效地利用內(nèi)存是算法成敗的關(guān)鍵因素。影像數(shù)據(jù)是行列順序存放的,因而在許多算法中,每次加載的數(shù)據(jù)常常取作幾行或幾列。由于處理的影像大小不同,則每次加載的數(shù)據(jù)量就不同。當(dāng)數(shù)據(jù)量較大時,在內(nèi)存小的計算機上算法無法運行;當(dāng)數(shù)據(jù)量較小時,內(nèi)存又得不到有效利用。因而,本發(fā)明算法根據(jù)具體運行計算機的內(nèi)存大小來調(diào)整每次加載數(shù)據(jù)量的多少;在內(nèi)存允許的情況下,盡可能加載多的數(shù)據(jù)量。
另一方面,本發(fā)明還提供了一種用于快速建立影像金字塔的IO多線程計算系統(tǒng),包括:
原始影像處理單元:被配置為將原始影像數(shù)據(jù)根據(jù)原始影像的空間分辨率分配到影像金字塔的對應(yīng)層,然后在該層將原始影像數(shù)據(jù)切割為瓦片文件;
影像讀取單元:被配置為順序讀取原始影像瓦片數(shù)據(jù);
影像處理單元:被配置為將原始影像瓦片數(shù)據(jù)重采樣填充到第1級緩存區(qū)中;根據(jù)第1級緩存區(qū)中的影像內(nèi)容生成第2級至最頂級緩存區(qū)中的部分行;以及
緩存區(qū)分配單元:被配置為按照金字塔的采樣比例與內(nèi)存使用限制確定各個級別緩存區(qū)的大??;每級別緩存區(qū)對應(yīng)一層影像金字塔。
其中,原始影像處理單元通過圖像加載模塊將原始影像數(shù)據(jù)加載出來通過圖像讀取模塊傳遞至圖像處理模塊進行切割,切割完成后的影響文件通過圖像輸出模塊輸出以備影像讀取單元獲取。
本系統(tǒng)使影像金字塔的建立過程中,計算過程具有更高吞吐量和計算效率;能夠?qū)A坑跋駭?shù)據(jù)進行高效處理;設(shè)計和實現(xiàn)多線程流水線計算方法;降低整體的IO數(shù)據(jù)量以快速構(gòu)建影像金字塔。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。