|
●概要 明るさ、コントラスト、色調などの変換処理である。 ●原理 ○変換対象 ここでの濃度変換は、すべてRGB値のそれぞれを独立で変換する方式としている。 ○基本方式 濃度変換は、RGB各値を入力とし、一定の伝達関数を通して、新しいRGB値を得る処理となる。伝達関数の形状で、明るさ補正やコントラスト補正となるだけである。 ●Intensityメソッド ○演算 R' = R + V -255 < V < 255 で、結果は、0 ≦ R'、G'、B' ≦ 255 に納められる。 ○高速化 i + V を、i = 0 から 255 まで予め算出、閾値処理しておき(つまりこれが伝達関数となる)、テーブル参照で済ませている。 ●Gammaメソッド ○演算 R' = 255 * (R/255)γ 1/4 < γ < 4 で、結果は、0 ≦ R'、G'、B' ≦ 255 に納められる。 ○高速化 255 * pow(i/255, γ) を、i = 0 から 255 まで予め算出、閾値処理しておき、テーブル参照で済ませている。 ●Sepiaメソッド ○演算 R' = R * 0.957 * V 0.6 < V < 1.4 で、仕上がりの明るさを調整する。 ○高速化 RGB各値用に上記式にて予め閾値処理も含めて算出し、参照で済ませている。 ●GetContrastCurve メソッド ○コントラスト補正方式 明るさでは線形(的)変換であるが、コントラストでは非線形となる。一般に、狭いダイナミックレンジの画像を有効最大レンジまで伸張させることにあるので、画像に含まれる対象要素値の最小と最大を求める。この時、統計的ばらつきを抑えるには、頻度を調べ、両端をシグマによって無視するなどすれば良い。専用アプリではこの伝達関数を任意の形にできるものがあるが、一般的用途では処理が煩雑過ぎる。 ここでは、伝達関数として、ガンマ補正を採用し、下図のように、γ係数を1より大と1より小の領域に分け、S字カーブを得るようにする。例えば、入力が中間値までは、γ>1 とし、中間値以上の場合は、γ<1 などとする。 上図のように入力の最大値をmax、最小値をmin とする。有効レンジの範囲を0〜Max(通常は255)とし、これにて、min〜max が、0〜Max に伸張されることになる。伝達関数は以下のように求める。 ○原始関数を求める 全有効範囲の関数である。つまり、入出力共に、Min〜Maxの関数。与えられたパラメータ γ (1/4 〜 4 程度) を指数とし、0〜 Max/2 までを以下のように求める。 Y = Max * ( X/Max)γ 但し、X =(0,1,2・・・・・,Max/2)、YはDouble 後半は、上で求めた関数 f() を、Max/2 点で180度回転させたものとする。回転処理は、回転演算するまでも無く、 Y = Max/2 - f(Max/2 -(X - Max/2)) + Max/2 で求められる。 ○入力範囲に圧縮する 原始関数の横軸を移動、縮小し、min 〜 max までの関数に変形する。X = (0,1,2,・・・・・Max) に対し、 x = Max /(max - min) * (X - min) x はDouble Y = f(x) ここで、線形補間を用いる 但し、 X < min のとき、Y = 0、X > max のとき、 Y = Max とする。 とする。このYを閾値処理し、バイト配列にし、これを伝達関数として返す。 ●Contrast メソッド 指定されたガンマ係数と入力のmin値、max値をもって、上記のGetContrastCurve で伝達関数を求め、濃度変換している。 ●自動コントラスト補正(AutoContrast メソッド) 写真では、コントラストの低い画像は助けられるが、コントラストのドキツイ画像(ドンシャリ画像)は通常は助からない。これは、黒ツブレまたは白トビが生じていて、もはや正常な値を算出できないからである。但し、RAWファイルがあれば、救われる。 ○一般的な方法 ヒストグラム平坦化と言うのがある。これは二つの意味があり、一つは、度数分布を完全に均一値(総ピクセル数/256)にするものである。処理は複雑であるが、カラー写真では不自然になる。コントラストの程よい写真の濃度分布は、殆どの場合は正規分布に近いのに、無理やり均一にするからであると筆者は考える。黒と白(トビ)が目立ち、ドンシャリ状態となる。また、同じ濃度値のピクセルが異なる濃度に変換されることがあるので不自然になる原因の一つとなる。 他方は、度数分布の累積値を線形にする方法である。これは、度数分布の詰まっている部分は疎に、まばらな部分は蜜にする変換となる。Rから新値 R' を求めるには、 R'(R) = Rmax * Σ(histo(i)[i=0 to R] )/ 総ピクセル数 なる演算となる。Σ(histo(i)[i=0 to R] は、R までの累積度数である。この場合も、低域と高域の相対比率が高くなり、上記の同じ傾向となるので、筆者としては、自然なカラー写真には利用できないと考える。 ○線形拡張 自動コントラストより、パラメータによるインタラクティブな補正が最も好ましいが、どうしてもと言う場合は、濃度分布の形状を維持したレンジの拡張が良い。この場合は、眠い画像の補正のみ可能で、既に述べたように、ドンシャリ画像は誰も救えない。本ライブラリでは以下のようにしている。
●実例 ○原画 コントラストの低い元画像。
○線形拡張による自動補正 良好な結果と言える。
○ヒストグラム平坦化(度数均一化) ヒストグラムはほぼ均一になっているが、画像としては頂けない。
○ヒストグラム平坦化(累積密度均一化) 画像としては頂けない。
|