0

Java では、複数の色を含む画像を色空間 BufferedImage.TYPE_BYTE_BINARY の BufferedImage オブジェクトにロードできます。画像は白黒になります。私が疑問に思っているのは、黒/白への「色の変更」がどのように行われるかです。たとえば、現在のピクセルの色が白よりも黒に似ているかどうかを調べるだけで、各ピクセルは他のピクセルとは独立して変更されますか?どういうわけか考慮された隣接ピクセル?

ドキュメント 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.

これは、各ピクセルの色が隣接するピクセルの色とは独立して変更されることを意味すると思いますか、それともこの引用は何か他のことを意味しますか? 私は物事をイメージすることにあまり慣れていないので、それが正しいかどうか疑問に思っています。

4

1 に答える 1

0

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

注: タイプ BufferedImage.TYPE_BYTE_BINARY の BufferedImage には、アルファのない IndexColorModel があります。これは、不透明なバイトパックの 1、2、または 4 ビット イメージ、つまり、適切なカラー エントリのカラーマップを含む 2 色、4 色、および 16 色の​​イメージを表します。IndexColorModel を渡さずに BufferedImage を作成すると、{0, 0, 0} と {255, 255, 255} の 2 つのエントリを持つデフォルトの back-n-white カラーマップが作成されます。ただし、これは白黒に限定されません。デフォルトの sRGB ColorSpace から任意の 2 色を選択し、IndexColorModel を作成して BuffereImage コンストラクターに渡すことができます。IndexColorModel を使用して、4 色と 16 色の​​イメージを同じ方法で作成できます。

于 2012-05-06T18:31:53.743 に答える