2016-09-12 4 views
1

私はインデックス画像を持っており、bufferedImageにRGBまたはBGR色空間があるかどうかを確認しようとしています。Java:BufferedImageがBGRかRGBかを確認してください

ColorModel colorModel = bufferedImage.getColorModel(); 
if(colorModel instanceof IndexColorModel) { 
    // check if the color space for the buffered image is BGR or RGB 
} 

私は、残念ながら、bufferedImage.getType()を使用するgetType()メソッドの戻りTYPE_BYTE_INDEXEDを試してみました。この種のbufferedImageの色空間を確認するにはどうすればよいですか?

答えて

1

残念ながら、RGBとBGRの色空間チャネルを未知のソースから区別する方法はありません。これはユーザーが入力として提供する必要がある属性です。画像構造は(画像にアルファ層が含まれるかどうかに依存して)3〜4層で、[0-255]の範囲の整数値を持ち、これらのピクセル値から色空間を決定するのは難しいでしょう。私はこの問題を解決できるアルゴリズムがあるかどうかはわかりませんが、すべての場合にエラー率があります(画像の複雑さによって異なります)。私の場合、ユーザーに画像の性質についての決定をさせることは安全です。

0

私はわからないんだけど、APIドキュメントから判断: (http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#TYPE_BYTE_INDEXED

実際の色にあなたのイメージからインデックスをマップIndexColorModelのは、赤、取得するためのメソッドをたくさん持っている、緑、または青の配列としてint(http://docs.oracle.com/javase/7/docs/api/java/awt/image/IndexColorModel.html) あなたはそれらを使用することができます。

それは「RGB」または「BGR」は存在しない可能性があることを意味し、あなたのバッファリングされたイメージのどのインデックスが、(https://en.wikipedia.org/wiki/Indexed_color)インデックスカラーモデルによって定義されている

ここだけの推測が、それができればヘルプ。

+0

ありがとうございますAsoub、Indexed Imageは、パレットの画像に関する有用な情報をインデックス付きパレットに保存しています。画像番号の色(4,16、または256)に関する限定情報が含まれています。 Java APIを使用してソースイメージを作成します(例:colorModel.getRed(dataElements)、イメージの色空間はBGRです)イメージは赤色を取得する代わりに青色を返します。 ;) –

+0

研究者がこの問題を解決するアルゴリズムについて考える必要があるかどうかはわかりません。決定するのが難しく、自分のシステムをトレーニングするために多くの作業が必要になります。または、ヒストグラムを作成し、BGRとRGBカラースペースの性質を調べる。 –

+0

@AhmadどこからbufferedImageを取得しますか?カスタムjavaのようなプログラムの別の部分からロードされている場合は、IndexedBufferの作成方法がわからない(あなたの言ったように...)。あなたはどこからそれを手に入れますか? getRed(.. [])メソッドを試して、青色配列を取得しましたか? – Asoub

関連する問題