0

私はBufferedImage画像の10x10のサンプルを保持するためにを使用しています。Colorこの画像を使用して、この画像を表すおおよその平均色(オブジェクトとして)を見つけたいと思います。現在、この機能を実装する方法について2つのアイデアがあります。

  1. 画像の拡大縮小されたインスタンスを1x1サイズの画像にし、新しく作成された画像の色を平均色として見つけます
  2. 2つのforループを使用します。最も内側は各ラインを平均化するために使用され、2番目のforループは各ラインをピクセルごとに平均化するために使用されます。

私は最初の解決策のアイデアが本当に好きですが、それがどれほど正確かはわかりません。2番目の解決策は、それらが来るのと同じくらい正確ですが、それは信じられないほど退屈なようです。また、このgetColorコマンドはこのような大規模なプロセッサを集中的に使用していると思います(私はこの平均を1秒間におよそ640〜1920回実行しています)。間違っている場合は修正してください。この方法はCPUに非常に負荷がかかるため、かなり効率的なアルゴリズムを使用したいと思います。

4

1 に答える 1

1

それはあなたが平均して何を意味するかによります。半分のピクセルが赤で半分のピクセルが青の場合、平均は紫になりますか?その場合は、すべての値を合計して、ピクセル数で割ってみることができると思います。

しかし、平均ではなく、支配的な色が必要だと思いますか?

その場合、1つの代替案は、色を「バケツ」に離散化し(たとえば、100の間隔で、極端な場合は3つだけ、1つは赤、1つは緑、もう1つは青)、ヒストグラムを作成することです。 (カウント付きの単純な配列)。次に、カウントが最も多いバケットを取得します。

アイデア1に注意してください。スケーリングはサンプリングによって行われることが多いことを忘れないでください。あなたは非常に小さな画像を持っているので、あなたはすでに多くの情報を失っています。さらにスケールダウンすると、おそらく数ピクセルをサンプリングするだけで、実際にはすべてを平均化することはできません。スケーリングプロセスで使用されているアルゴリズムを確認することをお勧めします。

于 2012-11-11T05:04:21.510 に答える