質問

RGBAカラースペースの2つの色間で類似性を計算する方法は? (もちろん背景色が不明なところ)

RGBAの画像をRGBA色のパレットに再マップする必要があります。 一番 画像の各ピクセルのパレットエントリ*。

RGBカラー空間では、最も類似した色が最も小さなユークリッド距離のある色であると想定できます。ただし、このアプローチはRGBAでは機能しません。 rgba(0,0,0,0)rgba(0,0,0,50%) より小さい rgba(100%,100%,100%,1%), 、しかし、後者ははるかに良く見えます。

私は事前に熟成したRGBAカラースペースを使用しています:

r = r×a
g = g×a
b = b×a

そして、私はこの式を試しました(編集: より良い式については、以下の答えを参照してください):

Δr² + Δg² + Δb² + 3 × Δa²

しかし、そうではありません 見る 最適 - 半透明な勾配を持つ画像では、不連続性/鋭いエッジを引き起こす間違った色を見つけます。不透明な色とアルファの間の線形比率は魚っぽいようです。

最適な式は何ですか?


*)この質問を簡単にするために、エラー拡散、ガンマ、精神病の色空間を無視しています。


わずかに関連している:この非自身のRGBAスペースで最も近い色を見つけたい場合、 VP-Trees 最高です。

役に立ちましたか?

解決

最後に、私はそれを見つけました!徹底的なテストと実験の後、私の結論は次のとおりです。

  • 正しい方法は、計算することです 最大 2つの色の違いの可能性。
    あらゆる種類の推定平均/典型的な違いを持つ式には、不連続性の余地がありました。

  • RGBAの色をいくつかの背景とブレンドせずに距離を計算する作業式を見つけることができませんでした。

  • 考えられるすべての背景色を考慮に入れる必要はありません。 R/G/Bチャネルのそれぞれについて、最大値と最小値を個別にブレンドするまで簡素化できます。

    1. 両方の色でチャネルをブレンドします チャネル= 0背景として、四角の違いを測定します
    2. 両方の色でチャネルをブレンドします チャネル=最大背景として、四角の違いを測定します
    3. 2つのうちより上位になります。

幸いなことに、「白」と「黒」と溶け込むことは、事前に充実したアルファを使用すると些細なことです(r = r×a).

完全な式は次のとおりです。

max((r₁-r₂)², (r₁-r₂ - a₁+a₂)²) +
max((g₁-g₂)², (g₁-g₂ - a₁+a₂)²) +
max((b₁-b₂)², (b₁-b₂ - a₁+a₂)²)

SSSE2実装を含むcソース.

他のヒント

いくつかの原則:

  1. 2つの色が同じアルファを持っている場合、rgbadistance = rgbdistance *(alpha / 255)。両方のアルファが255の場合、RGBカラー距離アルゴリズムと互換性があります。
  2. 非常に低いアルファのすべての色は似ています。
  3. 同じRGBの2色の間のRGBADISTANCEは、デルタアルファに直線的に依存しています。
double DistanceSquared(Color a, Color b)
{
    int deltaR = a.R - b.R;
    int deltaG = a.G - b.G;
    int deltaB = a.B - b.B;
    int deltaAlpha = a.A - B.A;
    double rgbDistanceSquared = (deltaR * deltaR + deltaG * deltaG + deltaB * deltaB) / 3;
    return deltaAlpha * deltaAlpha / 2.0 + rgbDistanceSquared * a.A * b.A / (255 * 255);
}

私のアイデアは、可能なすべての背景色に一度統合され、平均エラーを平均化しています。

IE各コンポーネントの計算(ここの例として赤いチャネルを使用)

0から1((r1*a1+rb*(1-a1)) - (r2*a2+rb*(1-a2))^2*drb

正しく評価した場合は次のとおりです。

dA=a1-a2
dRA=r1*a1-r2*a2
errorR=dRA^2+dA*dRA+dA^2/3

そして、これらをR、G、およびBに合わせて合計します

まず第一に、非常に興味深い問題:)
私は完全な解決策を持っていません(少なくともまだまだありません)が、私たちが考慮すべき2つの明らかな極端なケースがあります:
いつ Δa==0 問題はRGBスペースと似ています
いつ Δa==1 問題は、Alpha 1-Dimスペースのみです
したがって、それを満たすだろう式(これはあなたが述べたものと非常に似ています)は次のとおりです。
(Δr² + Δg² + Δb²) × (1-(1-Δa)²) + Δa² また (Δr² + Δg² + Δb²) × (1-Δa²) + Δa²

いずれにせよ、それはおそらく (Δr² + Δg² + Δb²) × f(Δa) + Δa²

もし私があなただったら、私はそれをさまざまなRGBAペアとさまざまな背景色でシミュレートしようとします。 f(Δa) 働き。あまり数学的ではありませんが、あなたに十分な答えを与えます

私はそれをしたことがありませんが、理論と実践は、画像のRGB値とパレットをに変換すると言います 輝度 - クロミナンス 最高の試合を見つけるのに役立ちます。透明性は「見栄えの良い」部分とはほとんど関係がないので、アルファチャンネルを放っておきます。

このXmassは、元の画像の断片を画像のコレクションに一致させるオープンソースソフトウェアを使用して、プレゼント用にいくつかのフォトモサイクを作成しました。それはあなたが解決しようとしているものよりも難しい問題のように思えます。それらのプログラムの1つはそうでした メタピクセル.

最後に、最良のオプションは、既存のライブラリを使用して、パレットを制御できるPNGなどのフォーマットに画像を変換することです。

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