void BMParse::equalizeOp(HDC inHdc,int offsetX,int offsetY) { //0.Inner value int arrHists[256]; float pArr[256]; int i,j; long totalHistVal; //0.Valuable declaration unsigned long outputPixel; int tmpTableVal; //1.cal each grey value's fequence for(i=0;i<256;i++) arrHists[i]=0; for(j=0;j<MBMFILEINFO.BMHEIGHT;J++) for(i=0;i<MBMFILEINFO.BMWIDTH;I++) { arrHists[bmpBWMatrix[j][i]]++; } //2.cal total hist value totalHistVal=0; for(i=0;i<256;i++) totalHistVal+=arrHists[i]; //3.cal pi pArr[0]=0; for(i=1;i<256;i++) pArr[i]=pArr[i-1]+(float)arrHists[i]/(float)totalHistVal; //4.show out adjusted picture: for(i=0;i<MBMFILEINFO.BMHEIGHT;I++) for(j=0;j<MBMFILEINFO.BMWIDTH;J++) { tmpTableVal=255*pArr[bmpBWMatrix[i][j]]; //make to windows color format outputPixel=((unsigned long)paletteArr[tmpTableVal].b)*65536+((unsigned long)paletteArr[tmpTableVal].g)*256+(unsigned long)paletteArr[tmpTableVal].r; //output pixel SetPixel(inHdc,j+offsetX,i+offsetY,outputPixel); } }
根据色彩学方面的研究结果,将灰度图像对应到red , green , blue三个通道上,最后将三个通道的颜色值合成为需要显示的RGB颜色值即可。
灰度值与三个通道的映射关系如图3、图4、图5所示:
图3:灰度与红色通道映射关系
图4:灰度与绿色通道映射关系
图5:灰度与蓝色通道映射关系
伪彩色处理的算法实现:
void BMParse::changeGreyToColorMix(HDC inHdc,int offsetX,int offsetY) { //0.Inner Value declaration unsigned long outputPixel; int tmpTableVal; int i,j; //1.Core part of false color change