在使用柵格數據時,黑邊和白邊問題比較困擾我們,╮(╯-╰)╭ ,丑丑地如下所示:
vcHQvtnSu8/Co6yw78TjuPjK/b7dJmxkcXVvO7uv17EmcmRxdW87o6y78tXfuPzIt8fQtcTLtcrHJmxkcXVvO9X7yN0mcmRxdW87o7o8L3A+DQo8cD4mbmJzcDs8L3A+DQo8cD4mbmJzcDs8L3A+DQo8aDEgaWQ9"option-1-柵格計算器">Option 1 柵格計算器
在去黑邊之前最先需要了解的是黑邊的像元值是什麼? 可以使用 Identify 工具 查查看。 例如這份數據是 0。
這時,你也許會想到設置圖層背景值的色彩可以吧?
如果僅為了顯示使用,是可以解決問題的,但傳統意義上的去黑邊,我們一般理解成柵格數據的處理,也就是從存儲上修改特定值(本例中是 0)值為 Nodata。
單波段數據處理起來常常相對容易些,最常用的工具就是 柵格計算器/Raster Calculator 了。Raster Calculator 可以通過輸入的Python語法的表達式,對當前數據框內的柵格圖層進運算。它是個非常實用的柵格數據處理工具,如果你想 Dive In ,點 這裡了解 Raster Calculator 的工作原理。
例如這個需求中僅需要一個簡單表達式,使用到SetNull函數,如下所示:
其中,表達式是 SetNull(“RasterLayer” == 0 , “RasterLayer” )
這樣執行工具之後,所有的 0 值變成了 Nodata,徹底去了黑邊。
多波段數據同樣會受到黑邊的困擾,而且現實情況往往沒有單波段數據那麼理想,僅通過一個表達式就可以搞定。例如,我們常用的影像底圖數據,通常有三個波段,通過包含RGB三個波段的一組值來表示像元值,例如 (0,255,129)。我一般會根據需要處理的數據量的多少給出不同的處理方法建議:
同樣第一步需要確認黑邊值是什麼?本例中是 (0,0,0)
ArcMap的 Windows 菜單中有 Image Analysis 。在 Image Analysis 窗口中的 Processing 部分可以對當前數據框中的圖層賦予函數或函數鏈,從而對柵格數據實時處理。
在彈出的窗口中,在 fx行右鍵插入函數,例如這個需求中會使用到 Mask Function。
設置 Mask Function,(0,0,0) 組合是無效值。為什麼選擇 All 而不是 Any? 這個答案很顯見,同時都為0的像元值才是無效值,否則不是,例如(1,255,0)是有效的。或者說各個波段的0值是and關系,而不是or。
這樣帶有函數的新柵格圖層會自動加入 ArcMap 的 TOC,看起來萬事大吉,然而這裡需要說明下,這個圖層需要Export到硬盤上的某個位置,它目前還是個臨時數據,當layer被移除掉,這個結果就不復存在。
所以,最後重要的一步,導出數據。
( ̄ˇ ̄) 這種方法,還適用於具有多種無效值的情況。例如,除了(0,0,0) 還包含 (255,255,255) :
我們需要做的僅是繼續增加柵格函數。在 Function Template Editor 中函數們順序相接,像個環環相接的鏈條,所以稱為 ”函數鏈/ Function Chain“,咦,好像跑題了。請繼續看如何設置無效值:
這樣就實現了去掉兩組無效值。
那麼擺在你面前的數據不是一個,而是“很多”呢?凡事保證質量之後,重復工作多了之後就同時需要保證效率,那麼這種方法適用於“很多”、“大量”……
ArcGIS 的鑲嵌數據集是個理想與實用兼備的影像數據管理模型,我們用它來“處理”大量柵格數據也是個不錯的選擇。
在地理數據庫中創建鑲嵌數據集,並將數據添加到鑲嵌數據集中,之後:
在”之後“之前的預備動作,此文中不贅述,但是你可以看這篇了解這些內容。
在鑲嵌數據集中可以使用工具 Define Mosaic Dataset Nodata 工具,對數據的無效值進行定義。
從而批量去除了無效值。
鑲嵌數據集本身也支持柵格函數,類似影像數據窗口中函數模板的設置,同樣可以設置函數鏈來實現一些復雜的要求。
有關鑲嵌數據集函數,也可以參考這篇。
常見的操作一般就這幾種,總結下,單波段優先考慮柵格計算器;多波段可以使用影像分析窗口;如果數據量較大,建議使用鑲嵌數據集。
ArcGIS Desktop 雖然不是專業做影像數據處理的平台,但是擁有的這些功能能很大程度上解決影像處理的常見問題。寫這一篇是因為不少用戶遇到類似問題,集中總結下比較有意義,希望給大家一些思路,下次遇到此類的問題時,自己動手試試吧。