2017-02-01 1 views
2

私はAndroidでの画像処理の初心者です。私は、画像からカラーチャンネルを分離し、それらのカラーチャンネル上で計算を実行する必要があるアプリケーションを構築しようとしています。AndroidのJPEG画像から近赤外線(NIR)チャンネルを抽出する

イメージからRGBチャンネルを正常に抽出しました。私はこれらのチュートリアルで指定されたコードの断片を使用しています:https://xjaphx.wordpress.com/2011/06/21/image-processing-filter-color-channels/ここ

は、コード断片である:

public static Bitmap doColorFilter(Bitmap src, double red, double green, double blue) { 
     int width = src.getWidth(); 
     int height = src.getHeight(); 

     Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig()); 

     int A, R, G, B; 
     int pixel; 

     for(int x = 0; x < width; ++x) { 
      for(int y = 0; y < height; ++y) { 

       pixel = src.getPixel(x, y); 

       A = Color.alpha(pixel); 
       R = (int)(Color.red(pixel) * red); 
       G = (int)(Color.green(pixel) * green); 
       B = (int)(Color.blue(pixel) * blue); 

       bmOut.setPixel(x, y, Color.argb(A, R, G, B)); 
      } 
     } 


     return bmOut; 
    } 
} 

しかし、私は、画像からNIRチャンネルを抽出する方法を考え出すことができません。 NDIR(Normalized Difference Vegetation Index)インジケータを分析のために画像に適用する必要があるため、このNIRチャンネルを抽出するという私の目的があります。

また、このコードでは、複数のforループを実行することによってbrute-forceアプローチが使用されています。したがって、プログラムは非常に複雑になり、-O(width * height)になります。これらの別々のチャネルを計算するための効率的な方法は何でしょうか?画像のプロパティの

スクリーンショット:

Image

Camera

Advance photo

親切にこの問題で私を助けて。

+0

NIRチャネルなどはありません。 – Piglet

+0

NIRはマルチスペクトル画像のスペクトルバンドです。私はNDVIのためにこの式を適用する必要があります:(NIR - 赤)/(NIR +赤)。そこで私は、画像からNIRを抽出することもできると仮定しました。私は間違った道を歩いていますか? @ピググラム –

+0

このマルチスペクトル画像はどのような形式ですか?どうやってそれを作りますか? – Piglet

答えて

1

メーカーのウェブサイトから:このカメラがキャプチャデュアルバンドフィルタを有し

NDVIレッド+ NIR

は、RGBセンサの赤チャンネルに赤色光 を反射し に近赤外光を反射しましたRGBセンサーの青色チャンネルしたがって、この単一カメラを使用して NDVIインデックスを計算することができますが、結果のインデックス イメージのコントラストは、別個の赤およびNIR カメラモデルを使用する場合ほど正確ではありません。

+0

ありがとうございます。しかし、2つのループの代わりに、これに対してより良い方法を提案できますか? forループは、アプリケーションのパフォーマンスを低下させる膨大な時間のオーバーヘッドを与えます。 –

関連する問題