PixInsightを始めとして画像処理で理解すべき概念の一つに、リニア、ノンリニアがあります。とくにPixInsightではABE/DBE、PCCなどリニアのうちに実行しなければいけない処理も多数。使い始めたときに最初にやってくるハードルかもしれません。どの処理がリニアで実行すべきか、どの処理をするとノンリニアになるかを覚えておけば作業はできますが、やっぱり概念は理解しておいたほうが、その後の処理への理解も変わってくると思います。今回は、リニア、ノンリニアについて、なるだけ簡単に説明します〜。PixInsightを使って例を示していますが、ユーザーでない方にもお読みいただけると思います。
リニアってなんだ?
リニアといえばリニアモーターカー。子供のころから楽しみにしているのですが、いつになったら乗れるんでしょう?通常のモーターはぐるぐる回る円形に対して、リニアモーターはまっすぐに伸びています。リニアとは、まっすぐということです。では何がまっすぐ?
撮影したばかりのRAWデータはリニアです。
このとき、センサーの受光量が2倍ならデータの値も2倍、受光量が3倍ならデータ値も3倍という関係にあります。
いわゆる比例というやつです。ちなみにデジカメが処理したJPEGファイルはリニアではありません。カメラ内でノンリニアの画像処理がされています。
デジカメで撮影したばかりのRAWデータはとても暗いので、ここで画像処理をすることにします。画像を明るくするのに一番シンプルな画像処理はリニアな処理です。
リニアな画像処理をやってみる
実際の画像を使って試してみましょう。
この処理方法はPixInsightの定番解説本であるInside PixInsightを参考にしました。モノクロの方がわかりやすいので、先日チリのリモート撮影したらせん星雲の画像を使います。
撮ったばかりのRAWデータはこんなに真っ黒です。
ここでSTFを使ってストレッチをかけます。Auto Stretchしてしまうとノンリニアな処理になるのでマニュアル操作をすることにします。まずSTFを起動します。STFは左の歯車ボタン(Process Explorer)の中にあるScreenTransferFunctionです。起動したSTFのウィンドウで、Reset, Track View、Edit STF Modeを押します。
リニアな状態を保ったまま画像を明るくするにはハイライトと呼ぶ右端のスライダーを左に動かします。今回はモノクロの画像なのでK(黒色)のみを動かすことができます。このとき真ん中のスライダーも中央の位置をキープしながらついてくることも確認ください。
この画像はとても暗くて、スライダーを左に寄せてもあまり明るくなりません。このときはズームボタンを使います。ズームボタンを押してゲージ部分をクリックします。
だんだん画像が浮かんできました。
リニア変換では飽和してしまう・・・
画像はまだ暗いので、もっとスライダーを左に寄せてみます。すると困ったことが起きます。明るい部分が飽和してしまうのです。
俗に言うサチるというやつです。実際の世界では、ものは無限に明るくなれますが、コンピューターでデータ化したときは最大値が存在するためです。
飽和してしまうとすべて白につぶれるので情報が失われたことになります。これは困ります。暗い部分を明るくしようとすると明るい部分が飽和する。明るい部分を飽和させまいとすると暗い部分が見にくい。
そこで登場するのがノンリニア処理です。
ノンリニアなストレッチ処理
ノンリニアに明るくする(ストレッチ)するには、今度は真ん中スライダーを動かします。
すると飽和を避けつつ、暗い部分を明るくすることができました。これがノンリニアなストレッチ処理です。
中間の明るさ部分を持ち上げつつも、明るい部分はあまり変更をかけないため、詳細を浮き出しながらも明るい部分は飽和せずに残すことができたのです。
このとき、直線であったグラフが曲線になっています。つまり線形=リニアではなく、ノンリニアな変換をしたということです。
背景が明るくなりすぎましたので、左端のスライダーを右に少し寄せてみます。左端のスライダーはシャドウと言ってどこを黒色とみなすかスタート地点を決めます。右に寄せることである明るさ以下の灰色を切り捨てて黒くします。
すると背景が黒く引き締まりました。
これが基本的なノンリニアな変換です。
ノンリニアの問題点
ここで疑問が生まれます。「ノンリニアがそんなにうまくいくなら、どうして最初からノンリニアな変換をしないのか?」
これは蒼月城さんの画像処理入門のリニア画像の章に詳しく解説されています。ここでは私なりのアレンジを加えて解説したいと思います。(といいながら後で読み返したら、あんましアレンジ効いていない気がしています・・・)
まったく同じ色・明るさをもつ二つの星があったとします。RGBの比率は1 : 1 : 2としましょう。片方の星Aは地球に近く明るく輝いています。もう一方の星Bは地球から遠いため暗く見えます。
二つの星を撮影したところ、RGBデータは次の通りでした。
星AのRGB = (10, 10, 20)
星BのRGB = (5, 5, 10)
星Bの方が遠いので値も小さくなっています。ここで画像処理をかけることにします。リニア処理をして全体を2倍にすると・・・
星AのRGB = (10, 10, 20) → (20, 20, 40)
星BのRGB = (5, 5, 10) → (10, 10, 20)
となります。リニア処理のためRGBの比率は1 : 1 : 2で保たれています。明るさは変わったものの同じ色ということです。10倍しても(100, 100, 200)と(50, 50, 100)で比率は変わりません。ただし、このデータの最大値が256だった場合、20倍してしまうと星AのBチャネルは飽和してしまいます。
さて、ここでノンリニアな変換をかけてみます。
変換後は次の値になります。
星AのRGB =(10, 10, 20) → (18, 18, 22)
星BのRGB =(5, 5, 10) → (10, 10, 18)
このデータのRGBの比率は次のようになります。
星A = 1 : 1 : 1.2
星B = 1 : 1 : 1.8
同じ色、明るさの星だったにもかかわらず、星Bの方がBlueの比率が高く青みがかかってしまい、違う色になってしまうのです。またもともとのRGB比率である1 : 1 : 2も崩れています。
このようにノンリニアな変換をするとオリジナルのRBG比率が大きく変わってしまいもとに戻らなくなります。そのためバックグランドノイズ除去、色合わせなど画像のリペア処理など基本的な処理はリニアのうちにやっておく必要があります。
ノンリニアは色の彩度や明度など様々な加工ができる反面、失敗するとすべてを台無しにしてしまう処理でもあります。とくに夜中に張り切って画像処理をしてはまってしまい、朝になってみるとギラギラ、ゴテゴテで全部やり直し!ということも何度も経験しています。ノンリニアにはご用心を!
PixInsightの全体フローの解説も是非ご覧ください。