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