灰階變換法:
一般成像系統隻具有一定的亮度範圍,亮度的最大值與最小值之比稱為對比度。由于形成圖像的系統亮度有限,常出現對比度不足的問題,使人眼觀看圖像時視覺效果很差,通過灰階變換法可以大大改善人的視覺效果。灰階變換法又可分為三種:線性分段性及分線性變換。
(1)線性變換
假定原圖像f(x,y)的灰階範圍為[a,b],希望變換後圖像g(x,y)的灰階範圍擴充至[c,d],線性變換表示式為:
g(x,y) = [(d - c) / (b - a)]f(x,y) + c
此關系式可用下圖表示。若圖像中大部分象素的灰階級分布在區間[a,b],很小部分的灰階級超出了此區間,為改善增強的效果,可令:
g(x , y) = c 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = d b < f(x , y) < Fmax
(2)分段線性變換
為了突出感興趣的目标或灰階區間,相對抑制那些不感興趣的目标或灰階區間,常采用分段線性變換法。常用的是三段線性變換法,其數學表達式為:
g(x , y) = (c / a)f(x , y) 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = [(Gmax - d) / (Fmax - b)][f(x,y) - b + d] b < f(x , y) < Fmax
上式對灰階區間[a,b]進行了線性變換,而灰階區間[0,a] [b , Fmax]受到了壓縮。通過細心調整折線拐點的位置及控制分段直線的斜率,可對任一灰階區間進行擴充或壓縮。這種變換适用于在黑色或白色附近有噪聲幹擾的情況。例如照片中的劃痕,由于變換後0~a以及b~Fmax之間的灰階受到壓縮,因而使噪聲幹擾得到減弱。
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
cur = ratio * cur + intercept;//線性變換
data[i * img_width + j] = cur;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
}