放置していた月食の処理を再開(続編)

前回記事の続きです。

r77-maabow.hatenablog.com

前回は「地球の影を固定した画像や動画の作成」に向けて、影の中心座標が計算出来るようになったことを記載しました。その後、座標の取得・計算と月画像を配置するソフトを作成してみて一旦は動画を作成したのですが、前回懸念していた「各月画像のトーン調整」(と言うより各画像の明るさ)が原因で、少し不満が残るものになりました。
今回はその不具合と対策、作ったソフトについて記載します。

作成した動画

最初に、作成した動画です。

地球の影を横切る月

フレーム数が45枚と少ないのでカクカクしていますが、地球の影を月が横切る様子が分かるかと思います。
ただ、よく見ると、位置を固定しているはずの影が少し動いて見えませんか? 特に後半の影から月が出る時が分かり易く、月の移動に伴い影も少し左に動いている様に見えます。

影が動く原因

以下は12フレームを抜き出して比較明合成し、Stellariumで表示させた本影と比較したものです。

12枚の画像で影の大きさを確認

月が本影から離れるほど、画像の影が本影の円に対して離れている(影が大きくなっている)のが分かりますでしょうか? この様に、本影との距離により実写の影の大きさが変化するため、動画にしたときに影が動いた様に見えています。

この原因は、撮影時の露出時間とゲイン、画像処理時のトーン調整が各月画像で異なるためです。この件は、12月に書いた記事の中に“反省点”として記載しました。

r77-maabow.hatenablog.com

月食中の月は、本影から離れるほど欠けている範囲が小さくなるため明るくなります。それをほぼ同じ明るさになる様に撮影し画像処理しているので、本影から離れるほど画像を暗くしていることになり、影の境界位置が変わり影が大きく見えるという訳です。

対策案

対策としては、影の境界位置が変わらない様な処理をするという事になります。考えたのは以下の2つです。

  • 各月画像にトーン調整を行い、各画像の影の境界位置を一致させる
  • 露出とゲインを元に明るさ比を計算し、露出×ゲインが一定となる明るさに各月画像を調整する

以下、各対策を行うとどうなるか、画像で確認した結果です。

各画像にトーン調整を行う

1つ目の対策を、前述の12枚の画像に対して行ったものが以下になります(実際に処理したのは皆既中の1枚を除く11枚)。

1つ目の対策を行った結果

当然ですが、本影の円と実写の影が一致しています。
しかし動画に適用するとなると、皆既中以外の画像(21枚あります)に夫々異なるトーンカーブを施すことになり、ちょっと面倒です。影近辺の画像だけに処理するという手もありますが、処理しない画像と月の明るさが異なるので動画にすると違和感が出そうです。

なお、前回の記事に掲載した画像はStellariumの本影の円と実写の影が一致していました。それは、本影に近い画像のみを使ったことと、座標確認のため影の境界を明確化しようと暗い部分を持ち上げるトーンカーブをかけていて、実質的にこの対策を行っていたためです。

露出×ゲインが一定となる明るさに各画像を調整する

2つ目の対策を9枚の画像に対して行ったものが以下の画像です。こちらは、全ての画像に対し明るさ調整しています(皆既中とそれ以外で調整した明るさは異なります)。

2つ目の対策を行った結果

如何でしょうか? 影の境界がはっきりしないので少し分かり難いですが、影の境界位置がずれた様な感じはしないと思います。

処理について補足ですが、今回明るさの調整はGIMPのトーン調整を使いました。最初にトーンカーブを直線のまま傾きだけ変えて明るさを揃え、そのあと適当なトーンカーブをかけています。本影の外では明るさの変化が大きすぎて、満月状態に近い月画像は白飛びし大きく欠けた月画像は黒潰れするので、トーンカーブはかなり極端なものになっています。

また、GIMPのトーン調整で処理したため、明るさの比率は正確とは言えません。しかし、月が重なっている部分を見ると、比較明合成なので後ろの月が透けて見えていて、重複部分の明るさはほぼ同じになっている様です。処理後の影の明るさ分布が(本影と半影の境界は除いて)連続的に変化しているという事なので、大きく間違った結果ではなさそうです。

この対策だと、明るさの調整値は計算で求めることが出来、明るさ調整後のトーンカーブは同じもので良いことになります。処理は皆既中とそれ以外の2パターン必要にはなりますが、自動化が出来そうです。

どちらの対策をとるか?

以上の結果から、今の所は2つ目の対策をやってみようと思っています。もし、その結果が気に入らなければ、1つ目の対策も考えてみます。

作ったソフトの紹介

上記対策は今後行うこととして、これまでに作成したソフトについて記載したいと思います。今回作成したものは、座標関連と画像処理関連の2つです。

座標の取得と計算

座標関連については、Excelのマクロで作成しました。複数の画像に対して座標を求めるので、多くの数値を一覧表で見られるExcelが良いと思いました。

Stellariumから座標値などを取得するには、Stellariumのリモートコントロールプラグインとhttpプロトコルでやり取りする必要があります。ExcelでもMicrosoft XMLというライブラリを使うと、httpサーバとのやり取り(GETやPOST)が行えます。
これを使い、時刻設定→座標値取得を順次行う様にしました。また、影の中心座標と撮像面上の月の位置は、関数を作っておいて数式としてセルに設定しています。

作成したExcelファイルはこんな感じです。

動作としては、以下なります。

  • 最初に、個々の月画像ファイルと撮影時間、撮像面上の1ピクセルに相当する角度や月画像の北に対する傾き角などを入力しておきます。
  • Stellariumを立ち上げて地心座標表示にしたあと[地心座標取得]ボタンを押すと、各々の時間における月と太陽の地心座標を取得し影中心の地心座標が計算されます。
  • Stellariumを測心座標に切り替え[測心座標取得]ボタンを押すと、月の測心座標を取得し影中心の測心座標を求め、同時に撮像面上で影中心を原点とした月の位置が計算されます。
  • データが揃ったら右上の[リスト出力]ボタンを押し、次のソフトで使用するデータファイルを作成します。

最後に出力されるファイルは、画像ファイルと月の位置計算結果などを書き出したテキストファイルです。

一番右の列の1という数値は、個々の月画像が位置合わせ時にスケーリング(拡大/縮小)されている場合に使うもので、スケーリングした倍率を記載しておけば、次のソフトで撮影時の大きさに戻す処理を行います。

Stellariumから座標を取得する際、月を画面中央に配置する設定を行ってから順次時間を変えるという処理をしています。そのため座標取得中は、月が徐々に欠けて再度元に戻る様子がStellarium上で再現されます。

また、計算した影中心の測心座標が正しいかを確認する機能も実装しました。Excel画面の[Check]ボタンを押すと、Stellarium上で「時間設定」→「画面中央を影中心に設定」という動作を順次行います。これにより、Stellarium上で影が固定されて月が移動していく様子が再現されます。

時間設定と影中心を画面中央にする設定にタイムラグがあるので少し波打った動きはするものの、影の中心が正しく計算できているかを確認できます(上の動画はファイル容量を小さくするため早送りですが、実際は影中心を画面中央に設定したあと1秒ほど静止させています)。

月画像を計算した位置に配置

上記Excelの出力ファイルを読み込み、各月画像を指定の位置に配置するソフトはC++のコンソールアプリとしました。以前作成した位置合わせソフト(モザイク合成やスタッキングするソフト)がC++だったので、そのソースを流用ました。
実行する際には、引数にExcelで出力したテキストファイルと動画にするときのフレームレートを指定します。

処理は以下の通りです。

  • 引数のテキストファイルから画像のパスや配置する位置などを読み取ります。
    あわせて、一旦画像を読み込み画素数も読み込みます。
  • 個々の画像サイズ(全て同じサイズを想定)と各々の位置から最終的な画面サイズを求めます。
  • 各画像の位置と北に対する傾きからアフィン変換行列を作り、アフィン変換で各画像を指定位置に配置した画像を生成します。 ← この処理を各画像に対し順次実行
  • 生成した画像を1920x1080にリサイズして指定されたフレームレートで動画に変換します。

以下は実行した時の画面です。

アフィン変換と動画変換はOpenCVの機能を使っています。動画のフォーマットはMP4形式にしていて、最初に掲載した動画はこれを縮小しアニメーションGIFに変換したものです。

また、比較明合成した静止画を生成する機能は今回作っていません。静止画は一部のフレームしか使わないので、引数のフレームレートを0にすると各フレームをファイルに出力する様にしておいて、対象フレームをGIMPなどで後処理する様にしました。

まとめ

前回の記事で、懸念点として「各月画像のトーン調整」と「自作ソフトの位置合わせ誤差」という2つを挙げていました。今回記載しませんでしたが、2つ目の懸念点は元画像が45枚と少ないことと位置合わせ誤差が数画素程度だったという事もあり、全く気になりませんでした。
一方、1つ目の懸念点が原因で、固定しているはずの影が少し動いている様な動画となってしまいました。考えた対策案でうまく行きそうと言う所まで確認したので、あともうひと頑張りしたいと思います。

動画は未完成状態ですが、今回掲載した1つ目の対策(各画像にトーン調整)を行った画像については、これはこれで完成形と言えるでしょう。なので、最後に比較明合成ではなくマスク合成したものを完成版として掲載しておきます。

地球の影:2022/11/8 皆既月食