質問

Googleを突っ込んでいて、私が求めているようなものを見つけていません。それで、私は何を求めているのでしょうか?まあ2つのこと:

  • まず、アルゴリズム/擬似コード/ホワイトペーパーを探して、256 RGBタプルのr、g、bタプル、アレイの最適な色を決定します。

  • 第二に、私は特定の色相/飽和またはr、g、bチャネルの修正による8ビットパレット画像(上記のRGBパレットを使用)を再構築するためのアルゴリズム/擬似コード/ホワイトペーパーを探しています。また、カラー化のガンマとアーティファクトピクセルの修正を追加することができればいいでしょう。

誰もが私がそのようなものを見つけるかもしれない場所についてヒント/ポインター/ヒントを得ました(私はそれらが存在しなければならないことを知っています、さもなければいくつかのフォトショップの機能はそうではありません)

更新:これは、基本的なユークリッド距離RGBからパレットインデックスファインダーです。

uint_8 __stdcall GFXUTIL_GetNearestPaletteIndex(const uint_8* pPalette, size_t nSize, uint_8 nRed, uint_8 nGreen, uint_8 nBlue)
{
    if(pPalette == NULL)
        return 0;

    int nDistance = -1;
    size_t nIndex = 0, nFoundIndex = 0;
    while(nIndex < nSize)
    {
        int nDistRed = pPalette[0] - nRed;
        int nDistGreen = pPalette[1] - nGreen;
        int nDistBlue = pPalette[2] - nBlue;
        int nCurrentDistance = (nDistRed * nDistRed) + (nDistGreen * nDistGreen) + (nDistBlue * nDistBlue);
        if(nCurrentDistance < nDistance)
        {
            nFoundIndex = nIndex;
            nDistance = nCurrentDistance;
        }

        nIndex++;
        pPalette += sizeof(uint_32);
    }

    return nFoundIndex;
} 
役に立ちましたか?

解決

見る http://en.wikipedia.org/wiki/color_difference 人間の目の感度が考慮されるように、色間の距離を計算する方法について。

他のヒント

線形検索よりも速くしたい場合は、チェックアウトしてください VP-Tree またはKD-Tree。

知覚的に正確にしたい場合は、検索を行います ラボカラースペース.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top