とらりもんHOME  Index  Search  Changes  Login

Fmask

Python fmask

以下の内容は、次の英文サイトの内容を書いたものであるため、原文はサイト内を参考にしてください。http://pythonfmask.org/en/latest/

公開された「fmaskアルゴリズム」を実行するためのコマンドラインについて
Landsatからの画像のうち、雲、雲の影、雪を見つけるための方法である 
このパッケージは、fmaskアルゴリズムをptyhonで実行する。
また、これは画像がどのように名前を付けられ、また管理されているかを扱う様々な種類のメインプログラムの中に内包されることができる様に設定され、最大限に柔軟性を持つように設定されている。 
このモジュールのデザインは、Landsat及びSentinelにおけるコアアルゴリズムの使用を簡略化する。
Wrapper programs(外包するプログラム?)は、どちらにも共通のコアアルゴリズムを用いつつ、メタデータのフォーマット及びファイルの配置を操作できる。
Landsatにおいては、USGSからのデータを処理できるメインプログラムが提供されている。
コアアルゴリズムモジュールからの出力は一通りの主題(メインの?)ラスターであり、無効値(null)、晴れ、曇り、影、雪、水を表す整数コードである。

注)ここで挙げられている例ではUnix/Linuxを用いたものであるので、filename wildcardsは正常に展開されている。Windowsを用いる場合には、“fmask_expandWildcards”をコマンドの接頭語(?)に用いることによって、Unix/Linuxと同様にwildcardsの展開を行うことができる。

USGS Landsat

以下に記述するコマンドラインスクリプトは、展開済み(untarred)のUSGS Landsat データを処理することができる。

まず、反射光と熱についての波長のデータ(band)は、それぞれ分割した状態で保持(stack)されなければならない。これらは、センサーにおいて、異なる方法で為される必要性がある。
{コマンドスクリプト}
次の過程として、後に行う操作で用いるための1ピクセルごと(per-pixel)の適切なアングルについての画像を作成する。

{コマンドスクリプト}


その後、マスクと大気の反射率の頂点(top if atomosphere)が計算され、雲がマスクされる。

{コマンドスクリプト}

もしサーマルバンドが存在しない場合には、それは問題なく(自然に?従って?(gracefully))無視される。

Sentinel2

以下のコマンドラインスクリプトは、Sentinel2 levelC granuleを写真から直接作り出すことができる。 この例では、20m解像度において操作を行っているが、必要に応じて変えることはできる。

この過程においては、20m解像度における全ての範囲の光のバンドの記録(stack)を作る。それぞれのバンドは、バンドの番号に従って並んでいる。
{コマンドスクリプト}

 一つ一つのピクセルにおける、太陽と衛星それぞれの位置についての画像を作成する。

{コマンドスクリプト}
イメージから雲のマスクを作成する。作成された画像は、特定のバンドにおいてのものである。

Fmaskのダウンロードは以下の場所からできる。 Pre-builtバイナリの「panda」パッケージは、’conda-forge‘チャンネルから入手かのうである。Condaをインストールしたならば、python-fmaskをインストールするために以下のコマンドラインを実行するべし  {コマンドライン}

実際の使い方

F-Maskの使い方

Landsat8での画像を使用する場合について(Landsat4&5,7)のデータを使用する場合は、において打ち込むコマンドが若干異なるので、原文サイトを参考にしてください。

landsat衛星データのダウンロード

(1)	衛星画像データが載せられているamazon webservices上において、Landsat衛星画像データについての説明が載せられているサイトhttps://aws.amazon.com/jp/public-datasets/landsat/を読み、目的のデータをダウンロードする
(2)	ダウンロードするファイルは、Landsat8の場合には「LC〜(B1、B2、B3、B4,、B5、B6、B7、B9、B10、BH11).TIF」の合計10個のファイルである。

この際、処理及びダウンロードが非常に重たくなるため、ノートPC内に保存するのではなく、筑波大学サーバー内にダウンロードする方がよい。

雲マスク処理の準備

以下のコマンドをlinux内に打ち込み、fmaskをダウンロードする

conda config --add channels conda-forge 
conda create -n myenv python-fmask
source activate myenv # omit 'source' on Windows

雲マスク処理の開始

以下のコマンドをlinux内に打ち込む

(1)	
gdal_merge.py -separate -of HFA -co COMPRESSED=YES -o ref.img LC8*_B[1-7,9].TIF
gdal_merge.py -separate -of HFA -co COMPRESSED=YES -o thermal.img LC8*_B1[0,1].TIF
(2)
source activate myenv 
fmask_usgsLandsatMakeAnglesImage.py -m *_MTL.txt -t ref.img -o angles.img
(3)
source activate myenv
fmask_usgsLandsatSaturationMask.py -i ref.img -m *_MTL.txt -o saturationmask.img
fmask_usgsLandsatTOA.py -i ref.img -m *_MTL.txt -z angles.img -o toa.img
fmask_usgsLandsatStacked.py -t thermal.img -a toa.img -m *_MTL.txt -z angles.img -s saturationmask.img -o  cloud.img

雲マスクデータのダウンロード

(1)の処理によりディレクトリ内部に雲マスクのファイルが作成されているので、以下のコマンドを用いてJPEGファイルに変換する(cloud.imgとしてファイルが作成されていたので、cloud_output.jpgとして変換した場合)
gdal_translate –of JPEG –scale –co worldfile=yes cloud.img cloud_output.jpg
(2)	WinSCPを用いて目的のファイルを筑波大サーバー内部から使用中のPCへとダウンロードする。
(tiFファイルについては、以下のコマンドでjpegに変換できる。
gdal_translate -of JPEG -scale -co worldfile=yes (ファイル名).TIF (ファイル名)_output.jpg)
作成された雲マスクデータをQGISで開くことで、任意のポイントにおける土地及び雲などの状態を知ることができる。
調べたいポイントをクリックすると、ウィンドウ右側の地物情報欄において1〜5までの数字が表示される。それぞれの数字は晴れた空、雲、雲の影、雪、水を示している。

Landsatについて

Landsat8においては、観測したポイント毎の状態を示すQAbandと呼ばれる機能が搭載されている。
これは観測したポイントについて、有効なデータであるか、雲がかかっているか、陸地であるか、雪が降っているかの観点においての情報を与えてくれるものであり、
セグメンテーションにおいて非常に有効であると考えられる。詳しい使い方については、下記のサイトを参考にしてください。

(QAバ ンドについてのUSGSによるFAQ https://landsat.usgs.gov/what-landsat-8-quality-assessment-qa-band-and-how-it-used) (QAバンドについてのUSGSによるより詳細な説明及び用法のマニュアル https://landsat.usgs.gov/qualityband

しかし、このQAbandはより古い時期の画像(Landsat4&5によるものなど)については実装されていないと考えられるので、
そのような画像においてはF-maskによる雲マスクが必要となると思われる。
また、雲によって形成される影を特定する必要がある場合にも、F-maskによる特定は有効となると言える。

QAバンドの使い方

Landsatのデータの中で、ファイル名が「〜_BQA.TIF」となっているファイルをダウンロードする。
ダウンロードしたファイルを、QGISを用いて開く。
任意の点をクリックすると、地物情報バンド1の欄に、5ケタの数字が表示される。この数字を2進数に直すことで、以下に
添付する表からその点における地物情報を得ることができる。

論文アブストラクト

FmaskというLandsatの画像における雲及びその影を特定するための、新しい方法が提供されました。これにおいては、LandsatのTOA(Top of Atmosphere)reflectance及びBT(Brightness Temperature)が入力情報として用いられています。
Fmaskは、まず雲の物理的な特性を用いることで、晴れた空の要素となる画素と、雲の可能性のある画素(PCPs(Potential Cloud Pixels))を分離します。
次に、標準化された温度、スペクトル変動率、明るさなどの情報によって、陸及び水面上において雲の可能性があるマスクを分離して作成します。
その後、作成されたPCPs及び雲の可能性のあるマスクを用いて雲レイヤーを作成します。雲の影は近赤外光のバンドにおいて暗くなる作用は、flood-fillへの変換を行い、影の可能性があるレイヤーを作成することに用いられています。
その後3Dの雲のモデルが、雲の可能性のあるレイヤー及び雲のモデルにおける一定の温度低下についてのセグメンテーションを経ることで形成されます。
衛星のセンサーの角度及び光の角度は、雲の影の位置を予測し、雲の影のマスク候補のうち、最も一致性の高いものを選び出すことに用いられます。もし画像中に雪が含まれていたならば、雪のマスクが作成されます。
世界中からのデータの参照によれば、fmaskを用いた雲の推測の正確さは、平均約96.4%となっています。
目標としては、Landsatの画像において、雲及び雲の影を特定するのに適したアルゴリズムを開発することです。
Last modified:2018/02/12 15:25:08
Keyword(s):
References: