ATOM Cam動画からの低ノイズ静止画作成
ATOM Camの連続動画は圧縮率が高めで夜空など変化の少ない部分はブロックノイズが目立ちます。たとえばこんな感じです。
星空撮影では複数枚撮影した画像の平均画像を作ることでノイズを低減することがよくやられています。ATOM Camの動画でもこれをやってみました。ここではffmpegとImageMagickを使います(コマンドラインツールなので、いずれもターミナルを使います)。
基本的な考え方
ATOM Cam2の仕様は
画角 :120度 = 8時間の星の動く角度に相当
画像サイズ:1920 × 1080 ピクセル
なので、8 x 3600 ÷ 1920 = 15秒 / ピクセル
0.5ピクセルまでなら星がにじまないと考えると15 x 0.5 = 7.5秒間の平均画像まで大丈夫そうです。
mp4の動画ファイルの3秒目から7.5秒間のフレーム(113枚の静止画)を切り出すには下記のようにします。
ffmpeg -i [動画ファイル名] -ss 2 -q:v 1 -t 7.5 -f image2 "img_%03d.jpg"
次に切り出した静止画の平均画像を作るには下記のようにします。
convert "img_???.jpg" -evaluate-sequence Mean avg.jpg
得られた平均画像がこれです。上記の1フレームの画像に比べるとブロックノイズがかなり低減されています。
ATOM Cam2の動画の特徴
ATOM Camの動画を見ると1秒毎にブロックノイズの状態が変動しています。想像ですが、mpegのキーフレームが1秒ごとに切り替わっていたり、なんらかの画像処理が1秒ごとに行われていたりするのが原因かも知れません。
ならば1秒に1枚の代表画像を使った平均画像でも大丈夫なのでは?との仮説が立ちます。
mp4動画ファイルの3秒目から7.5秒について1秒に2枚静止画(15枚)を切り出して、平均画像を作ってみます。静止画の切り出し方法は下記です。
ffmpeg -i [動画ファイル名] -ss 3 -q:v 1 -t 7.5 -r 2 -f image2 "img_%03d.jpg"
するとこのような画像が得られました。7.5秒間の113フレームを使った時と同じくらいブロックノイズが低減できています。
検証
0.5秒ごと7.5秒間の15枚はなくて、連続15枚でもノイズ低減できるか確かめてみます。mp4動画ファイルの3秒目から15フレームを切り出す方法は下記です。
ffmpeg -i [動画ファイル名] -ss 3 -q:v 1 -vframes 15 -f image2 "img_%03d.jpg"
結果はこのようになりました。オリジナルの1フレームとブロックノイズはほとんど変わっていません。「15枚の画像」を使うことが効果を生むのではなく、「7.5秒間の画像」を使うことが効果を生んでいるのが確かめられました。
まとめ
ATOM Camで撮影した連続動画をもとに7.5秒間の平均画像を作るとノイズを低減した静止画が生成できました。7.5秒間の全フレーム(113枚)を使っても構いませんが、0.5秒ごとに1枚(よって15枚)のフレームを使うだけでも同じくらいノイズが低減できました。枚数が少なければ処理時間も短くなるのでこの方が合理的だと思います。
この記事が気に入ったらサポートをしてみませんか?