03-SNAP處理Sentinel-2 L2A級數據(一)


(原創文章,轉載請註明來源!)

前言

本文爲《SNAP與snappy》第3篇博文。本文主要介紹Sentinel-2 L2A數據(也就是Sen2cor大氣校正後的產品數據)的一些基本處理,包括去雲、裁剪、鑲嵌、重採樣、超分辨率合成等操作。先說一下,這篇博文的操作不是一天能後完成的(我寫這篇博客畫了兩天時間)。

博主的電腦配置如下:
運行內存:16G;
CPU: 8 代 i7
操作系統:Win 10,64位系統;
SNAP版本:V6.0.10
中上配置的筆記本電腦。

如果你想SNAP處理的更快一些的話,可以採用以下措施:儘量使運行內存更大;儘可能使用流程圖處理(避免多次的讀寫操作);一般地使用SNAP的gpt(命令行批處理工具)會比使用GUI界面操作更快一些;使用固態硬盤;如果你有大內存的情況(或者分塊操作也是可以)下可以設置設置多進程或多線程操作(snanppy可能更方便),並行處理數據等;使用Linux系統會比Windows快一些。

雲檢測

雲檢測方法

按雲量劃分光學影像的單個像素,可分爲三種情況:

  1. 無雲像素;
  2. 部分有云的像素(混合像元);
  3. 全爲雲的像素。

雲(及其形成的陰影)檢測分類與去除也是光學遙感的一個熱點方向。其難點主要在混合像元的識別,雲與高亮地物的識別(如白色的建築物等),雲陰影(厚雲下比較明顯)等。

雲檢測(分類)可分爲:

  • 閾值法:被歸到物理方法中,如晴空下的白雲,在影像中反射率很高,利用多光譜影像豐富的光譜信息(根據光譜反射率、亮度、紋理特徵等特性)設置一個閾值(也有動態閾值的)即可將其識別出來(高於閾值的部分)。目前動態閾值法還在用。
  • 模式識別法:也就是常說的無監督和監督分類法,只不過是從地物分類變爲了雲分類。分類方法有:神經網絡、支持向量機、聚類、卷積神經網絡等機器學習、深度學習算法等。這是目前主流的雲檢測(分類)方法。
  • 多時相、源分析:前面兩種方法主要針對單源單時相數據進行,但實際上可以利用多時相多源數據數據進行,往往能獲得更好的監測(分類)效果,因爲同一地區不太可能長期都有云覆蓋,無雲的數據往往能提供更好的特徵信息。
  • 綜合法:結合前面所提的兩種或以上的綜合方法監測方法。

去雲方法

掩膜法

其原理爲利用雲檢測(分類)算法的結果創建一個掩膜文件,將光學影像中的雲覆蓋部分直接掩膜掉,乾脆利落,避免煩惱(效果好壞取決於雲檢測的精度)。

再談Sen2Cor插件

在本專欄02篇中介紹了用Sen2Cor對Sentinel-2 L1級做大氣校正批處理。Sen2Cor做大氣校正,已經有了許多博客文章。

但是,實際上Sen2Cor在大氣校正時,會對雲、雲陰影、捲雲、雪、水體等進行場景分類(可以看作地物分類,只是雲是大氣層的物體),這是絕大多數博文未曾提到的,未曾發現這些信息,意味這些信息很難被利用上。

Sen2Cor的主要場景分類流程如下(更多細節請查看Sen2Cor官方文檔):
在這裏插入圖片描述
實際上,如果你仔細對比過Sen2Cor大氣校正前後的Sentinel-2 L1C和L2A級數據,會發現Sentinel-2 L2A的數據文件多了許多文件。博主這裏打開的是Sen2Cor處理前後的數據集(L1C數據按原始分辨率做大氣正):
在這裏插入圖片描述
L2A(大氣校正後的)數據與L1C數據的差別在於:

  1. 多了Index Coding文件夾:
    裏面是quality_scene_classification屬性表文件,記錄的是場景分類結果的編碼值、數據類型等描述性信息。
    在這裏插入圖片描述
  2. Bands文件夾(這個文件是存放柵格數據的)多了quality文件夾: 裏面存放的是質量控制文件: (都可以通過右擊,點擊property查看屬性信息)
    (這裏列出柵格尺寸大小是爲了讓你留意柵格文件的分辨率)
  • quality_aot柵格文件(尺寸:10980X10980): 氣溶膠厚度(AOT, Aerosol Optical Thickness)質量控制文件(無單位),柵格大小爲10980X10980,和B2(波段2)柵格大小相同,表明其分辨率爲10m;
  • quality_wvp柵格文件(尺寸:10980X10980):水蒸汽(Water Vapour, WVP)質量控制文件(單位:cm),分辨率爲10m。
  • quality_cloud_confidence柵格文件(尺寸:5290X5290):雲質量控制的自信度文件(單位:百分比%),柵格大小爲5290X5290,和B5(波段5)柵格大小相同,表明其分辨率爲20m;
  • quality_snow_confidence柵格文件(尺寸:5290X5290)雪質量控制的自信度文件(單位:百分比%),分辨率爲20m;
  • quality_scene_classification柵格文件(尺寸:5290X5290)場景質量分類圖,含12個類別,對於去雲操作而言,需要關注的是DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(雲陰影)、CLOUD_MEDIUM_PROBA(中概率雲)、CLOUD_HIGH_PROBA(高概率雲)、THIN_CIRRUS(薄捲雲)這幾個類別。
    在這裏插入圖片描述
    之前,有人問我是否可以直接可以用這個場景分類圖(儘管很好看)當作地物分類圖,答案肯定是不能,一個是因爲地物類別是很少的,另一個,這裏主要針對的對象不同,不是陸地地表地物,精度很低。不過,你非要用的話,那我也辦法。
  1. Bands文件夾下少了B10波段柵格文件:
    這主要是因爲波段10是捲雲波段,需要的大氣頂部(TOA,Top of Atmosphere)的反射率而不是地表反射率(BOA, Bottom of Atmosphere)。因此,Sen2Cor不會對這個波段做處理。如果你想用這個波段,你需要從L1C數據中提取。
  2. Marks文件夾(柵格掩膜文件)下多了一個scl文件:
    裏面存放的是10類掩膜文件,其實是從場景分類圖中創建的:
    共10個掩膜文件,文件名是很容易理解的,我不再解釋。注意設這裏的掩膜文件大小爲5490X5490,也就是20m分辨率。在這裏插入圖片描述

疊加掩膜圖層

如果你想將掩膜圖像添加到柵格影像上的話,特別注意的是兩者的分辨率應是相同的。

由於scl文件夾下大的掩膜文件都是20m分辨率的,所以我們需要打開一個20m大的波段,以便掩膜圖層疊加20m的灰度影像上。我選擇是波段B8A(20m分辨率的近紅外波段),先雙擊L2A數據的B8A柵格數據文件。

如果你的視圖和我的不一樣,請點擊菜單欄的Window,下拉菜單欄Reset Windows。

點擊右側欄的Mask Manager,將滾動條拉到最後,勾選scl_dark_feature_shadow(可能是雲陰影、山體、高樓等形成的陰影,很難說,不過這部分的像素很難利用,分類時很可能產生誤差,因此,考慮到實際需要,也可以當作雲陰影一起掩膜掉)scl_cloud_shadow, scl_cloud_high_proba, scl_thin_cirrus這四個掩膜文件(不選scl_cloud_medium_proba,這個通常會把許多不是雲的像素囊括進來)。

默認的顏色顯示在圖像上是不明顯的,可以自己設置更明顯的顏色(儘量避免白色、灰色、黑色,因爲這是灰度影像,否則很難看到掩膜圖像和原影像的差別)。也可以重新設置透明度的數值(0.5,相當於50%,這裏我沒有修改)(雲設置爲淺棕紅色,雲陰影設置爲淺湖藍色)。
在這裏插入圖片描述結果如下,還可以,但是:
在這裏插入圖片描述
或許你還想真彩色影像對比看看,看下Sen2Cor的雲及其陰影掩膜文件大的精度如何,能否用於掩膜。這很好辦!
在這裏插入圖片描述

在彈出窗口中保持默認選項, 點擊OK:
在這裏插入圖片描述
結果如下:
在這裏插入圖片描述

點擊Window—>Tile Horizontally(橫向分屏顯示):
在這裏插入圖片描述
默認結果:
在這裏插入圖片描述
查看全圖:在導航窗口(Navigation)點擊下圖中的紅色圈的組件
在這裏插入圖片描述
結果如下:
在這裏插入圖片描述
可以看到右上角的雲識別效果很好,但是左下角的雲似乎識別稍差(特別是雲陰影)。需要說明的是可能不同的數據識別效果是不一樣。總體上還可以。

抱歉!我忘記告訴你,其實,L1C級數據也是帶有掩膜文件的(不過很遺憾的是,在生成Sentinel-2 L1C數據時並沒有進行雲陰影的檢測)。好吧,在這一起展示一下,其實,其帶有的掩膜文件有許多。不過,只需關注這二個就好:
Mask文件夾下的opaque_clouds(不透明雲層,也就是有一定厚度的雲層)、cirrus_clouds(捲雲)在這裏插入圖片描述
展開後可以看到:
opaque_clouds,cirrus_clouds文件下有3種分辨率(10,20,60m)下的掩膜文件
在這裏插入圖片描述
我想做的事是把不透明雲和捲雲疊加到右側的真彩色影像上,由於其分辨率是10m,所以,這裏選擇的10m的掩膜文件(不過實際上,當的影像分辨率爲10m時,只能看10m的掩膜文件)。先點擊一下右側的真彩色影像,以確保後續的掩膜文件的確是疊加在其影像上的。
同樣的操作,我想我不必重複說了:
在這裏插入圖片描述
結果如下:
在這裏插入圖片描述
可以明顯地看到,右上角的雲L1C數據的自帶掩膜效果不是很好,漏了許多範圍,但是左下角部分要優於Sen2cor的掩膜結果。當然,光針對一個數據來說算法好壞,是欠妥的。但是,實際上,不同檢測算法在單一數據上的表現確實可以確定的,因爲你的的確確看到了其在單一數據上結果的好壞。

不過,Sen2Cor的掩膜也有吻合得不錯的情況(這是另一個數據集):
在這裏插入圖片描述
而生成的L1C自帶的檢測算法效果很差。總體來說Sen2cor生成的掩膜文件要好於L1C集數據自帶的掩膜。在這裏插入圖片描述
由於不同的波段含有不同的分辨率且掩膜文件也有不同的分辨率,因此,現在還不能應用掩膜,需要在重採樣或超分辨率合成之後才能其進行掩膜

合成法

其原理利用多時相的影像合成一幅無雲影像,例如:最大NDVI像素法、最好像元法、平均像素值法、加權平均合成法等。視數據多少、影像好壞等條件可以合成周、月、年無雲影像。

Sen2Three插件

這是一個第三方插件,我希望,你能把SNAP官方提供的插件全部安裝上,其實插件的大小都不大,沒必要計較這一點儲存空間了。其實,還有許多的第三方插件的(linux系統的選擇可能更多一些),甚至你可以自己編寫相應的插件(如果你的代碼能力很強的話)。SNAP的第三插件功能強大,你不應該置若罔聞!

在這裏插入圖片描述

由於該插件需要多個Sen2Cor的大氣校正後的影像做輸入,需要做大量運算,並且目前處理近年來的數據2018-2019年可能有時有點bug。所以,後文沒有對其進行測試。更多的操作過程,請看Sen2Three官方文檔。其主要流程如下:
在這裏插入圖片描述

重採樣操作

由於Sentinel-2各波段之間存在三種不同的分辨率,如果不統一爲同一分辨率的數據,許多後續操作都無法進行。例如裁剪、一些指數計算、分類等。注意:需要確保重採樣後數據的輸出路徑有足夠的硬盤存儲空間。

法一:使用常規的柵格重採樣工具

點擊Raster—>Geometric Operations—>Resampling:在這裏插入圖片描述簡單介紹一下參數,就不做結果演示了。
在這裏插入圖片描述
選項①:按定義的源數據參考波段的分辨率確定輸出的分辨率(注意默認選擇的B1是60m的分辨率,如果你保持默認,所有的10m, 20m的波段都會被重採樣爲60m,或許你應該查下Sentinel-2各波段的分辨率)

選項②:按照定義柵格尺寸大小設置分辨率,10m分辨率對應的柵格大小爲10980X10980, 20m分辨率對應的柵格大小爲5490X5490, 60m分辨率對應的柵格大小爲1830X1830

選項③:按照定義像素分辨率輸出值,單位爲m,常用的10,20,60這三個值。

選項④:上採樣(提高分辨率,像素分辨率的數值變小),有最鄰近(Nearest)、雙線性(Bilinear)、三次卷積(Bicubic)三種重採樣方法。

選項⑤:降採樣(降低分辨率,像素分辨率的數值變大),有首個像素值法、最小像素值法,最大像素值法,平均像素值法,中位數像素值法。(例如將10m的分辨率的4個柵格降採樣爲20m分辨率的1個柵格,就取第一個柵格的值;4個柵格中的最小像素值;4個柵格中的最大像素值;4個柵格中的平均像素值;4個柵格中的中位數像素值)

選項⑥:後面這個輔助標記選項(只針對降採樣)較爲複雜,有First,Min,Max, Minmedian, Maxmedian,這個標誌有點像像素索引,我想不到它有何作用,也許別的操作可能需要用到它,一般是不要用到它的,保持默認就行。

選項⑦:創建重採樣的金字塔文件,有利於加快圖像顯示,缺點會增加一些額外的存儲空間,保持默認就行。
更詳細的介紹,請參看幫助文檔Help。

法二:使用專門的Sentinel-2重採樣工具

我更推薦這種方法,這個官方專門爲Sentinel-2重採樣設置的模塊,重採樣的速度會快一些。(博主的電腦採樣默認設置,將1個數據的所有波段(除10m波段外)重採樣爲10m,花了1個半小時左右,處理後,一個數據由原來的近2G增大到了17多G, 後來我發現有些輔助的柵格數據也被重採樣了,所以數據量大了許多,所以需要確保的你硬盤有足夠的存儲空間)
操作流程:optical—>Geometric—>S2 Resampling Processor
在這裏插入圖片描述其參數和普通的柵格模塊重採樣是基本一樣的,不再贅述,點擊run,執行,然後耐心等待就好:
在這裏插入圖片描述
結果:
可以在重採樣的數據集上右擊打開一個RGB圖(Open RGB Image Window):
在這裏插入圖片描述你會發現可以合成系統定義好的RGB圖像變多了,這是因爲它們各波段具有相同的分辨率,可以合成的緣故,當然,你可以自定義用於合成RGB的R、G、B通道文件,用於合成更多的假彩色合成圖;
這裏打開兩個系統定義的RBG圖(一個可以指示農作物生長情況的假彩色合成圖,一個真彩色合成圖,你可以選擇別的RGB合成圖研究一下)
在這裏插入圖片描述

超分辨率合成操作

也許重採樣能能夠解決Sentinel-2波段之間分辨率不同的問題,但是這未必是最優的解決方案,想象一下,你直接將60m的數據重採樣爲10m,將原本的1個柵格變爲36個柵格數據,肯定存在不少偏差。

許多光學影像提供全色影像,用於和多光譜波段融合,以提高其分辨率,然而,Sentinel-2影像並沒有全色波段,這一想法,無法實現。好在,歐空局提供一個第三方插件Sen2Res,可以實現20m,60m的各波段的超分辨率合成,合成爲10m的波段,合成的效果大大優於重採樣的結果。

然而,使用Sen2Res插件的代價也是頗大的,博主使用Sen2Res處理一個Sentinel-2數據集,花了近1天半的時間,花的時間太多。建議只針對雲量很少近無雲的影像進行或者在需要精細分類時使用這個模塊。不過,超分辨率合成效果確實不錯。

大殺器----Sen2Res

Sen2Res安裝

請參照歐空局STEP第三方插件Sen2Res介紹網站的說明,安裝到SNAP上。
在這裏插入圖片描述
我相信,你可以看懂安裝步驟的,建議安裝文件到路徑:C:\Users\用戶名.snap\auxdata 下,這個路徑是存放是輔助文件例如DEM、座標系定義文件以及插件模塊等,以便統一管理SNAP的插件。(當然別的文件夾路徑也是可以的)。後續按上圖步驟安裝即可。
在這裏插入圖片描述
安裝好的結果如下圖所示:
在這裏插入圖片描述
Sen2Res插件是由印度理工學院(該學院在印度的地位相當於國內的清華大學,在印度非常牛逼,感興趣大的話,可以百度一下)的GeoStat項目的成果,得到了歐空局相關專家的認可,同時作爲SNAP的開源第三方插件,可以免費下載。核心代碼是用C++寫的,只是集成爲Java的NetBeans模塊文件(因爲SNAP的模塊也是這樣的模塊設置)。如果你想了解更多關於Sen2Res模塊的細節,可以到網址http://nicolas.brodu.net/recherche/sen2res/查看更詳細的介紹。

Sen2Res超分辨率合成

導入原始的Sen2Cor校正後得到的L2A級數據,點擊Optical—>Sentinel-2 Super Resulotion, 打開Sen2Res超分辨率合成操作面板:
在這裏插入圖片描述
只需要設置輸出目錄就行(注意需要確保輸出路徑具有足夠的存儲空間11G左右):
文件名後綴爲_super_resolved
在這裏插入圖片描述
儘管提供了高級參數設置,但是如果你不懂多線程、多進程操作,Sen2Res超分辨率合成算法的話,請保持默認設置就行:
在這裏插入圖片描述
所以,這背後的操作,僅僅是需要設置一下設置的路徑就行,然後便是漫長的等待(1天半呀,好在,博主有兩個電腦,要不這一半天就沒電腦用了,因爲這個插件默認儘可能會佔用所有的內存,在其運行後別的進程程序很難再使用)。。。。。。

Sen2Res超分辨合成與重採樣對比:

需要放大才能看到其效果,加載影像時可能還需要耐心等待一下,好讓SNAP反應一下。

原始60m的B1波段對比

在這裏插入圖片描述
所以你看到明顯的區別了嗎?(左邊的採樣的B1波段;右邊是超分辨率合成的SRB1波段,前綴SR表示Super Resolution,超分辨率之意)

原始20m的B8A波段對比

在這裏插入圖片描述

假彩色圖對比

R: B11;G:B8;B:B2;
普通重採樣數據:
在這裏插入圖片描述

超分辨合成數據:在這裏插入圖片描述
效果比較:
在這裏插入圖片描述
超分辨率合成後的波段其紋理等細節大大優於原來的波段重採樣的結果,對比度明顯增強(注意,默認打開放大的顯示效果,沒有調整拉伸參數,所以,你不必懷疑是否拉伸的情況造成的),如果你擔心精度的話,可以到Sen2Cor官網查看他們論文上的驗證結果。

裁剪操作

接下來會裁剪兩個Sentinel-2 L2A數據集,然後將這兩個數據集鑲嵌起來。我想要的效果是得到兩個上海市Sentinel-2 L2A數據集中崇明島部分部分。
如果你需要的是不規則的裁剪,那麼需要藉助掩膜工具才能實現,不過這種不規則裁剪最後放出最後出圖時才做,在此之前儘可能地做矩形裁剪。
在這裏插入圖片描述
由於各波段都具有相同的操作了,可以進行裁剪操作了。

點擊Ratser—>Subset(subset, 子集的意思,裁剪即是取子集):
注意,必須先點擊一個數據集,才能點亮子菜單欄的Subset操作。
在這裏插入圖片描述
也許我該說一下它的一些參數:

空間子集裁剪

儘管裁剪的操作很簡單,但是仍有許多細節值得探討的,不排除一些細節很可能影響效果。

通過像素座標範圍確定

直接控制輸出的柵格尺寸範圍,可以設置X、Y軸方向柵格的起點、步長和終點。此外,你還應該知道圖像座標系是以左上角爲原點開始的,向右爲x軸,向下爲y軸。
(注意到博主的裁剪操作了嗎,見上圖原始兩個數據的柵格範圍在x軸向是一致的,因此博主並沒有動x軸的柵格範圍,避免鑲嵌後在x軸生成黑色背景的缺失值。)
在這裏插入圖片描述

通過地理座標範圍確定

如果你知道裁剪範圍的經緯度邊界的話,也可以使用這種方式。(注意:單位是度,而不是度分秒,如果是度分秒的話,可以轉化一下單位)
在這裏插入圖片描述
如果不想自己轉化座標單位爲度的話,可以參照下圖設置顯示帶小數點以度爲單位大的經緯度座標。在右下角的紅色方框可以查看影像中對應的經緯度。從而確定邊界範圍。
在這裏插入圖片描述

通過波段選擇裁剪

原始的Sentinel-2數據除了B1-B12(無B10波段柵格數據)外,還含有許多輔助的柵格數據,根據需要選擇波段,通常只需要選擇原始B1-B12(無B10)這些波段就行,其它的都可以不選以減少數據量。但是,如果你想保留原始的掩膜數據的話,必須勾選quality_scene_classification柵格波段,因爲Masks文件夾的scl文件下得掩膜數據依賴於這個場景分類柵格圖件(博主這裏多選了一個雲質量自信度柵格文件,因爲如果是掩膜去雲的話,這個波段也是可以用來創建掩膜的)。
在這裏插入圖片描述

元數據裁剪

抱歉這個參數不能改的。
在這裏插入圖片描述確認後點OK就行。還有一點必須注意點的是,生成裁剪數據集是在內存中生成的,而不是在硬盤上。
如果你右擊生成的裁剪數據集,再點Colse Product,那麼是會丟失裁剪後的數據。確保數據保存下載來,你需要右擊生成的裁剪數據集,點擊Save。

鑲嵌操作

由於博主目前只處理了一副超分辨率影像,只能用兩幅普通重採樣的數據來做測試。
這是博主裁剪好的同一天的兩個數據Sentinel-2 L2A從採樣後的數據集。
在這裏插入圖片描述

普通鑲嵌操作

點擊Raster—>Geometric Operations—>Mosaicing:
在這裏插入圖片描述
輸入輸出參數(I/O Prameters)
點擊“+”號添加數據,輸入鑲嵌後的數據文件名和輸出目錄:在這裏插入圖片描述
地圖投影定義(Map Projection Definition)

座標系定義(Custom CRS):輸入的Sentinel-2 L2A數據爲正射校正的UTM/WGS投影座標系,爲了以原座標系一致,最好選擇UTM/WGS(Automatic),會自動確定投影帶。

正射校正參數(orthorectification):不需要在選正射校正參數,因爲Sentinel-2 L2A已經經過正射校正了。
鑲嵌邊界(Mosaic Border):原始的邊界經緯度不用動,像素分辨率設置爲10m(需手動設置)
其它,可以點放大鏡看看源數據的範圍和位置。
在這裏插入圖片描述
變量和條件(Variales&Conditions)

變量(Variables):指的是選擇的波段,第一個圓圈添加的是源數據的波段(可以選擇多個),第二個圓圈添加的是變量,可以通過波段運算表達式(Expression)確定,比如新建一個變量B2_add_B3,Expression可設置爲:B2 + B3,這樣鑲嵌後的數據集就會包含這個變量波段B2_add_B3。

條件(conditions):這個是邏輯條件設置,可以設置某一波段的邏輯條件,例如B8>3000等(只會對B8波段大於3000。爲什麼可以是3000?Sentinel-2 L2A大氣校正後反射率放大了10000倍,反射率爲0-10000的整數),某種意義上這可以實現掩膜操作。

這裏沒有創建變量和設置條件:
在這裏插入圖片描述
鑲嵌結果:

在這裏插入圖片描述
可以看到一個很好的鑲嵌效果。注意,如果是不同時間或不同源(Sentinel-2A和Sentinel-2B)的影像鑲嵌可能會有色差(這點許多軟件都很難解決,儘管從理論上說可以做到鑲嵌後無色差,但是,這樣會改動原始數據的像素值,某種程度上會影響後面進一步製圖、波段運算、反演等操作的結果,或許更好的辦法是在製圖、波段運算、反演等後面再鑲嵌會好點)。

這裏是同一天同源的數據,因此,鑲嵌效果很好(儘管我這裏使用有點雲覆蓋的影像,不過不重要了,用於測試而已)。

你會發現有每個柵格波段都多了一個加了_count後綴的波段,這個波段用於記錄每個柵格位置上的像素數值(範圍重疊的位置就會加1,在某個柵格上,三個數據重疊,那麼是該柵格數值爲3)。
打開B1_count,你會發現範圍重疊部分比較亮,因爲較大,爲2,而重疊部分範圍爲1,邊界黑色部分爲0:
在這裏插入圖片描述

如果你打開Pixel Info查看像素值,移動鼠標到對應位置即可顯示爲看到B1_count各柵格的值。
在這裏插入圖片描述
對比:在這裏插入圖片描述

多尺度鑲嵌

這是SNAP爲Sentinel-2等存在不同分辨率的數據而開發的鑲嵌模塊,這個操作允許你對存在不同分辨率的數據進行鑲嵌而無需重採樣。意味着你可以直接對大氣校正後的Sentinel-2數據進行鑲嵌。
點擊Raster—>Geometric Operations—>Multi-size Mosaic:
在這裏插入圖片描述它的參數和普通的Mosaic參數基本一樣的,我不再重複。

輸入輸出參數(I/O Prameters)
在這裏插入圖片描述
地圖投影定義(Map Projection Definition)
在這裏插入圖片描述
變量(Variables)
在這裏插入圖片描述
鑲嵌後有一個缺點:元數據會丟失,Masks裏面的掩膜文件會丟失。不過好在,我們保留了quality_scene_classification波段,可以用它創建雲掩膜。

去雲掩膜操作

這裏去雲操作放在了裁剪和鑲嵌之後,去雲的掩膜操作其是可以放在重採樣或超分辨率合成之後進行的,或許你可以試下操作順序造成的差別。

打開鑲嵌後的quality_scene_classification波段,點擊顏色操作板(Colour Manipulation),你會發現爲了灰度圖(其實,可以從裁剪後的數據集quality_scene_classification波段複製顏色表(或者說是顏色模板也可以)):
在這裏插入圖片描述
打開任意一個裁剪後的數據quality_scene_classification波段保存顏色表(scene_classification.cpd,建議保存在路徑:C:\Users\用戶名.snap\auxdata\color_palettes,該路徑是顏色表存放的目錄)在這裏插入圖片描述
再回到鑲嵌後的quality_scene_classification波段,點擊顏色操作板(Colour Manipulation),導入剛保存的顏色表文件句就好。在這裏插入圖片描述

不過沒有label值,很遺憾只好查看原裁剪數據顏色表中的編碼值(見上一幅圖):我們需要利用DARK_FEATURE_SHADOW,CLOUD_SHADOW,CLOUD_HIGH_PROBA,THIN_CIRRUS,編碼值分別爲2, 3, 9, 10,來創建柵格掩膜文件,不過,鑲嵌後的quality_scene_classification波段的像素值爲浮點值,對應的編碼值爲:2.0,3.0,9.0, 10.0

波段運算創建掩膜

回到鑲嵌後的quality_scene_classification波段,右擊,選擇Band Maths(或者選擇Raster—>Band Maths也可以)
在這裏插入圖片描述
設置波段名(Name),把Virtual(…)前面的勾去掉(這個選項說的是是否創建虛擬波段,虛擬波段不會存儲下來),點擊Edit Expression選項設置表達式。
在這裏插入圖片描述

可以看到波段名(Data sources,可以用於選擇某個波段);Constants(表示重要的常數,例如Pi, E等);Operators(包含算術(加減乘除等運算)、關係(大於、小於等運算)、邏輯運算操作符(與,非運算等));Functions(表示函數,包含基本的數學函數,例如絕對值函數、三角函數等);@爲佔位符,需用波段名或數字(常數Constants)代替。
在這裏插入圖片描述
從Operators從選擇if then else條件語句創建0-1掩膜圖像,滾動Data sources的滑動滾動條,以便選擇波段quality_scene_classification代替佔位符@。
在這裏插入圖片描述

完整的波段運算表達式爲(注意紅色的提示語句,如果綠色表示語法沒問題,紅色,則會出現錯誤):

還可以是別的波段運算表達式,例如通過大於小於運算創建。
在這裏插入圖片描述
確認無誤點擊OK。返回的界面再點擊OK。

結果展示:
儘管顏色板顯示的值不對(3個),但是事實上打開的cloud_shadow_mask波段爲只有0和1值得二值圖像(就是柵格掩膜文件,0值黑色,1值白色,黑色的部分會被掩膜掉)。不信的話,你可以點下Pixel Info窗口,移動鼠標看看。
在這裏插入圖片描述

掩膜操作

由於SNAP中並沒有使用柵格進行掩膜的功能(SNAP提供了矢量掩膜的功能,我遲點再談談這個功能),不過,SNAP每個波段都可以設置顯示有效像素值。利用這個特點也是可以實現柵格掩膜的。

對於鑲嵌後的每個波段(例如波段1),右擊選擇Properties:
在這裏插入圖片描述

將Valid-Pixel Expression(有效像素表達式)設置爲(點擊右邊紅圈的…,可以修改表達式):cloud_shadow_mask > 0.0
(可以複製一個寫好的表達式,以便應用到別的波段上)
在這裏插入圖片描述

可以利用別的波段來創建這個有效像素表達式:

在這裏插入圖片描述點擊Close 關閉即可。
其它波段同理可以這樣設置,抱歉,我沒有找到更方便的修改屬性的方法。

來看下B1對比效果
B1
未修改表達式前(原始有效像素表達式爲:B1_count >0.0 , 修改後cloud_shadow_mask > 0.0)

掩膜前:
在這裏插入圖片描述
掩膜後:
在這裏插入圖片描述
白色的強反射的雲變少了許多。

看看掩膜後的真彩色合成圖:
在這裏插入圖片描述
SNAP中還有一個檢測雲和掩膜的工具----Idxpix,也許後面還會談到它及去雲的處理。你想了解更多的話,請到SNAP的官方論壇,搜索Idxpix的話題。

後語

本來打算每個月寫一篇《SNAP與snappy》專欄的文章,奈何總是各種事情干擾,主要忙於導師項目以及學院的各種雜事。雖然我也想一下子,把所有的東西完成,但是無可奈何,SNAP包含的東西太多了,遠非數人數月所能完成或學會。事情總要一件一件地來,路需要一步一步走。

SNAP是一款強大的開源遙感處理軟件,有強大的社區、論壇資源,任何一個追求開源、自由科學精神的RSer、GISer等地學人都應關注,學習一下。SNAP軟件下載次數已超過30萬,SNAP論壇有5300多個討論主題,以及近40000的貼子,包括Google Engine,等商業公司,DIAS等政府部門單位以及遍佈各國的科學家以及學生等都在使用。很遺憾的是,國內對SNAP大的關注以及利用不夠,SNAP的好多強大功能以及源碼、算法等待挖掘。

如果有興趣的話,可以加入博主創建的歐空局SNAP處理交流羣:665903216。

抱歉,我又寫得的太多了,最後,希望你能有所收穫。

參考文獻

[1] 侯舒維, 孫文方, 鄭小松. 遙感圖像雲檢測方法綜述[J]. 空間電子技術, 2014, 11(3):68-76.
[2] http://step.esa.int/main/third-party-plugins-2/sen2cor/sen2cor_v2-8/
[3] http://step.esa.int/thirdparties/sen2three/1.1.0/sen2three-1.1.0.htmldoc/sum.html#
[4] http://nicolas.brodu.net/recherche/superres/index.html
[5] https://forum.step.esa.int/t/cloud-mask-snap-sentinel-2/5298/47

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章