33

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 ツリーが最適です。

4

5 に答える 5

18

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

  • 正しい方法は、2 つの色の最大の差を計算することです。
    あらゆる種類の推定平均/標準差を含む式には、不連続の余地がありました。

  • RGBA カラーをいくつかの背景とブレンドせずに距離を計算する実用的な数式を見つけることができませんでした。

  • 考えられるすべての背景色を考慮する必要はありません。R/G/B チャネルごとに最大値と最小値を別々にブレンドするように簡略化できます。

    1. 背景としてチャネル= 0で両方の色のチャネルをブレンドし、二乗差を測定します
    2. 背景としてchannel =max を使用して両方の色のチャネルをブレンドし、二乗差を測定します
    3. 2つのうち高い方を取ります。

幸いなことに、事前に乗算されたアルファを使用する場合、「白」と「黒」のブレンドは簡単です。

事前に乗算されたアルファ色空間の完全な式は次のとおりです。

rgb *= a // colors must be premultiplied
max((r₁-r₂)², (r₁-r₂ - a₁+a₂)²) +
max((g₁-g₂)², (g₁-g₂ - a₁+a₂)²) +
max((b₁-b₂)², (b₁-b₂ - a₁+a₂)²)

SSE2 実装を含む C ソース

于 2012-01-09T23:57:31.050 に答える
1

私の考えは、考えられるすべての背景色を1回統合し、二乗誤差を平均化することです。

つまり、各コンポーネントについて計算します(ここでは例として赤チャネルを使用)

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で合計します。

于 2011-01-21T13:20:22.797 に答える
1

まず第一に、非常に興味深い問題です :)
完全な解決策はありませんが (少なくともまだ)、考慮すべき 2 つの明らかな極端なケースがあります:問題が RGB 空間に類似している
場合問題がオンのみの 場合alpha 1-dim space したがって、それを満たす式(これはあなたが述べたものと非常に似ています)は次のとおりです。Δa==0
Δa==1

(Δr² + Δg² + Δb²) × (1-(1-Δa)²) + Δa²(Δr² + Δg² + Δb²) × (1-Δa²) + Δa²

いずれにせよ、それはおそらく次のようなものでしょう(Δr² + Δg² + Δb²) × f(Δa) + Δa²

私があなたなら、さまざまな RGBA ペアとさまざまな背景色でシミュレートして、最適な機能を見つけようとしf(Δa)ます。あまり数学的ではありませんが、十分に近い答えが得られます

于 2011-01-21T13:24:21.597 に答える
0

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

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

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

于 2011-01-21T02:09:02.417 に答える