Gamma校正原理及實現

2021-08-11 05:37:18 字數 2187 閱讀 3730

gamma校正原理:

假設影象中有乙個畫素,值是 200 ,那麼對這個畫素進行校正必須執行如下步驟: 

1. 歸一化 :將畫素值轉換為  0 ~ 1  之間的實數。 演算法如下 : ( i + 0. 5)/256  這裡包含 1 個除法和 1 個加法操作。對於畫素  a  而言  , 其對應的歸一化值為  0. 783203 。 

2. 預補償 :根據公式  , 求出畫素歸一化後的 資料以  1 /gamma  為指數的對應值。這一步包含乙個 求指數運算。若  gamma  值為  2. 2 ,  則  1 /gamma  為  0. 454545 , 對歸一化後的  a  值進行預補償的結果就 是  0. 783203 ^0. 454545 = 0. 894872 。 

3. 反歸一化 :將經過預補償的實數值反變換為  0  ~  255  之間的整數值。具體演算法為 : f*256 - 0. 5  此步驟包含乙個乘法和乙個減法運算。續前 例  , 將  a  的預補償結果  0. 894872  代入上式  , 得到  a  預補償後對應的畫素值為  228 , 這個  228  就是最後送 入顯示器的資料。

如上所述如果直接按公式程式設計的話,假設影象的解析度為 800*600 ,對它進行 gamma 校正,需要執行 48 萬個浮點數乘法、除法和指數運算。效率太低,根本達不到實時的效果。 

針對上述情況,提出了一種快速演算法,如果能夠確知影象的畫素取值範圍  , 例如  , 0 ~ 255 之間的整數  , 則影象中任何乙個畫素值只能 是  0  到  255  這  256  個整數中的某乙個 ; 在  gamma 值 已知的情況下  ,0 ~ 255  之間的任一整數  , 經過「歸一 化、預補償、反歸一化」操作後 , 所對應的結果是唯一的  , 並且也落在  0 ~ 255  這個範圍內。

如前例  , 已知  gamma  值為  2. 2 , 畫素  a  的原始值是  200 , 就可求得 經  gamma  校正後  a  對應的預補償值為  228 。基於上述原理  , 我們只需為  0 ~ 255  之間的每個整數執行一次預補償操作  , 將其對應的預補償值存入乙個預先建立的  gamma  校正查詢表 (lut:look up table) , 就可以使用該錶對任何畫素值在  0 ~ 255  之 間的影象進行  gamma  校正。

gamma校正實現:

#include #include #include #include #includeusing namespace cv;

mat gammatransform(mat &srcimage, float kfactor)

mat resultimage = srcimage.clone();

if (srcimage.channels() == 1) }

else }

return resultimage;

}int main()

//取兩種不同的gamma值

float gamma1 = 3.33f;

float gamma2 = 0.33f;

float kfactor1 = 1 / gamma1;

float kfactor2 = 1 / gamma2;

mat result1 = gammatransform(srcimage, kfactor1);

mat result2 = gammatransform(srcimage, kfactor2);

imshow("srcimage", srcimage);

imshow("res1", result1);

imshow("res2", result2);

waitkey(0);

return 0;

}

原圖:

gamma=3.33的效果圖:

gamma=0.33的效果圖:

gamma校正 OpenCV Gamma校正

gamma校正是一種非常重要的線性變換。對輸入影象的灰度值進行指數變換,進而校正亮度偏差,通常應用於擴充套件暗調的細節。gamma校正可使得影象看起來更符合人眼的特性。當gamma校正的值大於1時,影象的高光部分被壓縮而暗調部分被擴充套件 當gamma校正的值小於1時,影象的高光部分被壓縮而暗調部分...

Gamma校正及其OpenCV實現

一 什麼是gamma校正?gamma校正是對輸入影象灰度值進行的非線性操作,使輸出影象灰度值與輸入影象灰度值呈指數關係 這個指數即為gamma.經過gamma校正後的輸入和輸出影象灰度值關係如圖1所示 橫座標是輸入灰度值,縱座標是輸出灰度值,藍色曲線是gamma值小於1時的輸入輸出關係,紅色曲線是g...

Gamma校正及其OpenCV實現

參考 1 2 一 什麼是gamma校正?gamma校正是對輸入影象灰度值進行的非線性操作,使輸出影象灰度值與輸入影象灰度值呈指數關係 這個指數即為gamma.經過gamma校正後的輸入和輸出影象灰度值關係如圖1所看到的 橫座標是輸入灰度值,縱座標是輸出灰度值,藍色曲線是gamma值小於1時的輸入輸出...