色深度と寸法が指定されていない画像があるとします。
これをn色パレットに圧縮するにはどのような方法がありますか?
私のgoogle-fuはこれでは弱いです。
2 に答える
最も簡単な方法は、画像を調べて、ピクセルの色を int にマッピングする辞書を作成することです。各ピクセルについて、その色がディクショナリにある場合は、カウントを増やします。そうでない場合は、カウント 1 で追加します。これにより、各色が画像に表示される回数が得られます。
次に、数で並べ替えると、画像で最も一般的な 256 色が見つかります。それらの色があなたのパレットを構成します。
次に、画像をもう一度繰り返します。各ピクセルについて、そのピクセルの色に最も近いパレットの色を見つけ、そのピクセルのインデックスをそのパレットのインデックスに設定します。
それは良い「最初の試み」ですが、多くの色を含む画像では、パレットを見つけるのにそれほどうまくいかないかもしれません. ディクショナリ フェーズでは、「十分に近い」色を組み合わせて、非常によく似た色が多数あってもスコアが低くならないようにすることができます。
より良い結果を得るには、ディザリング手法を検討する必要があります。
この問題は色の量子化と呼ばれます。たとえば、 pngquantを参照してください。
アルゴリズムを探している場合は、Median Cut、Octtree、K-Means、Linde–Buzo–Gray、NeuQuant を検索してください。通常の結果はペイウォールのクローキングによってスパムされるため、Google Scholar が理想的です。