ここ数年、星空動画が流行っていますよね。そういう私も動画で星を撮れるのは面白いかなと思ってα7Sを買ったわけですが、当然ノイズは出るわけです。昔のα7Sはアンプグローもランダムノイズも顕著に出ます。
天体写真ではそれぞれダーク減算、加算平均で対処するのが定番のやり方です。PixInsightでいうPreprocessingを動画に適用できればよいではないか。という話になる。やってみよう。
元動画にはこれを使います。なるべく高画質で再生するとノイズ感が分かりやすいです。
ダーク減算
ダーク減算を動画でやる方法はだいこもんが3年ほど前に公開していました。
処理の内容としてはたぶんこういうこと:

ライト動画1フレームに対してダーク動画1フレームを減算していくというもの。この方法を①としておきましょう。
がしかし、この方法では惜しいことがあります。
通常の天体写真ではダークフレームは何枚も、何十枚も撮るものでしょう。それはダーク減算がランダムノイズを増加させる方向の処理であること、ダークフレームのランダムノイズが大きいほど処理後のランダムノイズも増えてしまうことが理由です。ダーク減算は固定ノイズ、今回で言えばアンプグローに対処するための処理です。
だいこもんの方法ではライト動画1フレームに対してダーク動画1フレームを減算しているので、ダーク減算によるランダムノイズ増加が大きいはずです。せっかく動画でダークを撮っているのだから、ダークフレームの枚数は稼げています。こうすればよいではないか:

ダーク動画の全フレームを加算平均してマスターダークを作成、それをライト動画から減算する、というやり方。この方法を②と名前を付けておきましょう。
②のプログラムを書いて実行します。
①と②のちゃんとした比較はしません。面倒だから(爆)。たぶん良くなってるはずです。学生の身分としてはきちんと検証しないのが重罪であることはわかっています。暇になる、かつリクエストがあったらやります。処理の結果は以下:
アンプグローは少し残っているものの、ほとんど消えましたね。
加算平均
今度はランダムノイズにバイバイ(@^^)/~~~したい。加算平均をする方法はこちらの動画で見られます。効果はあるみたい。
私はDavinciResolveに慣れていないのと、何よりトラックをコピーして配置し続ける苦行に耐えられないのです。にんげんだもの。やはりプログラムを書いてパソコンに任せます。
私がやりたい処理はこういうこと:

元動画の何フレームかを加算平均して新しい動画を出力しましょう、というもの。上の絵では4フレームを加算平均するように描いていますが、元動画フレーム数よりスタック枚数が小さい限り別に何フレーム分でも原理的には問題ないです。
元動画に対して24枚のスタック枚数を指定して実行した結果がこちら:
だいぶノイズは減りました。動いている人の輪郭が不自然になりますが、これはもっとスタック枚数を減らせば軽減されるものでしょう。その分ノイズは増えますが。
元動画の設定は30fps, SS 1/4秒でしたが、この方法を使う場合は30fps, 1/30秒とかで撮ったほうが良いでしょうね。
ダーク+加算平均
ここまで来たら両方やるよね。結果はこれです:
けっこうきれいになったんじゃない?狙った効果が得られて満足です。
使用したプログラム
PythonとOpenCVで書いています。github copilotさんに思考盗聴してもらって書きました。現状はエラー処理とかそういう類のものを何もしてないので、万人が使えるものでは全くないです。
サムネイル
