2012-05-06 7 views
0

Javaでは、色空間BufferedImage.TYPE_BYTE_BINARYを持つBufferedImageオブジェクトに複数の色を含む画像を読み込むことができます。画像は黒/白です。私が疑問に思っているのは、黒/白への「変色」がどのように行われるかです。各ピクセルは他のピクセルから独立して変更されていますか?現在のピクセルの色が白よりも黒に似ているか、または近隣のピクセルが何らかの形で考慮されているかどうかを調べるだけでよいのでしょうか?BufferedImage.TYPE_BYTE_BINARYへの変換はどのように機能しますか?

状態のドキュメントBufferedImage.TYPE_BYTE_BINARY:

When color data is stored in an image of this type, the closest color in 
the colormap is determined by the IndexColorModel and the resulting index 
is stored. 

が、私はこれを前提とし、各画素の色がその隣接する画素の色から独立して変更されたか、この引用は、他の何かを意味していることを意味しますか?私はイメージングの事柄にあまり慣れていないので、私はそれが正しいかどうか疑問に思います。

+0

あなたの解釈は正しいですか?各ピクセルは個別に処理されます。 –

+0

確認していただきありがとうございます:-) –

答えて

0

スケーリングがない場合、変換は1対1である必要があります。カラーから白黒に変換する場合、これはGray = 0.299×Red + 0.587×Green + 0.114×Blueのようなピクセルカラーのグレースケール値を計算し、その結果に128という閾値を適用することによって行うことができます。 128より大きい場合は白にします。それ以外の場合は黒にします。カラーマップの最初のエントリが黒で、2番目のエントリが白であるとすると、グレースケール値が128より大きいピクセルにはエントリインデックス1が与えられ、他のピクセルにはインデックス0が与えられます。

注型BufferedImage.TYPE_BYTE_BINARYの A BufferedImageのアルファ無しIndexColorModelのを有します。これは不透明なバイトでパックされた1,2、または4ビット画像、すなわち適切なカラーエントリのカラーマップを持つ2色、4色、および16色の画像を表します。 IndexColorModelを渡さずにBufferedImageを構築すると、2つのエントリ{0、0、0}と{255,255,255}を持つデフォルトのバックN白のカラーマップが作成されます。しかし、これは白黒に限らず、デフォルトのsRGB ColorSpaceから任意の2つの色を選択して、IndexColorModelを作成してBuffereImageコンストラクタに渡すことができます。 IndexColorModelを使用して同じ方法で4色と16色のイメージを作成できます。

関連する問題