光照归一化处理总结

时间:2021-03-30 06:16:05

此次在人脸识别项目的提高识别率的改进中,光照归一化处理这一步用了不少的时间,主要的问题是怎么实现光照的归一化处理的算法。网上提供了很多的方法,比如基于小波变换的人脸归一化,基于二次多项式模型的人脸归一化,基于形态学商图像的光照归一化,方法多种多样,关键是找到适合此项目的算法。

由于使用的是DCT变换求得人脸的特征向量,所以自己采用的是同态滤波算法,主要的实现过程百度百科上有讲解。

在实现的过程中遇到的主要问题是不同的位图深度之间的变换。在训练隐马尔科夫模型的时候,只能使用8位深度的单通道位图才行。最初的时候不了解这一点,使用32位深度的位图进行训练,这种方法训练的结果与以前的训练结果不兼容,在下面的函数处总是内存读取失败。

//计算各个状态下混高斯的均值、方差和混高斯的权重。
cvEstimateHMMStateParams( obs_info_array, num_img, hmm);

即使是重新加好友,偶尔也会在这个地方出现问题,并且在识别的时候有时候调用维特比算法无法得到结果,郁闷了很长时间都没找到解决方法。不过现在看来应该是位图深度的原因才导致提取DCT特征向量的时候出现了问题(必须使用8位深度的图像)。

将32位深度转换为8位的方法是:

IplImage* dst8=cvCreateImage(cvGetSize(dst32),IPL_DEPTH_8U,1);
cvCvtScale(dst32,dst8,255);

 这只是一种尝试,因为根据最后的识别率来说这种同态滤波的算法对光照归一化的问题解决不是很好,识别率并没有因此而有所提高,也许是DCT变换对这种处理不敏感吧。所以这可以作为其它图像处理程序的参考。