1. 程式人生 > >影象處理-基本演算法之對數變換

影象處理-基本演算法之對數變換

對數變換實現了影象灰度擴充套件和壓縮的功能。它擴充套件低灰度值而壓縮高灰度值,讓影象的灰度分佈更加符合人的視覺特徵。

    程式碼如下:

[cpp] view plaincopyprint?
  1. /******************************************************************************
  2. *   作用:     對數變換函式
  3. *   引數: pDst     輸出影象的畫素陣列
  4. *   引數: pSrc     原始影象的畫素陣列
  5. *   引數: nWidth   原始影象寬度
  6. *   引數: nHeight  原始影象高度
  7. *   引數: a          控制引數,表示曲線的上下偏移量
  8. *   引數: b          控制引數,表示曲線的彎曲程度
  9. *   備註: 此函式對於彩色圖同樣適用
  10. ******************************************************************************/
  11. int LogTrans(BYTE* pDst, BYTE* pSrc, int nWidth, int nHeight, double a, double b) 
  12.     if (!pSrc || !pDst) 
  13.     { 
  14.         return EXIT_FAILURE; 
  15.     } 
  16.     // 對映表,用於256種灰度變換後的值
  17.     BYTE map[256]; 
  18.     // 儲存運算後的臨時值
  19.     double dTemp; 
  20.     int i, j; 
  21.     for (i = 0; i < 256; i++) 
  22.     { 
  23.         // 計算當前畫素變換後的值
  24.         dTemp = log((double)i + 1.0) / b + a; 
  25.         // 如果超界則修改其值
  26.         if (dTemp < 0) 
  27.             dTemp = 0.0; 
  28.         elseif (dTemp > 255) 
  29.             dTemp = 255; 
  30.         // 四捨五入
  31.         map[i] = int
    (dTemp + 0.5); 
  32.     } 
  33.     for (i = 0; i < nWidth * nHeight; i++) 
  34.     {    
  35.         for (j = 0; j < 4; j++) 
  36.             pDst[i*4+j] = map[ pSrc[i*4+j] ]; 
  37.     } 
  38.     return EXIT_SUCCESS;