栅格那点儿事(四E)
柵格金字塔
如果上面的部分都已經看過了,那么如何在ArcMap中更好的渲染一個柵格數據你已經知道了??蓛H展示好一個柵格數據是不夠的,我們還需要知道如何快速的展示一個柵格數據。
講金字塔之前,先解釋一下重采樣的概念。
現如今我們有的影像數據大都是幾十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(老版本在環境變量中設置),運行完工具金字塔文件就被刪除掉了。
關于柵格渲染的內容到這里就結束了。金字塔的內容一向是被關注度最高的,如果有問題我沒有說清楚,或者還有那些沒有提到的,歡迎在下面留言,我看到了會再做修改。
預告一下,再接下來要更新的是Image Analysis Window的內容,涉及柵格數據的顯示,山影圖,Pan數據的數據融合,NDVI,影像正射糾正等高級一些的內容。如果你感興趣,就敬請期待哈~ ~\(≧▽≦)/~
總結
以上是生活随笔為你收集整理的栅格那点儿事(四E)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis开发规范
- 下一篇: 如何选择一款合适的流量计