影象處理-基本演算法之對數變換
阿新 • • 發佈:2019-01-23
對數變換實現了影象灰度擴充套件和壓縮的功能。它擴充套件低灰度值而壓縮高灰度值,讓影象的灰度分佈更加符合人的視覺特徵。
程式碼如下:
[cpp] view plaincopyprint?- /******************************************************************************
- * 作用: 對數變換函式
- * 引數: pDst 輸出影象的畫素陣列
- * 引數: pSrc 原始影象的畫素陣列
- * 引數: nWidth 原始影象寬度
- * 引數: nHeight 原始影象高度
- * 引數: a 控制引數,表示曲線的上下偏移量
- * 引數: b 控制引數,表示曲線的彎曲程度
- * 備註: 此函式對於彩色圖同樣適用
- ******************************************************************************/
- int LogTrans(BYTE* pDst, BYTE* pSrc, int nWidth, int nHeight, double a, double b)
- {
- if (!pSrc || !pDst)
- {
- return EXIT_FAILURE;
- }
- // 對映表,用於256種灰度變換後的值
- BYTE map[256];
- // 儲存運算後的臨時值
- double dTemp;
- int i, j;
- for (i = 0; i < 256; i++)
- {
- // 計算當前畫素變換後的值
- dTemp = log((double)i + 1.0) / b + a;
- // 如果超界則修改其值
- if (dTemp < 0)
- dTemp = 0.0;
- elseif (dTemp > 255)
- dTemp = 255;
- // 四捨五入
- map[i] = int
- }
- for (i = 0; i < nWidth * nHeight; i++)
- {
- for (j = 0; j < 4; j++)
- pDst[i*4+j] = map[ pSrc[i*4+j] ];
- }
- return EXIT_SUCCESS;
- }