天天看點

圖像變換——分段線性變換

灰階變換法:

        一般成像系統隻具有一定的亮度範圍,亮度的最大值與最小值之比稱為對比度。由于形成圖像的系統亮度有限,常出現對比度不足的問題,使人眼觀看圖像時視覺效果很差,通過灰階變換法可以大大改善人的視覺效果。灰階變換法又可分為三種:線性分段性及分線性變換。

(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;

    }

    }