PHD2の日本語マニュアルを公開しています。こちらからどうぞ。

個人サイト「Starry Urban Sky」もよろしく。

ステライメージ7におけるフラット補正

最近、撮った写真のフラット補正にだいぶ気を遣うようになってきたのですが、そこでよく利用しているのが「ステライメージ7」から搭載されている「ガンマフラット」です。これは、ライトフレームとフラットフレームがきちっと合っていない場合に、フラットフレーム側の明度分布を調整して両者を合わせ込む機能です。

なぜフラットが合わないのか?

「フラット補正」とはそもそも、天体を撮影した時と全く同じ条件で均一な光源を撮影し、「光の分布だけが記録された画像」を作成。これで目的の写真を「割り算」してやることで減光などを補正してやろうというのが基本的な考え方です。

しかし、口で言うのは簡単でも、これを完璧に行うのは至難の業です。理由はいくつか考えられます。

周辺減光が大きすぎる

明るい光学系を用いた場合や、レデューサーを用いた場合、一般的に周辺減光は大きくなりがちです。また、光害地での撮影の場合、背景レベルが高いため、周辺減光が目立ちます*1。このような場合、ほんのわずかな補正のズレも非常に目立つことになってしまいます。

光害カブリの影響

たいていの場合、夜空は地上からの光で照らされている(光害)ため、たとえ周辺減光の補正がきれいにできたとしても、明るさや色の偏り(カブリ)が残ります。また、周辺減光に加えてカブリがあるせいで、正しくフラット補正ができたのかどうかの判断自体が難しくなります。ただし、光害カブリ自体はたいてい一方向への傾斜なので、事後の補正は比較的容易です。

光源の問題

フラットフレームは、理想的には天体と同じく、無限遠からの平行光線を用いて作るべきものです。しかし実際には近距離の光源を使ったり、トレーシングペーパーで光を拡散させて使ったりする場合がほとんどです。このような場合、ライトフレームとは光の回り方が異なるため、明るさの分布の不一致が起こります。

明るさの違い

フラット補正は「割り算」なので、飽和や黒潰れさえしていなければ、本来、ライトフレームとフラットフレームの絶対的な明るさの違いは問題になりません。フラットフレーム側の「明暗の分布」がライトフレームと相対的に一致していればいいのです。しかし、ここで問題になるのがデジカメの性質です。
デジカメでは、黒潰れや白飛びを防ぐために、あるいはセンサーの性質として、実際の明るさと記録されるデータとがきれいな直線比例関係にはなっていません。そのため、ライトフレームとフラットフレームの明るさが大きく異なる場合、たとえ正しく撮影できたとしても、記録された明暗の分布は一致しなくなってしまいます。


これらの原因のうち、最初のものは(理屈の上でいえば)「難易度」の問題ですし、2番目の光害カブリについては、一応事後の補正が可能です。面倒なのは後者の2つで、たとえ正しい手順でフラットフレームを取得できたとしても、ライトフレームと合わない可能性が出てきます。


これを救う可能性があるのが「ガンマフラット」機能というわけです。

「ガンマフラット」は何を行っているのか?

「ステライメージ7」から搭載されたこの機能では、正しい補正ができるようにフラットフレームの明度分布に調整を加えます。操作できるパラメータとしては「ガンマ」と「オフセット」が用意されています。しかし説明書を見ても、これらが具体的に何をどう調整しているのかが全く分かりません。


そこで、簡単な実験をしてみることにしました。


用意したのは下のような25%グレーから75%グレーへのグラデーションを書いた16bit画像(1024×256ピクセル)です*2



これをライトフレームおよびフラットフレームと見立て、各パラメータを操作して補正結果がどうなるかを見ます。パラメータを弄っていない状態であれば、補正結果は均一な明度の画像になるはずです。なお、補正結果の計測には「ImageJ」を利用しました。バイオ系の研究者や画像解析を行う人たちにはお馴染みのツールかと思います*3


さて、それでは早速結果の方を見てみましょう。まずは「ガンマ」のパラメータを弄った結果から。



パラメータを弄っていない場合(ガンマ=1、オフセット=0%)、均一な50%グレーの画像になったのは予想通り。一方、「ガンマ」を小さくした場合はフラット補正の効きが弱く、大きくした場合には逆に過補正になっています。


この結果から、調整後のフラットフレームの明度分布を逆算する*4と、以下のグラフのようになります。



何も弄っていないフラットフレームが直線関係になっていないのは、おそらくグラデーション作成に使ったグラフィックソフトの仕様。まぁ、これはご愛嬌として……。

ガンマが小さくなるとグラフが寝て、逆に大きくなると立ち上がってきます。前述したようにフラット補正は「割り算」ですから、このグラフの傾きが大きくなればなるほど、フラットフレームの明るいところに相当する「ライトフレームのピクセル」は大きい数で割られるために暗く落ち込み、逆にフラットフレームの暗いところは小さい数で割られてぐっと明るくなります。これがいわゆる過補正の状態です。ガンマが小さい場合はこの逆です。


これだけだと、フラットフレームのコントラストが弄られているだけのように見えますが……。



調整後のフラットフレームについて、それぞれ最も暗いところを0%、明るいところを100%として明暗分布の相対値を描いたのが上のグラフです。これを見ると、ガンマを変化させることで特に中間調の明るさ割合が変化することが分かります。まさに、レベル調整で画像のγ値を変化させた時と同じような動きです*5

ただし、実際の数値の上では中間調だけではなく、上にも書いた通りフラットフレームの明暗差、すなわちコントラストも同時に変化しているので、その点は注意が必要です。



次に「オフセット」の効果を見てみます。



こちらは、オフセット値を小さくすると過補正になる傾向があります。オフセット-50%については、過補正が行き過ぎて何やら変なことになっています*6。一方、オフセット値を大きくすると補正の効き方が弱くなりますが、数字の増え方の割には変化が少ない印象です。



フラットフレームの明度分布を逆算すると上のグラフの通り。たしかに、オフセット値を小さくする方向ではグラフが大きく変化しているのに対し、大きくする方向では変化が比較的小さくなっています。



一方、明度分布の相対値を書いたグラフでは全てのカーブが完全に一致しています。つまり、オフセット値の操作では明暗のカーブの形状自体は一切変わらず、明暗の傾き、すなわちフラットフレームのコントラストだけが変化していることになります。


以上のような特性を考えると、理想的にはオフセット値で明暗の端を決めたのち、ガンマで中間調を整えるのがよさそうに思えます。しかし実際には、ガンマを動かすとコントラストも同時に変化してしまうので話がややこしくなります。再度オフセットを弄れば調整できるはずですが、理詰めで追い込むのは限界がありそうで、結局のところ色々と試行錯誤するしかないのでしょう。

それでも「オフセット値ではフラットフレームのコントラストしか変化しない」、「ガンマを動かすとコントラストだけでなく中間調のカーブも変化する」ということが分かるだけでも、多少は役に立ちそうな気がします。

余談

オフセット値を弄ったときに各ピクセルの明度が元画像の何倍になっているかを計算してみると、

  • オフセット値-25%:2倍
  • オフセット値25%:1/1.5倍
  • オフセット値50%:1/2倍
  • オフセット値75%:1/2.5倍
  • オフセット値100%:1/3倍
  • オフセット値125%:1/3.5倍
  • オフセット値150%:1/4倍

となっていて、倍数yは

y=\frac1{0.02x+1}

の式で表されることが分かります(x:オフセット値%)。


一方、ガンマの方は、関数の実態が分かりそうで分からない状態です。やっていること自体は上坂浩光氏が紹介しているガンマフラットの手順と同じようなものだと思うのですが、どうも計算数値が合いません。ヒマな人、誰か計測してみませんか?(^^;

*1:例えば、もし逆に背景が真っ黒なら、周辺減光があっても気づかないでしょう

*2:対応ファイル形式の関係で、ここに上げているのは以降のものも含めすべてJPEGになっています。もし再検証したいという物好きな人は、申し訳ないですが各自でお願いします。

*3:書きながら思ったけど、これでライトフレームの明度分布を解析して近似曲線を求めれば、適切なフラットフレームを用意できる可能性があるかも……?

*4:補正後フラットフレームの明度=補正後ライトフレームの明度÷補正前フラットフレームの明度×32927。32927は定数(=16bit階調の50%)

*5:もっとも、「余談」で書きましたが、単純にγ値を変化させているわけでもないようです

*6:なので、以降の計算では除きます。おそらく明度ゼロ以下のところにまで「原点」がずれているのだとは思いますが……。