「日食用HDR風」画像処理 アプリ EclipseMixer を作った


2024年4月8日の皆既日食にて、タイムラプスで2つのことを撮りたいと思いました。
昼の明るい景色から、皆既で「夜」になり、また昼の景色に戻る様子
太陽の形が欠けて行き、また満ちてゆく様子
ただ、「昼の景色」と「太陽の形」には露出差がありすぎます。下の写真は太陽を写野内に含む景色を露出を少しづつ変えて撮ったもの。左上の写真と右下の写真を同時に表現することは通常のHDRでは不可能。

そこで、
・通常露出で昼間の景色(太陽付近は露出オーバーで白飛びする)
・太陽撮影用のNDフィルタを通して太陽の形
の二つを別々に撮影し、それらを合成して HDRのようにするロジックを考案しました。

いろいろ試行錯誤の結果、太陽の形をなるべく自然に表現する方法として、各ピクセルについて、
1)太陽の形の画像をグレースケール G(0~255) にする。
  グレースケールの計算方法は G=0.298912*R + 0.586611*G + 0.114478*B
2)風景写真の減衰率を決める。例えば減衰率 d = 0.8 とする
3)風景写真のR,G,Bそれぞれについて、
  変更後の数値 V’ = (d + (1-d) * (G/256) ) * V
という変換を適用して、保存する。

コンセプトは以下の図のようになります。

太陽の形は若干露出を上げて形をくっきり写せば、太陽の箇所だけそのままで、それ以外のピクセルの明るさは指定した減衰率まで下がることによって、相対的に太陽の形を浮かび上がらせます。

アプリ EclipseMixer を作成

この処理を一括して行う為のこのためのアプリを作ったので、Githubに公開しました。
ノーサポートですが、ご自由にお使いください。言語はC#、開発環境はVisualStudio2019です。

使い方

最初にCSVファイルを作り、処理をするファイル名を登録します。
各行に、カンマ区切りで
昼間の風景のファイルパス, 太陽の形のファイルパス, 出力ファイルパス
のセットを登録します。パスはフルパスが良いです。
(CSVの例)
 C:\sample\DSC03290.JPG, C:\sample\DSC03291.JPG, C:\sample\OUT_03290.JPG
 C:\sample\DSC03269.JPG, C:\sample\DSC03270.JPG, C:\sample\OUT_03269.JPG

CSVで指定することで、大量のファイルを連続処理できます。

指示画面

Instruction File に作成したCSVファイルを指定します。
Max Ratio は風景ファイルをどのくらい明るさを落とすかを規定します。0.8以下だと太陽が割とくっきり浮かびあがります。0.9だと太陽の形は見えにくいですが、より自然です。


出力ファイルが存在するとき、処理をスキップするか、上書きするか選べます。

実戦投入

(a) ISO100, f3.5, 1/250(s),ND100,000 →太陽の形取得用
(b) ISO6400, f1.4, 2(s), ND100,000 →昼間風景用
を10秒おきに撮った画像のタイムラプスです。合成時の透過率は85%
残念ながらほぼ曇りでしたが、0:11~0:13のあたりで数コマだけ欠けた太陽が写っていました。

ACUTER OPTICS TRAVERSE をハックする

in English

ACURE OPTICS TRAVERSE がSky-Watcher(R)社のSynScanProで動かせると聞いたので 以前に調査したモータープロトコル がそのまま使えるのでは?と思い調べてみました。

TRAVERSEとSynScanPro間の通信を調べてみると、モータープロトコルの仕様書には記載されていないコマンドが多用されていました。新しいコマンドは最近のSynScanAppバージョンと、最近のAZ-GTiファームウェア間で通信されている「:X」で始まるコマンド群のようです。
仕様書は2021年止まりで以来更新されておらず、Xで始まる送信コマンドの記述はなく、推測するしかありません。
つまり、AZ-GTiを動かしていた方法では全然制御できそうにありません!

トラバースでモータを動かすだけなら簡単!

一方、少なくともTRAVERSEを動かすだけであれば、コマンドはとても単純でした。
赤経と赤緯、スピード0~9、の通信内容を全て調べたところ、非常にシンプルな規則性が判明。

従来のプロトコルでは、1.回転方向セット、2.速度セット、3.動作開始、4.動作終了、と4つコマンドを使う必要がありましたが、トラバースを動かすコマンドは「速度セット」1つのみと超シンプル!

基準となる数字は「12091.5」

恒星時駆動x1.0の速度がどうやら「12091.5」のようです。X0.5なら6046、x8なら96732。これを覚えていてください。(なぜこの数値になるのか、プロトコルが不明なので謎のままですが、とりあえずこの数字でトラバースはうまく動きます)

モーター速度セットコマンド

モーター速度を変更するコマンドはこのような21文字のテキストフォーマットです。
:X1020000000000002F3C
(これに続けて改行コード0x0Dを送るとコマンドが確定します。)
パーツに分解すると以下のようになります。

:X1020000000000002F3C
拡張コマンド?赤経・水平軸=1
赤緯・垂直軸=2
速度設定コマンド?速度設定値

「:X」のあとに赤経か赤緯かで「1」か「2」の1文字、その後「02」、その後16進数表記の16文字で速度指定し、最後は改行記号「0D」を送ればコマンドが確定します。チェックサムもありません。軸番号と速度指定値を差し換えれば、自在に動かせます。

SynScanAppでプラス方向(右ボタン、上ボタン)のとき、速度指定値は次のようになっています。

STEP対恒星時速度速度設定値10進法での値12091.5の何倍
00.5000000000000179E60460.500020676
110000000000002F3C120921.000041351
2800000000000179DC967328
316000000000002F3B819346416
432000000000005E77038692832
56400000000000BCEE077385664
61280000000000179DC11547713128.0000827
7400000000000049CCFA4836602400.0001654
860000000000006EB3767254902600.0001654
980000000000009399F39673203800.0002481

また、反対方向に動く、つまりSynScanAppでマイナス方向(左ボタン、下ボタン)のとき、速度設定値は単純にマイナス値になります。(64ビット整数表現でのマイナス値)

STEP対恒星時速度速度設定値10進法での値12091.5の何倍
0-0.5FFFFFFFFFFFFE862-6046-0.500020676
1-1FFFFFFFFFFFFD0C4-12092-1.000041351
2-8FFFFFFFFFFFE8624-96732-8
3-16FFFFFFFFFFFD0C48-193464-16
4-32FFFFFFFFFFFA1890-386928-32
5-64FFFFFFFFFFF43120-773856-64
6-128FFFFFFFFFFE8623F-1547713-128.0000827
7-400FFFFFFFFFFB63306-4836602-400.0001654
8-600FFFFFFFFFF914C8A-7254902-600.0001654
9-800FFFFFFFFFF6C660D-9673203-800.0002481

そして、モーターの停止は、速度に0をセットするだけ。全く同じ構造です。

STEP対恒星時速度速度設定値10進法での値12091.5の何倍
0000000000000000000

上記の表は、SynScanProアプリで、速度ステップを変えた時の値を拾ったものですが、表にない値でも任意の速度で動かせます。
(赤道儀状に設置して)太陽時駆動、月時駆動も次のようにできるはず。
 恒星時 23:56:04.091 = 86164.091(秒)
 太陽時 24:00:00.000 = 86400.00(秒)
 月時 23:03:39.014 = 83019.014(秒)

太陽時速度=12091.5 * 86164.091 / 86400.00 = 12058.49≒ 12058⇒ 0000000000002F1A
月時速度=12091.5 * 83019.014 / 86400.00 = 11618.34≒ 11618 ⇒ 0000000000002D62

64ビットHEX(16進数表記)の簡単な取り方

64ビット整数表現ですが、Windowsなら電卓アプリで簡単に取れます。
電卓を起動、プログラマ電卓モードにします。
DEC(10進法)を選択して、例えば10進法で数字「-12092」を入力すると、HEX(16進数) のところに 「FFFF FFFF FFFF D0C4」と表示されます。
その後、HEXを選択すると表示が16進表示に変わるので、そのままCtrl+Cで「FFFF FFFF FFFF D0C4」がコピーできます。

TRAVERSEを動かしてみましょう

ネットワークで動かすにはUDP通信で動かしますが、ここでは簡単にシリアル通信でやってみます。
USBA-USBCケーブルでWindowsPCとトラバースを接続します。
トラバースはなんと、PCのUSBポートからの給電のみでも動きます。省エネ!

ここではTeraTermを使っていますが、シリアルターミナルなら何でもよいです。
USBケーブルを接続すると、シリアルCOMポートが一つ追加されていますので、これを選択して接続します。(USB接続なのでボーレートは何でもよいです)
改行コードはCRに設定。見えやすいようにローカルエコーはONにします。


「:X10200000000009399F3」と入力してEnter。赤経軸(水平軸)が800倍速で回転します。
「:X102FFFFFFFFFF6C660D」と入力してEnter。赤経軸(水平軸)が800倍速で逆回転します。いきなり逆回転に設定してもちゃんと減速・停止・加速制御をしてくれます。えらい!
「:X1020000000000000000」と入力してEnter。赤経軸(水平軸)が停止します。

「:X20200000000009399F3」と入力してEnter。赤緯軸(垂直軸)が800倍速で回転します。
「:X202FFFFFFFFFF6C660D」と入力してEnter。赤緯軸(垂直軸)が800倍速で逆回転します。
「:X2020000000000000000」と入力してEnter。赤緯軸(垂直軸)が停止します。

このように下記のオレンジの部分だけを変えれば、自由自在に動かせます。
「:X10200000000009399F3

自作プログラムで制御して、例えばトラバースをタイムラプス用架台にするとか、望遠鏡以外でも何かを乗せて2軸電動架台にするとか、何かと遊べそうです。

2024 Total Solar Eclipse

2024年の皆既日食、忘れてしまう前に覚えていることを書いておこうと思います。

準備編

今年2024年の皆既日食は、2017年の皆既日食に行きそびれた7年前から計画していました。
皆既帯のほぼ中心がナイヤガラの滝を通るのを見つけたので、ぜひナイヤガラの滝と日食を同時にカメラに収めたいと考えました。

https://science.nasa.gov/eclipses/future-eclipses/eclipse-2024/where-when/

(地図NASAのサイトよりhttps://science.nasa.gov/eclipses/future-eclipses/eclipse-2024/where-when/

2018年にホテルを予約するも1年前からしか予約できないとのこと。
1年前の2023/4/7から現地時間で24時を過ぎるごとに毎日予約を試み、滝と日食が同じ方向に見えるホテル「Seneca Niagara」のFall View 部屋を押さえる。
これで「部屋から滝と日食を同時に写すタイムラプス」を仕掛ける計画ができる。

(地図はGoogleMapsの衛星写真より)

プランB

ただ、ナイヤガラの晴天率はそれほどではないので、バックアッププランを考えることに。
ナイヤガラをベースにすることを前提に、飛行機でのアクセスのしやすさを考えると、バックアップ候補地はダラスかインディアナポリス。
インディアナポリスは近いので、遠い方が「保険」になるだろうと、2000km離れたダラス(WACO)の会場を予約。
(※結果的にインディアナポリスが天候に恵まれたようです)

出来上がったプランBは
・ナイヤガラのホテルをベースにする
・天候に関わらずタイムラプスは仕掛ける
・ナイヤガラの天候が悪ければバッファローからダラスに飛行機で日帰り、WACOへ


前日まで

万一飛行機の遅延や欠航があっても日食に間に合うよう、2日前の6日にはバッファロー入りした。
前日、前々日とナイヤガラは雲一つない快晴。このまま晴れてくれれば良かったのだが。。。

ナイヤガラは日食でお祭り騒ぎで、屋台や日食のTシャツの店が並んでて、盛り上がってました。


ナイヤガラの天気予報はあまり良くなかったけれど、ダラスはもっと天気が悪そうな予報だったので、プランBは放棄し、ナイヤガラ一本に賭けることに。
場所はカナダ滝のすぐ横 Terrapin Point。これと皆既日食を一緒に見たい!!

日食当日・ナイヤガラ

朝起きると、前日までの快晴から一転。空は一面の雲。

部屋のカメラ・システムを起動。部屋に残して出かける。
ホテルを早めの9時に出て(部分食は14時ごろスタート)、ベストポジションを陣取る。テレビ局も多数取材に来ている。

しかし、雲は厚い上に、さらに小雨まで降ってくる。
7年越しの「ナイヤガラで皆既日食」へ後ろ髪ひかれる私とは対照的に、一緒に来ている友人がWindyをメインに天気予測をみて、皆既時刻に「雲のない部分」が通過する場所を発見。
彼に背中を押されて移動することにし、当日にしてプランCが爆誕。(結果的にこれが吉と出る!)

プランC:ペンシルバニア州エリー、シェーズ・ビーチ

私が運転中も、友人は刻一刻と変換する雲予測や天気予報を見て、最も可能性の高い場所、ペンシルバニア州、エリー湖湖畔にある Shades Beach Parkに設定。
ナイヤガラからは約180km、2時間ほどの距離。プランBの為レンタカーは借りっぱなしだったのが良かった。

やっと到着した目的地だが、駐車場に入る道路が封鎖されている!「満車」らしい。
セキュリティガードの女性に「近くで車停めて、日食をみれるような広い駐車場とか、無い?」と聞き、スマホで場所を探してモタモタしていると、なんと1台出ていく車が!
そしてセキュリティガードさんが「1台入れるよ!」と!!!

この時点で部分食が始まるまで15分も無かった。

車を停め、ビーチに出て場所を確保。360度動画だけセット・放置。
初めての日食は肉眼と体で体感することを目的とした。

そうするとSV-Bonyの望遠鏡を持った天文ファンと思われる3人組が隣にやってきて、望遠鏡とカメラのセッティングを始めた。
「あなたたちも天文ファン?」「日本から来た」「ニューヨークから来た」「皆既は初めて?私らも!」
と盛り上がりました。
彼らも天気予報をにらめっこして、この場所が「Best Possibility」ということでギリギリにたどり着いたらしい。同じやねぇ、、と。

部分食スタート

近くにいる子供が”It’s started!”と叫ぶ。
まだ雲が残っている時に部分食がスタート。
ただ、雲の流れる方向を考えると、このあと雲の無い部分が来ることが予測できた。
大きい黒点が月に隠れたあたりで、上空の雲が切れて、歓声が上がる。このままもってくれ。

今回、3種類の日食メガネを数多く持って行った。
見える色、明るさ、シャープさがそれぞれ違ったり、眼視では最もシャープなものがスマホで写すとにじんだり、逆に眼視はあまりシャープじゃないけどスマホで綺麗に撮れるものとか、部分食の間はいろいろ試して興味深かった。地元の親子がまともな日食眼鏡を持ってなかったので、一家全員に予備をあげたりした。

皆既近くになって少し薄雲が通り過ぎることがあったが、基本的には空はクリア。
気温が急に下がり、鳥が鳴きだし、徐々に太陽の明るさが落ちて、日食グラス越しにはほとんど見えなくなっても、まだ直視するには眩しい。

皆既

が、ダイヤモンドリングの後、一転して「夜」に。金星も見える。残念ながら木星と火星は雲の中だった。コロナもプロミネンスも肉眼で見えた!

しかし、一度歓声を上げた後は、何かに圧倒されて声にならない。
変な例えだけど、真っ黒い太陽は「圧倒的な静寂」なのに「ものすごい音圧」があるように感じた。
いや、これは言葉でも映像でも説明できない。体験してみて、としか言えない。。。

我に返ってスマホで数枚だけ写真を撮った以外、全身で皆既日食を感じていました。

皆既おわり

皆既が終わって天文ファン同士でハグ!知らない土地で天文ファン同士、隣で観測できたことがとても嬉しかった


夜、ナイヤガラに戻ったら、快晴でした。
ホントに日食の間だけ曇ってた様子。でもお祭り騒ぎで滝では花火大会とドローンショーをやってました。
そして、日食の祝杯はやっぱり「コロナ」!

こちらは部屋に仕掛けていたタイムラプス。皆既時に真っ暗になったのはわかるが、ほぼ雲に覆われている。エリーに移動して正解でした。

帰国

翌9日、バッファローからJFK-羽田-経由で大阪へ。5泊7日の弾丸ツアーでした。
しかし、いくら映像を見せても、言葉や文字で語っても、この体験を100%伝えるのは不可能と思います。体験出来て良かった!!

【番外編:盗難対策】

経由地ニューヨークでは、高いホテルを取らないと盗難リスクがあるということで、今回は全行程、3つ星以上のホテルにしました。物価もドルも高い!

ナイヤガラでは部屋にタイムラプスカメラと、スティックPCを残していくので、徹底的に盗難対策
・カメラ、スティックPC、スーツケースは部屋の固定物にセキュリティ・ワイヤーを固定。これでワイヤーを切らない限り持っていけない。
・部屋には「ルームメイクお断り、ライブ中継中」の張り紙をあちこちに。部屋を入ってすぐの所には、チップも置いておく。
・人間を認識して自動追尾するWEB監視カメラを設置。(amazonで3000円くらいで売ってた。)近くに人が来るとカメラが動いて顔の方を向くので、抑止力にはなるかと。
また、人間を検知するとメールが飛んできて、スマホで映像を確認、スピーカーから話しかけられる。
これを目立つ場所にどんとおく
・カメラ設置エリア周辺に「三角コーン」や「工事用の黄色と黒のシマシマテープ」を貼って、物々しい雰囲気に

三脚の位置がズレても困るので、万一ルームメイクさんが入って来ても絶対に触るのを躊躇しそうなようにしておきました(笑)