2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

オーストラリア 森林火災の衛星画像のタイムラプスを作ってみた.

Last updated at Posted at 2020-02-15

1. はじめに.

 これまで,欧州の人工衛星Sentinelシリーズが提供する無料の最新の観測画像の入手方法や,入手した画像の応用編としてタイムラプスの作成方法を紹介しました.
 
 無料で最新の衛星画像を入手する方法.
人工衛星(Sentinel-2)の観測画像をAPIを使って自動取得してみた.

今回は,前回の紹介した無料で人工衛星画像のタイムラプスの作り方.を修正し,1月単位ではなく観測毎のタイムプラスのgifアニメーションの作成方法を紹介します.このとき,一般的な人工衛星の観測画像ではなく,その応用編として火災にフォーカスした赤外波長の観測画像を用いた画像処理についても紹介します.
 ここで作成したGifアニメーションの例(解像度を落としています)がこちらです.

Australia_wildfire_new2 (2).gif

また,ここで紹介する記事と関係するものを宙畑にもアップしています.よろしければ,一緒に見てください.

 【コード付き】Sentinel-2の衛星画像から指定した範囲のタイムラプスを作成する

前回の記事と同じく, gitにも今回のコードを参考にアップしています.個人での利用の範囲で楽しんでください.

 RS_Sentinel2_timelapse_wildfire

その後,豪雨によってオーストラリアの火災は鎮火された,と報告がありました.ただ,豪雨によって洪水になったのはなんとも.

豪シドニー、30年ぶりの豪雨で洪水 森林火災は鎮火

##2.火災箇所の人工衛星の観測画像のタイムプラスのつくりかた.

###2.1 人工衛星Sentinel-2について
Sentinelシリーズは,欧州宇宙機関が開発・運用する地球観測シリーズで,すでに1から5まで打上がり運用されています.
今回は,デジカメ画像と同じく光学観測画像を撮像するSentinel-2の衛星画像の取得から,画像処理を紹介します.

sentinel2.jpeg
Sentinel-2 ©ESA 2000-2018.

Sentinel-2について,その観測計画や観測画像の詳細については,無料で最新の衛星画像を入手する方法.をご参考にしてください.

Sentinel-2は12の波長の異なる波長の画像を撮像しています.

スクリーンショット 2020-02-15 17.45.33.png
(Credit: European Space Agency)

一般的な衛星画像(True color)であれば,バンドの4,3,2をR,G,Bとすることで作ることができます.

今回は,森林火災にフォーカスし,赤外波長の観測画像をもちいて,火災の可視化を試してみます.
今回は,以下の記事を参考にしています.

How to use open source satellite data for your investigative reportingHow to use open source satellite data for your investigative reporting

Copernicusが提供する衛星画像をブラウザにて閲覧するアプリケーションの”Eo browser”でも異なる波長の観測画像を用いた処理ができますので,試してみてください.

スクリーンショット 2020-02-15 17.52.52.png
オーストラリアの森林火災のSentinel-2観測画像(2019年12月31日撮像)

###2.2 観測毎のタイムプラス画像の作成方法
では,Sentinel-2の観測画像のタイムプラスを作っていきます.
Sentinel-2は,世界中の多くの地域において,同地域を5日毎に観測しています
スクリーンショット 2020-02-15 17.55.20.png
(credit:European Space Agency)

そこで,前回のタイムプラスのコードにてしている観測期間に関する部分を以下に修正しました.

#L2Aデータ取得のため,2019年1月以降を開始日とすること.
Begin_date = '20191201'
End_date = '2020210'

m = 5 # 5日間毎の画像を取得する.

#開始日と終了日の日差の数を求める.
import datetime
begin_data_s = datetime.datetime.strptime(Begin_date, '%Y%m%d') 
end_data_s = datetime.datetime.strptime(End_date, '%Y%m%d')
d_day = end_data_s - begin_data_s
n =d_day.days//m

#Sentinel-2の観測画像の取得.
for i in range(n):
    if i < 1:
        Begin_date = begin_data_s
        End_date = begin_data_s + datetime.timedelta(days=m)
        begin= Begin_date.strftime('%Y%m%d')
        end = End_date.strftime('%Y%m%d')
    else:
        Begin_date = End_date
        End_date = Begin_date + datetime.timedelta(days=m)
        begin= Begin_date.strftime('%Y%m%d')
        end = End_date.strftime('%Y%m%d')
    
    Sentinel2_get() #Sentinel-2の観測画像をAPIで取得する関数.

###2.3 赤外波長の観測画像の作り方.

取得したSentinel-2の画像データから,赤外波長の観測画像を用いた火災にフォーカスした解析画像を作成します.

    path = str(product_title) + '.SAFE/GRANULE'
    files = os.listdir(path)
    pathA = str(product_title) + '.SAFE/GRANULE/' + str(files[0])
    files2 = os.listdir(pathA)
    pathB = str(product_title) + '.SAFE/GRANULE/' + str(files[0]) +'/' + str(files2[1]) +'/R20m'
    files3 = os.listdir(pathB)
    
    
    path_b12 = str(product_title) + '.SAFE/GRANULE/' + str(files[0]) +'/' + str(files2[1]) +'/R20m/' +str(files3[0][0:23] +'B12_20m.jp2')
    path_b11 = str(product_title) + '.SAFE/GRANULE/' + str(files[0]) +'/' + str(files2[1]) +'/R20m/' +str(files3[0][0:23] +'B11_20m.jp2')
    path_b8 = str(product_title) + '.SAFE/GRANULE/' + str(files[0]) +'/' + str(files2[1]) +'/R20m/' +str(files3[0][0:23] +'B8A_20m.jp2')
    
    # Band4,3,2をR,G,Bとして開く.
    b8 = rio.open(path_b8)
    b12 = rio.open(path_b12)
    b11 = rio.open(path_b11)

上記にて取得した観測画像から, バンド12,11と8Aの観測画像を指定します.
このとき,2.1にも書きましたが,これらの観測画像の分解能は20mになるため,そちらのアドレスをしています.

そして,取得したB12,B11,B8Aの観測画像を,それぞれR, G, Bとしてカラー合成を行います.

    #RGBカラー合成(GeoTiffファイルの出力)
    with rio.open(str(object_name) +'.tiff','w',driver='Gtiff', width=b12.width, height=b12.height, 
              count=3,crs=b12.crs,transform=b12.transform, dtype=b12.dtypes[0]) as rgb:
        rgb.write(b12.read(1),1) 
        rgb.write(b11.read(1),2) 
        rgb.write(b8.read(1),3) 
        rgb.close()

ここで作成した画像はtiffファイルですので,作成後にQGISのようなGISソフトで解析したいときは,この画像をつかいます.
その後,関心域のみのtiff画像, tiff画像のjpeg画像への変換をへて,以下のような画像を作成します.

20191231Masked_Australia_wildfire_new2.jpg

関心域の設定が正方形でなかったため,黒い部分が周囲にできています.
そこに観測日の記載がかぶってしまったので,ちょっと見づらいですね. 観測日の記載箇所については,コードにて位置をかえるなど,試してみてください.

希望期間のそれぞれの観測画像の取得からカラー合成処理を行った後,観測日が古い画像の順番にgifアニメーションを作成します.

##3. おわりに
今回は,前回の応用編として,Sentinel-2の赤外波長の観測画像を用いて, 森林火災にフォーカスしたタイムラプスのアニメーションを作成しました. 赤外以外にも,他の異なる波長をもちいることで,森林や水源にフォーカスした画像をつくることもできます.
課題に応じて変幻自在? 衛星データをブレンドして見えるモノ・コト #マンガでわかる衛星データ

上記の記事の画像はどういった波長の組み合わせでつくるのか, WebアプリケーションのEo browserにも例がありますので, そちらも参考にしてみてください.

つぎは,SAR衛星であるSentinel-1の観測画像の取得,およびその解析例について紹介してみようと思います.

ご意見や質問などありましたら,コメントいだけると嬉しいです.

追記(2020.2.17)

 新型コロナウィルスの感染拡大が続く中国武漢に新設された病院の建設模様を人工衛星の観察画像を求めました.

china_wuhan_hospital_building.gif

参考にしたのは以下の記事です.特に,New York Timesの写真は,その表現力の高さ,訴える力を感じました.
新設された病院によって感染された方々の治療が進み,感染拡大に対して大きな効果がでることを期待します.

Wuhan Reacts To Coronavirus, The Taal Volcano Erupts And More
China Pledged to Build a New Hospital in 10 Days. It’s Close.

参考記事

 無料で最新の衛星画像を入手する方法.
人工衛星(Sentinel-2)の観測画像をAPIを使って自動取得してみた.
【コード付き】Sentinel-2の衛星画像から指定した範囲のタイムラプスを作成する
How to use open source satellite data for your investigative reportingHow to use open source satellite data for your investigative reporting
Revisit and Coverage of Sentinel-2

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?