SLRを使用して写真の「グリーン」を測定するにはどうすればよいですか?


13

バックグラウンド

私のデジタル写真は、MatlabやRなどのコンピュータープログラムにamxnx 3マトリックスとして読み込むことができます。ここで、mxnは3つの(赤、緑、青)センサーのそれぞれによって観測されるピクセル数で、マトリックスの各セルには数字がありますセンサーが観測した明るさを反映した1〜255から。

私はこの情報を使用して、写真の緑の客観的な測定値を取得したいと思います。なぜなら、緑と植物の成長を相関させたい(トウモロコシ畑の1日につき1枚の写真を想像する)ためです。

この方向の前の仕事は、緑のインデックスを次のいずれかで計算することにより、ある程度成功しました。

  • 緑%=緑/(青+赤)または
  • 緑の発散= 2 *緑-赤-青

各mxnピクセルのウェブカメラ画像から取得しましたが、開口部または入射放射(太陽角)を制御できませんでした。

緑の「絶対的な」尺度を探しているわけではないことに注意してください。数字のスケールと分布は重要ではありません-緑の一貫した相対的な尺度を提供する必要があります。

質問

SLRを使用して、次のいずれかまたはすべてで不変である緑の堅牢な測定値を取得できますか。

  • 雲カバー?
  • 時刻?
  • 年の日?(これが唯一の要件です)
  • 背景の空/地面の割合?

現在の状態

私は次のアイデアを思いつきましたが、どれが必要なのか、または緑/(赤+青)の比率に影響を与えないのかはわかりません

  1. 白い部分のプラスチックの写真を撮り、この画像を使用して他の値を正規化します
  2. 絞りを固定
  3. シャッター速度を修正
  4. 白い紙を使用してホワイトバランスを設定します
  5. 同じ角度からすべての写真を撮る
  6. 太陽の正午にすべての写真を撮る

1
あなたは人工照明を検討するかもしれません、それは手順をより簡単にするでしょう。フラッシュは適切に動作するはずです。同じ場所にあり、電源が入っていることを確認してください。
PearsonArtPhoto

@Pearsonarphoto-おもしろいアイデアです。日中は写真を撮ろうと考えていましたが、おそらく月のない夜に写真を撮る方が理にかなっています。
デビッドルバウアー

1
Pearsonartphotoのアドバイスに従っている場合は、シャッター、絞り、およびISOを手動で設定します。シャッターをフラッシュの同期速度(通常は1/200〜1/320)に設定し、絞りとISOを低く設定します。彼らはフラッシュ電源を使い果たすことなく行くことができるように。これにより、周囲ができるだけ暗くなります-満月でも問題ないはずです(一方、真昼の太陽、...)この状況では、軸上のフラッシュが最も少ないでしょう。 。
エヴァンクラル

2
@Evan私は、軸上のフラッシュについては同意しません。理由は次のとおりです。photo.stackexchange.com / questions / 9531 / —あまりにも多くの直接的な反映。ここで説明したように、偏光子を使用する場合を除きますが、ギアが同じままであり、ホワイトバランスが正しく行われていることを確認する必要があります。偏光子はホワイトバランスを変更します。
サイモンA.エグスター

2
クロロフィルは近赤外で最も明るい:yale.edu/ceo/Documentation/rsvegfaq.html NDVIなど、これに基づいた植物の「緑」の標準的な尺度があります。したがって、可能であれば、NIRバンドを記録できるカメラを入手してください。
-whuber

回答:


12

RAWファイルを処理できる場合、RGRGRG行とGBGBGB行(またはRGBGRGBG行)で構成されるベイヤーピクセル配列があります。すべてのRピクセルとBピクセルを無視し、Gピクセルを合計して、平方根を取得できます(赤または青の2倍の緑のピクセルがあるため)、Gピクセルの数の半分で分割します。これにより、写真の「緑」の適切な加重平均が得られます。次に、赤と青の平均を取り、3つの平均すべてから緑の割合を計算します。

CMOSセンサーは光の波長ごとに感度が異なるため、より正確にするには、赤、緑、青のセンサーピクセルの適切な重み付けを考慮する必要があります。一般に、重量はセンサーによって異なります。それは簡単なアプローチです。

時刻、さまざまなタイプの人工照明などによる色かぶりを考慮するには、まずLightroomなどのツールで各写真を前処理してホワイトバランスを修正し、次に標準のRGBピクセル画像で計算を実行する方が適切な場合があります。RAWセンサーデータの処理とは異なり、緑の成分全体を平均するのではなく、ピクセルの「緑の純度」に基づいて計算に重みを付けます。ピクセルが純粋な緑であればあるほど、その重みは赤または青のピクセルよりも高くなります。処理前にホワイトバランスを正規化することで、雲量、時刻、季節などの無数の要因を考慮して設計された接線を使用して、かなり単純な計算を複雑にする必要がなくなります。

それでも、空などの非入射ピクセルの広い領域を考慮する必要がある場合があります。あなたが何を達成しようとしているのかをより正確に知ることなく、私はその分野であなたを本当に助けることはできません。「写真」全体の緑は、おそらく「空」のピクセルを含む緑と赤と青の比率を計算することで最も役立つでしょう。

手順については、18%グレーカードなどの一般的なベースラインに対して測定された同じ光源(同じ強度と色温度)で同じカメラ設定で写真を撮影する場合、明らかに行くことは言うまでもありません結果を正規化するための長い道のり。デジタルでは、RAW処理ソフトウェアと基本的なホワイトバランスピッカーツールを使用して不一致を修正できるため、必ずRAWで撮影してください。


写真の「グリーン」の計算に関する洞察をさらに提供するため。緑のベイヤーピクセル対青と赤の重みを計算したり、RGBピクセルの赤/青の純度に関連して緑の純度を計算したりといった単純な方法があることは明らかです。HSVHue / 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
}

1
生の加工技術に+1。dcrawソースは出発点として適切ですcybercom.net/~dcoffin/dcraw/dcraw.c
プロファイルをお読みください

1
Raw Processingは緑のレベルの計算を簡単にしますが、色かぶりの処理はかなり複雑になります。
jrista

3

GLOBEプロジェクト

白い紙を使用しないでください。これらは、一部のUVを青色光に変換し、不適切な露出を引き起こす蛍光増白剤を含んでいます。これが商用のグレーカード(jristaが示唆する)が存在する理由です。

まったく同じ場所からすべての写真を撮ることは、確かに正しいアプローチです。シャッター速度と絞りに関しては、これらは重要ではありません。シャッター速度はまったく色を変えず、絞りは画像をぼかしますが、すべてのピクセル値を合計するとこの効果は消えると思います。私はむしろ一定の露出を取得しようとします。

クラウド化されたものとクラウド化されていないものとの違いについては、いくつかのテストを実行したいだけです。緑の真の量がすぐに(つまり今日から明日まで)変化しない場合は、写真を調べるときにも変化すべきではありません。おそらく経験的なアプローチがそこに役立つかもしれません(たとえば、曇ったときに緑が常に10%高いことがわかった場合、それを補うことができます)。


GLOBEプロジェクトではありませんが、1つに変えることができます。そのサイトを指摘してくれてありがとう。
デビッドルバウアー

あなたにも興味があるかもしれません:私は現在、ウェブカメラなどからのビデオを分析し、統計(グリーンシェアなど)を出力するプログラムを書いています。今後数週間で終了するはずです。phenocam.granjow.net
サイモンA. Eugster

便利そうですね。科学者と協力しましたか?
デビッドルバウアー

評価方法が最後の部分になるため(また、簡単に変更/追加することもできます)、あまり多くありません。しかし、これはETHZürichのプロジェクトであり、そこでも使用されます。(正確には、最初は高校生がグローブプロジェクトに使用します。)
サイモンA.エグスター

1
  1. 「RAW」を撮影し、カメラの自動ホワイトバランスを使用し、ガンマ補正を使用せずに16ビットTIFFに変換することをお勧めします(つまり、カラーバランスは取れていますが、リニア出力)。16ビットは、深い影とハイライトの比率とインデックスのより良い計算を可能にします(つまり、クリッピングなし)。DCRAWはこれを実行できますが、カメラにはおそらく使いやすい独自のソフトウェアが付属しています。

  2. インデックスが必要な場合は、RGBが実際に唯一の有用な色空間です。「グリーンダイバージェンス」インデックス(過剰グリーンインデックスとも呼ばれます)については既に説明しました。これと密接に関連するグリーンリーフアルゴリズムは非常によく機能します。色ベースのピクセル分類(つまり、野菜と非野菜)を実行する場合は、HSV / HSIではなく、L a b *色空間を詳しく調べます。実際、MathworksのWebサイトには、L ab *分析。分類をスペクトル分析と組み合わせて、a)緑のピクセルがいくつあるか、b)緑のピクセルがいくつあるかという質問に答えることが考えられます。これは、時間の経過とともに変化する可能性のあるバックグラウンドスペクトル品質(土壌、ごみなど)の影響を受けるグリーンインデックスよりも便利かもしれません。トウモロコシの収穫について言及したので、カメラを上ではなく下に向けていると思いますか?

  3. 2台のカメラがある場合、下向きの画像(緑を測定)と植生カバーを測定する上向きの画像を組み合わせることができます。上向きの画像はスペクトル分析に適さず、ピクセル分類は、おそらくRGB画像の青チャネルのみを使用して、空/空以外のコントラストに基づいています。

  4. (毎日?)時系列を収集している場合、下方向の画像を「曇りの日」の画像と「晴れの日」の画像に分割し、バイアスを確認できます。生の処理中にカラーバランスを試してバイアスを補正し(存在する場合)、晴れや曇りの日が散在していると仮定して、あるシリーズを他のシリーズに合わせてスケーリングし直します(シンプルに保ちます)。

楽しんで。


赤、緑、青のタイルのあるカラータイルは、そのパスに行くとグレーのカードよりも優れている場合があります。
魚眼レンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.