首页 > 代码库 > C++ 直方图匹配算法代码
C++ 直方图匹配算法代码
/*-------------------------------------------------------------------------*/// 函数名称: histeq() // 传入参数: // BYTE*dstData 要匹配的灰度图像内存空间 // double *srcArray 模版的直方图累积,并进行归一化,大小为256// int m_Width 匹配内存空间的宽度// int m_Height 匹配内存空间的高度// int m_pitch 匹配内存空间的每行所在内存大小/*-------------------------------------------------------------------------*/void histeq(BYTE*dstData,double *srcArray,int m_Width,int m_Height,int m_pitch){ double dstHist[256]; memset(dstHist,0,256 * sizeof(double)); int i,j; double dstArray[256]; memset(dstArray,0,256 * sizeof(double)); //统计直方图 for (i = 0;i < m_Height;i++) { for (j = 0;j < m_Width;j++) { dstHist[(int)dstData[i * m_pitch + j]]++; } } //计算直方图累积 double m_Bytes = m_Width * m_Height; dstArray[0] = dstHist[0]; for (i = 1;i < 256;i++) { dstArray[i] = dstArray[i - 1] + dstHist[i]; } //直方图累积归一化 for (i = 0;i < 256;i++) { dstArray[i] /= m_Bytes; } //直方图匹配 double m_diffA,m_diffB; int k = 0; BYTE mapPixel[256]; memset(mapPixel,0,256 * sizeof(BYTE)); for (i = 0;i < 256;i++) { m_diffB = 1; for (j = k; j < 256;j++) { m_diffA = abs(dstArray[i] - srcArray[j]); if (m_diffA - m_diffB < 1.0E-5) { m_diffB = m_diffA; k = j; } else { k = j - 1; break; } } if (k == 255) { for (int l = i;l < 256;l++) { mapPixel[l] = (BYTE) k; } break; } mapPixel[i] = (BYTE) k; } //目标图像查找索引表 for (i = 0;i < m_Height;i++) { for (j = 0;j < m_Width;j++) { dstData[i * m_pitch + j] = mapPixel[dstData[i * m_pitch + j]]; } }}
源地址:http://blog.csdn.net/hcx25909/article/details/7090921
C++ 直方图匹配算法代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。