Unit 2. Histogram-based影像增強

1.     使用直方圖拓寬(histogram Stretching)影像對比增強

如下圖將kaoshiung512x512.raw的灰階分布拉寬至[0,255]

  

 

2.使用Histogram Equalization(HE)增強影像對比

演算法:

Step 1. 計算影像灰階統計直方圖(histogram)Pr

Step 2. 從灰階統計直方圖計算累增直方圖(cumulative histogram) Sk

Step 3. 從累增直方圖計算等化分布直方圖(equalized histogram)f(x),使灰階頻率平均分布在[X0, XL-1]:

 f(x)=X0+(XL-1-X0)Sk

X0是期望的最小灰階值(例如0)XL-1是期望的最大灰階值(例如255)

 

Step 4. 以此等化分布直方圖f(x)當作映射函數,重新指定影像每一pixel的灰階值。

程式範例:

void HistogramEqualization(uc2D &ima0, uc2D &ima1)

{

   long ImaSize=ima0.nr*ima0.nc;

   int histo[256];  //histogram

   float accpbhisto[256]; // cumulative istogram

   int table[256];// Look-up table for mapping fuction of histogram equalization

// Initialize

   for(int i=0;i<256;i++)

   {

     histo[i]=0;

     table[i]=0;

     accpbhisto[i]=0.0;

   }

// Compute histogram

   for(int i=0;i<ima0.nr;i++)for(int j=0;j<ima0.nc;j++)histo[ima0.m[i][j]]++;

 

// Compute cumulative histogram

   accpbhisto[0]=float(histo[0])/float(ImaSize);

   for(int i=1;i<256;i++)

   {

      accpbhisto[i]=accpbhisto[i-1]+float(histo[i])/float(ImaSize);

   }

// compute mapping function

   for(int i=0;i<256;i++)table[i]=char(accpbhisto[i]*256.);

// Enhancement

   for(int i=0;i<ima0.nr;i++)for(int j=0;j<ima0.nc;j++)  ima1.m[i][j]=table[ima0.m[i][j]];

}

請寫一個主程式分別對finger300x300ant(gray)600x400kaoshiung512x512進行HE的影像增強。

3. Local HE影像增強方法

每一個pixel與鄰近pixel的灰階值比較,決定其排序。再依此一排序的正比關係指定一個新的灰階值給這個pixelLocal HE影像增強方法是根據區域性(而非整張影像)的資訊來增強對比。

請寫一個主程式,嘗試使用不同大小的區域視窗(contextual region),分別對finger300x300ant(gray)600x400kaoshiung512x512進行Local HE的影像增強,

 

4. 參數可調整的HE影像增強方法AHE(Adaptive Histogram Equalization)

k1,k2是兩個介於[0,1] 的可調參數。至於計算影像平均值(mean)和標準差(standard deviation)的範例程式如下:

float mean_stddev (Image& im, float &mean, float &std_dev)

{

    int i, j;

    long N, sum=0;

    N = (long)(im.nr) * (long)(im.nc);

    for (i=0; i<im.nr; i++) for (j=0; j<im.nc; j++)

        sum += im.m[i][j];

    mean=(float)sum/(float)(N); //Calculating the mean

    float sumdev=0.0;

    for (i=0; i<im.nr; i++) for (j=0; j<im.nc; j++)

    {

       d =  im.m[i][j] - mean;

       sumdev = sumdev+ d*d;

    }

    std_dev = sqrt(sumdev/N);//Calculating the standard deviance

}

Adaptive Histogram Equalization也是基於區塊影像資訊的對比增強方法。請寫一個程式測試不同的k1,k2參數組合對kaoshiung512x512影像進行AHE影像增強的效果:

(1)   採用Try-and-Error方法找到較好的一組(k1,k2)

(2)   (option,可不做)採用GAPSO等最佳化方法找到一組最佳的(k1,k2),可考慮用影像中Edge的強度和作為評估函數。