0〜255の値を持つグレースケール画像の簡単なガンマ補正式を探しています。
私の画面のガンマが2.2だとしましょう(LCD画面なので、おそらくもっと複雑な手順で推定する必要がありますが、私の画面はうまく動作していると仮定しましょう)。
次の式のうち、正しいものはどれですか?
Corrected = 255 * (Image/255).^2.2
OR
Corrected = 255 * (Image/255).^(1/2.2)
(これらはMATLABコードであることになっていますが、MATLAB以外の人でも理解できることを願っています)
私はインターネットを見回してきましたが、両方の式が回っていることを発見しました。私は(2)が正しいと思うし、私の混乱は「ガンマ値」を実際のガンマ値の逆と呼ぶ傾向によるものですが、私は彼らが話していることを知っている人々によるフィードバックを本当に感謝します。 。
ガンマ補正は、画像の全体的な明るさを制御します。補正されていない画像は、白っぽく見えたり、暗すぎたりすることがあります。コンピューターのモニターに2.2
powerは、電圧応答曲線に対する強度として機能します。これは、特定のピクセルがx
に等しい強度を持つ必要があるというメッセージをモニターに送信すると、実際にはxに等しい強度を持つピクセルを表示することを意味します2.2モニターに送信される電圧の範囲は0
および1
、これは、表示される強度値が希望する値よりも小さくなることを意味します。このようなモニターのガンマは2.2
。
あなたの場合、
Corrected = 255 * (Image/255)^(1/2.2).
ガンマをエンコードするための式とガンマをデコードするための式の両方が使用されます。
ガンマエンコーディングは、イメージが整数の強度値として保存されるときにシャドウ値の品質を向上させるために使用されるため、ガンマエンコーディングを行うには、次の式を使用します。
encoded = ((original / 255) ^ (1 / gamma)) * 255
ガンマデコードは元の値を復元するために使用されるため、その式は次のとおりです。
original = ((encoded / 255) ^ gamma) * 255
モニターがガンマデコードを行う場合、最初の式を使用して画像データをエンコードします。