虹色トラックを追う

# きっかけ

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">欧州の衛星データを用いたコンペで優勝したのは、トラックの可視化を行った参加者でした。<br><br>・通常10m解像度ではトラックの検出は難しい<br>・衛星画像上、高速で動くものはRGBがわずかにずれて見えることを利用してトラックを検出<br>・COVID-19の影響による交通量の変化を可視化<a href="https://t.co/cDgiMbo2jQ">https://t.co/cDgiMbo2jQ</a> <a href="https://t.co/5f4mbUXryA">pic.twitter.com/5f4mbUXryA</a></p>&mdash; 宙畑-sorabatake-（宇宙ビジネス情報サイト） (@sorabatake) <a href="https://twitter.com/sorabatake/status/1277746406158036992?ref_src=twsrc%5Etfw">June 29, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

> 衛星画像上、高速で動くものはRGBがわずかにずれて見える

そんなことある?

# 概要

データ活用コンペで衛星画像を利用して高速道路を走るトラックを検出する手法が優勝したとのこと。
その手法のタネは衛星画像上で高速に動くもの(トラック)のRGBがずれて虹色に見えるという点。
トラックが虹色に写るなんて話聞いたことありますか? 私は無いです。原因を調べてみたくなりました。
結論だけ知りたい方は[こちら](#結論)

# お断り

- 筆者は画像処理も衛星画像も、あと物理も素人ですので、専門家の方が読んで違和感を感じたら補足訂正をいただけると嬉しい
- 筆者は何も手を動かしていません。許して。

# 仮説

きっかけのツイートを見て筆者も考えてみたのですが、どうもうまく説明できる仮説は思い浮かびませんでした。
以下仮説

## ドップラー効果

高校物理で習う現象にドップラー効果があります。
例えば、警察車両や救急車が近づいてくるときと遠ざかるときでサイレンの音の高さが変わるような現象で、音だけでなく光にも同じ性質があるらしいです。
音の場合周波数(=波長)が変わると音の高さが変わって聞こえますが、光の場合は色が変わって見えます。

高速に動く物体と色が変化するという言葉からドップラー効果が思い浮かぶのですが、残念ながらドップラー効果ではなさそうです。
というのも光でドップラー効果が起きるためには光速の数十％の速度で物体が動いている必要があるため。かつトラックがそんな速度で動いているとは考えられないためです。あとはドップラー効果は平行移動の方向だと出ないんじゃないかな。

## 周波数(=波長)によって光の速度に差がある

思考実験として、光の周波数(=波長)によって速度に差がある場合、例えば赤色が早く青色が遅く空間を伝わる場合を考えてみましょう。
衛星画像のように物体からレンズまでの距離が長いとき、ある瞬間にレンズに届いた光のうち赤色は数秒前の物体から出た光、青色は数十秒前の物体から出た光となるため画像に映る物質の赤色の光と青色の光の位置が異なります。これにより動いているトラックが虹色に見えることになりそうです。

現実的には、残念ながら周波数によって光の速度が異なるなんてことはないためこの仮説もダメそうです。

## 屈折

光が虹色に見える現象といえば光の屈折によるものがあります。大気中の水分で屈折したりとか。
しかし、屈折では動いている物体だけ色がずれる説明ができません。

# 調査

良い仮説が立たないのでもう少し情報を集めるしかありません。

## github

作者のgithubでコンペ用のrepositoryが公開されています。

> The offset of different wavelengths that moving objects have in Sentinel-2 data causes a specific reflectance relationship in the RGB, which looks like a rainbow.
> - https://github.com/hfisser/Truck_Detection_Sentinel2_COVID19


(訳)Sentinel-2のデータでは動いている物体が異なる周波数のオフセット?を持つ。それによりRGBに特定の反射関係?ができる。それは虹のように見える。

よくわかりません。

[コンペのページ](https://www.sentinel-hub.com/contest/)に優勝者の[解説PDF](https://www.sentinel-hub.com/docs/covid19/Henrik_Fisser-Truck_detection_S2_Covid19.zip)が置いてありますが、これを読んでもよくわかりませんでした。
公式の説明でよくわからないということは、業界で常識とされている暗黙の知識が利用されている可能性がありそうです。

## Google検索

業界で常識のように扱われる知識なら検索したら出てきそうです。
しかし `satellite photo moving object wavelength truck rgb` あたりで検索してみましたが、虹色トラックに関する情報は出てきませんでした。

## Sentinel-2(公式)

衛星画像に関して検索しても出てこないため、衛星画像一般の性質ではなくSentinel-2特有の話なのではとにらみました。
しれっと登場しましたがSentinel-2は衛星画像を撮影している衛星です。

Sentinel-2の公式ページによる説明

> The MSI provides a set of 13 spectral bands: 4 visible (10 m spatial resolution), 6 near infrared (20 m) and 3 shortwave infrared (60 m).
> - https://www.sentinel-hub.com/explore/data/

どうも撮影データが複数帯域に分かれているらしいです。一方虹色トラックに関する情報はここにはありませんでした。

## Sentinel-2(Wikipedia)

ダメ元でWikipediaを見てみます。
https://ja.wikipedia.org/wiki/Sentinel-2
特に新しい情報は何もない。

日本語版は情報が少ないことが多いため英語版も読みます。

> Due to the layout of the focal plane, spectral bands within the MSI instrument observe the surface at different times and vary between band pairs.
> - https://en.wikipedia.org/wiki/Sentinel-2

おや? 周波数帯域によって撮影タイミングが異なるようです。
それが本当だとすると、虹色トラックの謎はこれが原因だと思われます。
つまり、Sentinel-2は一度にすべての周波数帯を撮影するのではなくて周波数ごとに複数回に分けて撮影しています。
赤、青、緑の周波数の撮影タイミングが異なれば動いているトラックはそれぞれ異なる場所で撮像されるので、赤のトラックの位置・青のトラックの位置・緑のトラックの位置がずれてRGB画像に合成したときにRGBがずれた画像になります。なるほど。

# 蛇足

その他調べたこと

## 裏取り

Wikipediaの情報だけでは心もとないので、他に同様の情報があるかを調査します。
Wikipediaの引用を辿るとSentinel-2のMultispectral Instrumentの特性について記載したサイトがでてきます。
https://earth.esa.int/web/sentinel/technical-guides/sentinel-2-msi/msi-instrument

このearth.esa.int さんは何者かというと

> ESA is developing a series of next-generation Earth observation missions, on behalf of the joint ESA/European Commission initiative GMES (Global Monitoring for Environment and Security).
> - https://earth.esa.int/web/sentinel/missions

とのことで、Sentinel-2の開発組織なのかな。確かにWikipediaの情報は正しそうです。

## どれくらいずれるのか

RGBはどれくらいずれるのでしょうか? 気になります。

> Temporal offset (in seconds) between selected band pairs

| Inter-band Pairs | Temporal Offset Between Bands |
|:--|--:|
| B08 / B02 | 0.264 |
| B03 / B08 | 0.264 |
| B03 / B02 | 0.527 |
| B10 / B03 | 0.324 |
| B10 / B02 | 0.851 |
| B04 / B10 | 0.154 |
| B04 / B02 | 1.005 |
| B05 / B04 | 0.264 |
| B05 / B02 | 1.269 |
| B11 / B05 | 0.199 |
| B11 / B02 | 1.468 |
| B06 / B11 | 0.057 |
| B06 / B02 | 1.525 |
| B07 / B06 | 0.265 |
| B07 / B02 | 1.790 |
| B8a / B07 | 0.265 |
| B8a / B02 | 2.055 |
| B12 / B8a | 0.030 |
| B12 / B02 | 2.085 |
| B01 / B12 | 0.229 |
| B01 / B02 | 2.314 |
| B09 / B01 | 0.271 |
| B09 / B02 | 2.586 |

> 表も https://earth.esa.int/web/sentinel/technical-guides/sentinel-2-msi/msi-instrument より引用

この内、優勝者が利用したのはB02(blue), B03(gleen), B04(red)です。表から、それらの撮影間隔は約0.5秒ずつ。
時速80km/hで走るトラックは0.5秒間に約11m進みます。
Sentinel-2の可視光画像の分解能が10mなので、ギリギリ1pixelずれるのかな。本当にギリギリですね。

## その他の虹色〇〇

虹色トラックと同様、動いている物体が虹色に見える現象を利用した研究が他にもあるようです。虹色雲とか虹色飛行機、虹色波とか。

> These temporal offsets can be used to our benefit, for example to track propagating natural and man-made features such as clouds, airplanes or ocean waves.
> - Wikipedia (https://en.wikipedia.org/wiki/Sentinel-2)

虹色波から波形を抽出して水深を推定する研究もあり、

> Sentinel-2 time-lag between detector bands is employed to compute the spectral wave-phase shift and depth using the gravity wave linear dispersion.
> The sensors collect imagery one wavelength specific-band at the time and hence, a time-lag between the different image bands exists. Such time-lag is common in optical spatial imagery and can also be found in, for example, the SPOT (max 2.04 s) and Pleiades (0.165 s between the detector bands: max 0.66 s) constellations. 
> - Radon-Augmented Sentinel-2 Satellite Imagery to Derive Wave-Patterns and Regional Bathymetry (https://www.mdpi.com/2072-4292/11/16/1918)

とのことなので衛星画像界隈では撮影タイミングのずれでRGBがずれるのは一般的なことらしいです。

# 結論

- 衛星画像で動いている物体のRGBがずれるのは撮影タイミングが異なるため