3

(R、G、B)トリプレットがあり、各色は0.0から1.0の間です。係数F(0.0は元の色を意味し、1.0は白を意味します)が与えられた場合、色の「透かし入り」バージョンである新しいトリプレットを計算したいと思います。

次の式(擬似コード)を使用します。

for each c in R, G, B:
    new_c ← c + F × (1 - c)

これは大丈夫に見えるものを生成しますが、これは色の色相に偏差をもたらすことを理解しています(変換の前後でHSVに相当するものをチェックします)、これが予想されるかどうかはわかりません。

色の「透かし入り」バージョンを計算するための「標準」(引用符付きまたはなし)アルゴリズムはありますか?はいの場合、それはどれですか?そうでない場合、同じ効果をもたらす他のアルゴリズムを教えてください。

4

2 に答える 2

3

実際、これは正しい色相を与えるはずですが、算術丸め誤差のわずかな変動はありません。

これは確かに合理的で、透かし効果を達成するための簡単な方法です。私は他の「標準的な」ものを知りません、あなたがそれをすることができるいくつかの方法があります。

代替案は次のとおりです。
白とブレンドしますが、たとえばFで非線形にnew_c = c + sqrt(F)*(1-c)実行するか、他の非線形関数を使用できます。透かしが多かれ少なかれ「フラット」に見えるのに役立つ場合があります。

次のようにすることで、より効率的に行うことができます(Fは範囲0..INFを取ります)。

new_c = 1 - (1-c)/pow(2, F)

実際のピクセル値(0..255)の場合、これは次のように変換されます。

new_c = 255 - (255-c)>>F

これは整数演算でかなり高速であるだけでなく、32b整数で並列に実行できる場合があります。

于 2010-10-26T14:33:26.537 に答える
0

なぜだけではないのですか?

new_c = F*c

最初に透かしを入れたピクセルを調べて、それを暗くするか明るくするかを判断する必要があると思います。

より軽い場合、式はnew_c = 1-F *(c-1)になります。

于 2010-10-26T14:33:01.743 に答える