1

私は単純な量子化関数を持っています

public static int quantize(int oldpixel) {

    int r = (oldpixel >> 16) & 0xff;
    int g = (oldpixel >> 8) & 0xff;
    int b = (oldpixel >> 0) & 0xff;

    int color = 0xff << 24 | (((int) ((r) / 32) * 32) & 0xff) << 16 | 
            (((int) ((g) / 32) * 32) & 0xff) << 8 | 
            (((int) ((b) / 32) * 32)& 0xff) << 0;
    return color;
}

それが行うことは、色をより詳細な色に減らしてから拡張することです。これにより、人為的にパレットが制限され、ディザフィルターに使用されます。関数を介した画像はこれを生成します

In: 量子化されていないヒュー ホイール Out: 量子化されたヒュー ホイール

結果として、これはほぼ完璧です。白が灰色に縮小されていることを除いて、原因はアルゴリズムで分割された色のフローリングであることを理解していますが、これを修正する方法がわかりません。提案をいただければ幸いです

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

0

各コンポーネントを 32 で除算すると、0 から 7 までの整数が得られます。これを 0 から 255 の範囲に戻して、0 が 0 で 7 が 255 になるようにマップしようとしています。

これを行うには、255/7 を掛けます。これはたまたま約 36.428 です。

のようなものを使用できます(int)((r / 32) * (255.0 / 7.0))が、Java ではキャストが醜いです。それを改善するには、それを関数でラップして、quantizeChannel(r)、 、quantizeChannel(g)およびquantizeChannel(b). または、順序を入れ替えて整数演算を使用することもできます: r / 32 * 255 / 7.

于 2016-03-04T08:36:11.113 に答える