第343回 では、連続して撮影した複数の写真を繋げて、タイムラプス動画やスタートレイル動画を作成する方法を紹介しました。今回は複数の写真を使った「スタッキング」に挑戦してみましょう。
写真のスタッキングとは?
スタッキングとは複数の写真を重ね合わせて平均化する手法で、高感度ノイズや画像のゆらぎの軽減を目的として、主に天体写真の分野でよく利用されています。
星は非常に暗い点光源です。暗い被写体を撮影する時は、シャッタースピードを遅くして光をより多く取り込むのが定石ですが、星は地球の日周運動によって常に動き続けているため、うかつに長秒露光をかけると点がブレて線になってしまいます。そのため星を撮影する時は、センサーの感度を上げてシャッタースピードを稼ぐか、いっそ星を静止させるのを諦めるか(いわゆるグルグル写真にする)の二択となります。
図1 星を静止させることを諦めた例。星は動いてしまうが、超低感度で撮影できるため、非常にクリアな星景写真になる
当然ながら、星を静止させて写したい場合は、高感度で撮影するしかありません[1] 。
センサーの感度を上げると、いわゆる「高感度ノイズ」が画像全体に対してランダムに発生します。ランダムに発生するというのがポイントで、連続して撮影した写真の特定のピクセルに注目すると、そのピクセルにノイズが発生しているカットと発生していないカットがあることになります。そこで複数のカットを重ねて平均化すれば、ノイズを軽減できるわけです[2] 。
単に画像を重ねて平均化するのはそれほど難しい作業ではなく、ImageMagickのconvertコマンドでも可能です。しかし前述の通り、天体は常に動き続けているため、あるカットと別のカットでは、天体の位置が微妙にズレて写っています。そのため、カットごとに微妙なズレを補正しながら画像を重ねていく必要があります。考えただけでも非常に面倒くさい作業ですが、カットごとの天体の位置を検出し、自動的に位置合わせをしてくれるスタッキングアプリというものが存在します。それが今回紹介する「Siril 」です[3] 。
Sirilのインストール
SirilはUbuntuのリポジトリにパッケージが用意されているため、APTで簡単にインストールできます。
$ sudo apt install siril
インストールが完了したら、GNOMEのアクティビティから「siril」と検索してアプリを起動してください。
画像のコンバートとシーケンスの作成
あらかじめ、スタッキングする複数の画像を用意しておいてください。ここでは例として、筆者が撮影した6枚の画像をスタックして、ノイズ感の軽減を確認してみます。
図2 スタックの元となる写真のうちの一枚。このカットには残念ながら赤い破線で囲った部分に人工衛星が写り込んでしまっているが、これもノイズ同様、スタッキングによって除去することができる。
まずJPEG画像を、Sirilが使用するFITS形式[4] に変換する必要があります。「 File conversion」タブを開いたら、スタックしたいファイルすべてを「Source」にドラッグ&ドロップして追加してください。
[4] FITSはFlexible Image Transport Systemの略です。天文学の分野でよく利用されており、単なる画像ファイルではなく、天体に関する様々なデータセットも同時に格納できるフォーマットです。
図3 直接ドラッグ&ドロップするか、Addをクリックしてファイル選択ダイアログからスタックしたいファイルを追加する
Sirilはスタックする一連のファイルを、シーケンスという単位で管理します。「 Sequence name」に任意のシーケンス名を入力してください。
この際、変換した画像やシーケンスファイルはワーキングディレクトリ内に保存されます。デフォルトは「~/Pictures」ですが、もしも異なるディレクトリを指定したい場合は「Change dir」をクリックして変更してください。
「Convert」をクリックすると画像が変換され、シーケンスが作成されます。
図4 変換中の状態。Output logsタブに進捗状況が表示される
図5 変換が完了すると画像ビューアーが開き、カラー画像とRGBの各チャンネルが確認できる
シーケンスの選択
「Sequence」タブでは、使用するシーケンスを選択できます。前項のシーケンス作成を行った直後は、そのシーケンスが自動的に選択された状態となっていますので、何もする必要はありません。
もしもワーキングディレクトリ内に複数のシーケンスが作成済みの状態でSirilを起動した場合は、「 Search sequence」をクリックすることで、過去に作成したシーケンスを選択できます。
ダーク/フラットフレームを使用した前処理
「Pre-processing」タブでは、バイアスフレーム、ダークフレーム、フラットフレームを使った画像の前処理を行います。いわゆる「ダーク減算」や「フラット補正」です。ただしこれらの手順はオプションのため、補正フレームが存在しない場合や処理を行いたくない場合は、このタブをいじる必要はありません。
バイアス(オフセット)フレームとは、露出時間を0秒にした時に得られる画像のことです。露出時間が0秒であれば出力される信号も0となるはずですが、実際は様々なノイズなどにより、露光時間を0にしても画像の輝度は0になりません。バイアスフレームは、こうした光による電気信号がまったくない状態でも発生するノイズを除去するために使用します。
デジカメで長時間撮影を行っていると、センサーが熱を持ち、撮影した画像にノイズが乗ってきます。これをダークノイズと呼びます。ダークノイズはランダムに発生する高感度ノイズと異なり、カメラの個体や温度、露光時間といった条件が同じなら、規則的に発生するという特徴があります。そこで、ダークノイズのみを撮影した画像を別途用意して撮影した画像から減算することで、規則的なノイズを除去できます。このダークノイズのみを撮影した画像を、ダークフレームと呼びます[5] 。
[5] カメラの長時間ノイズリダクション機能を有効にしていると、たとえば10秒のシャッターを切ったら、その後10秒間カメラが操作不能になってしまいます。この時カメラ内部では、シャッターを閉じた状態で露光をかけてダークフレームを取得し、ダーク減算が行われています。ダークノイズは露光時間に応じて出かたが変化するため、ダークフレームの取得には露光時間と同じだけの時間をかける必要があります。そのため露光時間と同じ時間だけ、カメラが操作不能になってしまうのです。星の光跡を撮るような場合は、カットとカットの間に空き時間ができてしまうと光跡が途切れてしまうため、カメラの長時間ノイズリダクション機能はOFFにするのが基本です。
レンズには、レンズの中心から外側へ向かうほど光量が落ちてしまうという特性があり、これを「周辺減光」と呼びます。これは主に広角レンズにおいて、写真の四隅が顕著に暗くなるという問題を引き起こします。そこで周辺減光のみを撮影した画像を用いて、周辺減光を補正するのが「フラット補正」です。この周辺減光のみを撮影した画像を、フラットフレームと呼びます。
より詳しい情報はチュートリアル を参照してください。
図6 ダークフレームは比較的簡単に用意できる上、効果も大きいため、余裕があるならば撮影しておくとよい。ただしダークノイズの出かたはその時の状況によって異なるため、必ず現地で、同時に、同条件で撮影しておく必要があることに注意
画像の位置合わせ
「Registration」タブでは、各画像をどれだけシフトさせればよいのかを自動的に計算し、画像の位置合わせを行います。この際、画像そのものは変更されず、シフトパラメーターのみがシーケンス内に保存されます。
「Choose registration method」は「Global Star alignment(deep-sky)」を選択してください[6] 。これはSirilのバージョン0.9.7以降で実装された自動整列アルゴリズムで、画像内にコントロールポイントという位置合わせのためのポイントを検出し、複数の写真内でコントロールポイントを一致させることで、画像を重ね合わせます。「 Algorithm」は画像のローテーションに使用するアルゴリズムの指定です。デフォルトの「Bicubic」で問題ないでしょう。最後に「Go register」をクリックしてください。
[6] 「One Star Registration(deep-sky)」は単一の星を対象としたメソッドで、シフトのみで位置合わせを行い、回転やスケーリングを行いません。Image Pattern Alignment (planetary-full disk)は惑星の画像、Enhanced Correlation Coefficient(planetary-surfaces)は月面画像に適した方法です。
図7 Registrationタブの画面。基本的にはregistration methodを選択するだけでよい
図8 画像ビューアーに検出されたコントロールポイントが表示される
登録処理が完了すると、Plotタブにグラフが表示されます。ここで実際にスタッキングに使用する画像を選択できますが、今回はデフォルトのままで行うため省略します。
スタックの実行
最後に、「 Stacking」タブで画像のスタッキングを行います。Sirilには様々なスタッキングメソッドが用意されていますが、今回は逸脱したピクセルを除外して平均的な画像を得られる「Average stacking with rejection」を使用します。「 Rejection」ではピクセルを除外するメソッドを選択できます。今回は6枚中1枚に写り込んでしまった人工衛星を除外したいので、「 Percentile Clipping」を選択します。閾値である「Percentile low/high」はデフォルトのまま(20%/10%)で構いません。「 Stack this set of images」では、スタックに使用する画像を選択できます。今回は6枚すべてを使用するので「all」のままにしておきます。
「Start stacking」をクリックすると、スタッキング画像が生成されます。
図9 Stackingタブの画面。Stacking Methodsを選択したら、あとはデフォルトのままでよい
スタックされた画像は「Store result in file」で指定したFITSファイルに保存されます。またRGB imageのウィンドウにはカラー画像が表示されます。RGB imageウィンドウを右クリックして「Save RGB image to JPG」を選択すると、カラー画像をJPEGとして保存できます。
図10 スタック前の画像のうちの1枚(左)と6枚をスタックした結果(右)の比較。ザラザラのノイズ感が軽減されているのがわかる
おわりに
写真を合成することについては色々と意見があるかとは思いますし、フォトコンテストでは明示的に禁止されている場合も多いでしょう。とはいえ、こうした自由な加工が、デジタル化された写真の楽しみのひとつであるのは間違いありません。ぜひSirilのようなアプリケーションを活用して、お手元の写真を素敵に仕上げてみてください。
なお本記事が公開されてすぐの8月12日に、ペルセウス座流星群が極大を迎えます。こんなご時世ですのであまり遠出はできないかもしれませんが、夏休みはカメラを持って、夜空を見上げてみてはいかがでしょうか。