1. 程式人生 > >金字塔和重取樣的解析

金字塔和重取樣的解析

金字塔的建立過程其實也就是一個重取樣的過程,這是最重要的一點。

如果上面的部分都已經看過了,那麼如何在ArcMap中更好的渲染一個柵格資料你已經知道了。可僅展示好一個柵格資料是不夠的,我們還需要知道如何快速的展示一個柵格資料。

講金字塔之前,先解釋一下重取樣的概念。

現如今我們有的影像資料大都是幾十M到幾十G不止。這樣大小的柵格資料在ArcMap中是不能直接顯示的。還記得我們前面舉的那個例子麼,一個606.903 MB的3波段8bit的柵格資料,共有15781列13442行。這個行列數已經是目前我們所使用的螢幕解析度的10倍以上,也就是說在一個1600x900的顯示器上,是根本沒有辦法把這麼多象元全部顯示出來的。所以,在顯示的時候會進行柵格資料的重取樣(Resample),得到能夠適應顯示器的一個較小行列數的柵格。簡單一點說,可以理解為柵格資料的抽稀。

ArcGIS中提供的重取樣(Resample)的方法有最鄰近(Nearest), 雙線性(bilinear),卷積(cubic),和Majority。這四種方式決定了結果柵格的象元值與原始資料象元值之間的關係。具體可以在Layer Properties圖層屬性的Display頁下進行設定。


稍微羅嗦一下這四種方式的具體取值方法,不感興趣的可以跳過。

最鄰近,直接選取距離當前位置最近的象元值。此方法不改變底層像元值,速度最快。

雙線性,通過當前位置的四個最鄰近像元取值,具體就是根據這四個像元到中心的加權平均距離計算得到。

卷積,類似雙線性,但是需要16個最鄰近的像元參與運算。

眾數,選擇視窗範圍內出現頻率最高的那個像元值。

小結:根據圖中的選項列表,我們可以看到,對於離散資料,合適用最鄰近與眾數,而連續型資料一般適合雙線性和卷積。結合上文的取值方法具體來說,最鄰近的結果最忠實於原資料,幾何變形最小,眾數較最鄰近結果平滑。雙線性和卷積得可以得到平滑的結果,但是都需要消耗系統資源進行重取樣的計算。尤其是卷積需要更多的像元參與運算,消耗的時間也會更長。此外,卷積的結果柵格的值域範圍可能超出原有資料的值域範圍,對於精度要求很高的高程資料,這種重取樣方式就不適用來。

現在我們再來說說金字塔。

為啥要使用金字塔捏?

介個主要還是為了提升柵格資料的顯示的效率了。試想一下我們要載入一個柵格資料,電腦要進行的操作是將所有的資料全部從磁碟/資料庫中取出來,然後經過重取樣顯示在螢幕上是要經過一段時間的。而對於現今常用的柵格資料來說,這個資料量一般都是幾百M甚至幾十G的,且不說從磁碟中讀取出來需要時間,就是重取樣的過程,也是要消耗很長的時間的。所以呢,通過每個比例尺下顯示最合適解析度的柵格,每次讀取返回的資料量變小,顯示的效能也就提升了。為什麼資料量變小了呢,就是說在全圖範圍下顯示較低解析度的柵格(要小很多很多),而在大比例尺下,由於已經放大到一個較小的區域,所以要返回的資料量也還是很小的。這也就是金字塔檔案能夠提示柵格資料顯示效能的原因了。

金字塔的建立過程其實也就是一個重取樣的過程。而金字塔檔案則是一組不同解析度的柵格的組合。但是由於金字塔檔案中,柵格的解析度逐級遞減,也就是說第2級金字塔是第1級金字塔解析度的2倍,這種遞減的方式使得Majority這種取樣方式就不再適用了,取樣方式僅限其他三種。


不是每一個數據都帶有金字塔檔案。好像MrSID, ECW這類檔案,出於他們的壓縮演算法,每個檔案都包括內建的金字塔。而tif,img格式之類的檔案都是需要單獨建立的。也就是在ArcMap中第一次載入的時候,系統會提示是否要建立金字塔檔案?點選是,就會開始建立的過程了。

 

建立好的金字塔是什麼格式的呢?

首先要說的是,不管建立了多少層級的金字塔,都是存在同一個檔案裡面,這個檔案的檔名與原始柵格資料同名。然後需要注意的是,在10.0版本之前,所有ArcGIS支援讀寫的柵格的金字塔檔案都是.rrd為字尾的(reduced resolution dataset),而10.0版本後,藉由GDAL的強大功能,除img格式的金字塔仍是rrd之外,其他格式的柵格金字塔更新為.ovr格式(overview)。

對於傳統的rrd格式的金字塔,對不同層級的金字塔柵格均不支援壓縮,而每一級金字塔的解析度都是上一級的2倍,所以每一層級的金字塔檔案的大小都可以直接計算出來。由於是按照1/4的級數遞減,…1/4^n,整個金字塔檔案的資料量前三級金字塔佔了大部分。具體數值參見下表。


對於新推出的.ovr格式的檔案來說,其最大的優點就是提供LZ77或者JPEG的壓縮了。如何選擇了jpeg壓縮,可以進一步選擇壓縮質量(0-100),預設值仍然是75。但是要注意的是,要使用JPEG壓縮的資料格式必須能夠支援按照Jpeg規範儲存資料。使用壓縮後,顯而易見的好處就是結果金字塔檔案要比不壓縮的要小,ovr檔案大概是原始未壓縮大小的8%。如果金字塔檔案也進行了壓縮(jpeg壓縮),這個比率更可以達到2%。具體數值參見下表。

 

金字塔的層級到底建多少級最好呢?

這個問題可以說是金字塔所有的問題中被問到的最多的了。大家都知道建立金字塔可以加速柵格資料的顯示,那麼是不是建的層級數越多越好呢?可以預見到的,金字塔的層級越多,所佔的磁碟空間也就越大。在建立金字塔的時候,建立層級越多所消耗的時間也就越長。

更重要的是,不知道你有沒有想過,建立10-20級的金字塔是否有意義呢?

既然金字塔的原理是對原始柵格資料的向下重取樣,也就是,每增加一級金字塔,解析度x2,那麼建到第16級的時候,解析度已經達到原始資料的2的16次冪65536倍了,即使原始資料是10cm的高解析度航空影像,最高一級金字塔的解析度也有6554m了,是不是一個很誇張的數字?也就是說,如果原始影像是用在1:500的比例尺下的,最上一級金字塔只會在1:3276萬的比例尺下才會取到。更何況,在多次重取樣的過程中,原始資料的資訊也會丟失大半。什麼意思呢,就是在最上面一級金字塔上只能看到朦朧模糊的抽象畫了。

所以呢,一般建議金字塔建立6-7級就可以滿足效能上的需求了。大家也可以注意一下,比如ArcGIS online上的影像底圖,或者Google Maps上的影像資料,都是多解析度的,在大比例尺下使用高解析度的航空影像或者高精度衛片,而在省級或者國家範圍的都是用的低解析度的衛星影片的。解析度從20cm到1m, 30m,60m,100m等等…這樣的方式既可以保證顯示的速率,又可以保證資訊的完整性。

說到金字塔的層級,那麼我們在建立金字塔的時候,如何設定要建立的層級的數量呢?

在10.0及以後的版本中,不管是在ArcCatalog中,柵格資料上右鍵建立金字塔(build pyramid),還是通過GP工具進行建立,都可以在介面中直接輸入。但是老版本的使用者在執行工具時,並沒有這個引數,這個時候就需要在環境變數裡面進行設定了。見下圖。

 

另外,老版本中對於金字塔這一個引數也僅有present/absent這兩種選擇,是看不到具體建立了多少層級的。只有在10.0以後的版本中,才能在柵格資料的屬性列表中看到具體建立了多少層級的金字塔,見下圖:

 

如何刪掉柵格的金字塔呢?

由於在第一次將柵格資料載入到ArcMap時會自動提示金字塔的建立,可能慌忙之中建立的金字塔並不符合自己的要求,就會涉及到將現有金字塔刪掉重建的問題了。如果是基於檔案方式儲存的柵格資料,直接瀏覽到當前資料夾,刪到字尾為rrd或者ovr的檔案,就可以快速的刪除金字塔檔案。但是如果資料入庫了,比如file geodatabase,如何刪除呢?同樣,我們也可以通過執行build pyramid工具。但是這個時候,需要將pyramid level設定成0(老版本在環境變數中設定),執行完工具金字塔檔案就被刪除掉了。

 http://blog.csdn.net/redhairp/article/details/7310202