4

そこで、画像に適用するための「単純な」減色について検討し始めています。私は最終日、これがどのように機能するかを調査し、ここで実験するのに適切なアルゴリズムと思われるものを見つけることができました:メディアンカットアルゴリズム

ここでの出力は、n色のパレットです。このアルゴリズムが実際に機能することをまだ確認していませんが、機能すると思います。私がやりたいのは、その出力を取得して、パレットが生成された画像に適用することです。

色圧縮形式と画像に関する深い知識に精通しているとは言えませんが、インデックス付きパレットが付属する画像形式から始めなくても、パレットを適用するにはどうすればよいのでしょうか。 (つまりGIF)。

ピクセルごとに、現在のピクセルの色とパレット内の各色の差を計算し、そのピクセルを最も差の少ないパレットの色に置き換えることを考えています。これはアプローチするための実行可能な方法でしょうか?

注-私はさまざまなライブラリ(ImageMagick)を調べましたが、これらは少しやり過ぎのようです。私が画像操作で行うことのほとんどは、カラーパレットを減らすことです。これほど複雑なことはありません。そのため、このアルゴリズムを実装することが私のニーズにとって最も簡単なアプローチになると考えています。

4

2 に答える 2

3

最速の方法は、色のルックアップにoctツリーを使用することです。

The idea is you add all the palette color indexes to the oct tree, then ask the root node for the nearest color. When asked for the nearest color, each node (which has access to the palette) returns its own color index if it's at the deepest level or asks the corresponding child (to the requested color) for its nearest color index. If there is no corresponding child, it asks all of its children for the nearest color index and returns the one whose color has the smallest distance.

Basically, the oct tree will greatly minimize the number of distance comparisons that need to be made. This is sped up by precalculating all distances.

Here's my implementation... http://www.codeproject.com/Tips/1046574/OctTree-Based-Nearest-Color-Search

于 2015-11-07T03:37:40.500 に答える
1

私はそれが実行可能な方法だと思います。計算する差は、ここに示すようにユークリッドの差である必要があり ます。ただし、少し最適化することができます。毎回新しい差を計算する必要はありません。たとえば、すでに計算している場合は、適切な色を直接使用するためにルックアップテーブルにデータを入力できます。

于 2012-04-30T11:26:16.637 に答える