VC++编程实现对曝光不足照片的修复
2010-06-15 20:39:54 来源:WEB开发网最后需要将变换后的结果保存到DIB中,这部分处理过程相对比较简单,只需根据计算出来的映射关系表按图索骥,就可把原始密集分布的灰度值映射到经过均衡化的新灰度级上,从而扩大了灰度级之间的距离,改善了视觉效果:
for (i = 0; i < lHeight; i ++)
{
for (j = 0; j < lWidth * 3; j ++)
{
//对R分量进行灰度映射(均衡化)
unsigned char R = *((unsigned char *)lpDIBBits + lWidth * 3 * i + j);
*((unsigned char *)lpDIBBits + lWidth * 3 * i + j) = nNs_R[R];
j++;
//对G分量进行灰度映射(均衡化)
unsigned char G = *((unsigned char *)lpDIBBits + lWidth * 3 * i + j);
*((unsigned char *)lpDIBBits + lWidth * 3 * i + j) = nNs_G[G];
j++;
//对B分量进行灰度映射(均衡化)
unsigned char B = *((unsigned char *)lpDIBBits + lWidth * 3 * i + j);
*((unsigned char *)lpDIBBits + lWidth * 3 * i + j) = nNs_B[B];
}
}
下图是经过上述方法处理而得到的修复图象,从修复后的照片可以清晰地看到条幅上的六个大字以及照片上的其他一些诸如印章、落款等细节。对修复后的照片进行灰度分布统计,可从右下的灰度分布图中看到原本密集分布在0 ~ 100 之间的象素灰度分布现在已被均匀扩展到40 ~ 255之间的区域,而且由于高亮度象素的分布密度相对较大,因此经过修复的照片图象整体显得较为明亮,也即对拍照时由于缺乏闪光灯而造成的暴光不足等缺陷做了成功的弥补。
结论
本文通过对曝光不足的原始照片采取灰度均衡化处理而使其在一定程度上得到了修复,使一些原本看不见的细节在经过修复处理后变的清晰可见。经笔者多次实验,本文所介绍的方法对于曝光不足的照片有很好的修复效果,同时对从事图像开发、数码相片处理软件的开发人员有很好的实用价值。本文给出的程序代码在Windows 98下由Microsoft Visual C++ 6.0编译通过。
更多精彩
赞助商链接