图像处理-基本算法之灰度均衡
灰度均衡就是让分散的灰度值使其均匀化,使尖锐的图像变得柔和。
代码如下:
- /******************************************************************************
- * 作用: 灰度均衡函数
- * 参数: pDst 输出图像的像素数组
- * 参数: pSrc 原始图像的像素数组
- * 参数: nWidth 原始图像宽度
- * 参数: nHeight 原始图像高度
- ******************************************************************************/
- int GrayEqualize(BYTE* pDst,BYTE* pSrc, int nWidth,int nHeight)
- {
- if (!pSrc || !pDst)
- {
- return EXIT_FAILURE;
- }
- // 灰度映射表
- BYTE map[256];
- long lCounts[256];
- memset(lCounts, 0, sizeof(long) * 256);
- int i;
- // 计算各灰度值个数
- for (i = 0; i < nWidth * nHeight; i++)
- {
- int x = pSrc[i * 4];
- lCounts[x]++;
- }
- // 保存运算中的临时值
- long lTemp;
- for (i = 0; i < 256; i++)
- {
- lTemp = 0;
- for (int j = 0; j <= i; j++)
- lTemp += lCounts[j];
- map[i] = (BYTE)(lTemp * 255.0f / nWidth / nHeight);
- }
- // 变换后的值直接在映射表中查找
- for (i = 0; i < nWidth * nHeight; i++)
- {
- int x = pSrc[i * 4];
- pDst[i*4] = pDst[i*4+1] = pDst[i*4+2] = map[x];
- pDst[i*4+3] = 255;
- }
- return EXIT_SUCCESS;
- }