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;
}
原圖:![](https://pic.w3help.cc/d61/d49c8b99b4aac34d19a39ae0fdc73.jpeg)
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時的輸入輸出...