RAWファイルを処理できる場合、RGRGRG行とGBGBGB行(またはRGBGRGBG行)で構成されるベイヤーピクセル配列があります。すべてのRピクセルとBピクセルを無視し、Gピクセルを合計して、平方根を取得できます(赤または青の2倍の緑のピクセルがあるため)、Gピクセルの数の半分で分割します。これにより、写真の「緑」の適切な加重平均が得られます。次に、赤と青の平均を取り、3つの平均すべてから緑の割合を計算します。
CMOSセンサーは光の波長ごとに感度が異なるため、より正確にするには、赤、緑、青のセンサーピクセルの適切な重み付けを考慮する必要があります。一般に、重量はセンサーによって異なります。それは簡単なアプローチです。
時刻、さまざまなタイプの人工照明などによる色かぶりを考慮するには、まずLightroomなどのツールで各写真を前処理してホワイトバランスを修正し、次に標準のRGBピクセル画像で計算を実行する方が適切な場合があります。RAWセンサーデータの処理とは異なり、緑の成分全体を平均するのではなく、ピクセルの「緑の純度」に基づいて計算に重みを付けます。ピクセルが純粋な緑であればあるほど、その重みは赤または青のピクセルよりも高くなります。処理前にホワイトバランスを正規化することで、雲量、時刻、季節などの無数の要因を考慮して設計された接線を使用して、かなり単純な計算を複雑にする必要がなくなります。
それでも、空などの非入射ピクセルの広い領域を考慮する必要がある場合があります。あなたが何を達成しようとしているのかをより正確に知ることなく、私はその分野であなたを本当に助けることはできません。「写真」全体の緑は、おそらく「空」のピクセルを含む緑と赤と青の比率を計算することで最も役立つでしょう。
手順については、18%グレーカードなどの一般的なベースラインに対して測定された同じ光源(同じ強度と色温度)で同じカメラ設定で写真を撮影する場合、明らかに行くことは言うまでもありません結果を正規化するための長い道のり。デジタルでは、RAW処理ソフトウェアと基本的なホワイトバランスピッカーツールを使用して不一致を修正できるため、必ずRAWで撮影してください。
写真の「グリーン」の計算に関する洞察をさらに提供するため。緑のベイヤーピクセル対青と赤の重みを計算したり、RGBピクセルの赤/青の純度に関連して緑の純度を計算したりといった単純な方法があることは明らかです。HSV(Hue / Saturation / Value、HSBと呼ばれることもあり、ValueをBrightnessに置き換えます)などのより適切な色空間に変換し、HUE空間の曲線を使用して緑の量を計算すると、さらに幸運になるかもしれません。(注:HSLは異なるタイプの色空間であり、写真の「緑」の量を計算するのにはおそらく理想的ではないため、HSVを使用します。これらの色空間の詳細については、こちらをご覧ください。)純粋な緑(彩度や値に関係なく)は120°の色相角で落ち、赤(0°)または青(240°)に向かうにつれてそこから落ちます。240°から360°の間では、彩度や値に関係なく、ピクセルの緑の量はゼロになります。
図1.色相プロット-色相の緑の純度
特定のニーズに合わせて実際の重み付け曲線を調整できますが、単純な曲線は次のようになります。
range = 240
period = range * 2 = 240 * 2 = 480
scale = 360/period = 0.75
pureGreen = sin(scale * 120)
の値は1.0であるpureGreen
必要があります。計算式は次のように実行できます。greenness
sin(scale * hue) } 0 > hue > 240
greenness =
0 } 240 <= hue <= 360 || hue == 0
これhue
は、HSVカラー値からの色の度合いです。これradius
は、period
緑がある程度存在する半分です。scale
ように調整する私たちの時代に罪カーブ、sin(scale * hue)
あなたは純粋な緑(その緑の強度を無視して)を持っているとまったくピーク(リターン1.0)。の量はgreenness
期間の前半でのみ有効であるため、緑の計算は色相が0°より大きく240°より小さい場合にのみ有効であり、他の色相ではゼロになります。
期間、定義する範囲green
が存在する可能性がある(つまり、0から240 40 > hue > 200
ではなく、代わりに制約を設定する)範囲を調整することで重みを調整し、その範囲外のすべてを0の緑を持つように定義できますこれは数学的に正確ですが、完全に知覚的に正確ではない場合があることに注意してください。もちろん、式を微調整しpure green
て黄色のポイントを調整し(知覚的に正確な結果が得られる可能性があります)、曲線の振幅をプラトーに増やし、純粋な緑のバンドを単一の色ではなく色相の範囲に拡大します色相値など。人間の全体的な知覚精度のために、CIE XYZおよびCIE L a b *で処理されるより複雑なアルゴリズムスペースが必要な場合があります。(注:XYZおよびラボスペースでの作業の複雑さは、ここで説明した以上に劇的に増加します。)
写真の緑度を計算するには、各ピクセルの緑度を計算してから平均値を生成します。その後、そこからアルゴリズムを取得し、特定のニーズに合わせて調整できます。
EasyRGBには、RGBからHSV への変換など、色変換のアルゴリズムがあります。
var_R = ( R / 255 ) // Red percentage
var_G = ( G / 255 ) // Green percentage
var_B = ( B / 255 ) // Blue percentage
var_Min = min( var_R, var_G, var_B ) //Min. value of RGB
var_Max = max( var_R, var_G, var_B ) //Max. value of RGB
del_Max = var_Max - var_Min //Delta RGB value
V = var_Max //Value (or Brightness)
if ( del_Max == 0 ) //This is a gray, no chroma...
{
H = 0 //Hue (0 - 1.0 means 0° - 360°)
S = 0 //Saturation
}
else //Chromatic data...
{
S = del_Max / var_Max
del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
if ( var_R == var_Max ) H = del_B - del_G
else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
if ( H < 0 ) H += 1
if ( H > 1 ) H -= 1
}