我正在做一个人脸识别项目。我有不同光照的图片,所以我需要进行光照标准化。我读了一篇声称可以进行照明归一化的论文。本文描述了以下功能和值。
1- 伽玛校正,伽玛 = 0.2
2- 高斯差分 (DOG) 过滤(sigma 0 = 1,sigma 1 =2)
3-对比度均衡(论文中使用截断阈值10和压缩分量0.1)
I use CvPow
对于伽玛校正,CvSmooth
对于 DoG 和Threshold()
与 truncate (我不知道如何指定压缩组件)但我没有得到确切的图像。我使用直方图均衡来进行对比度均衡。
如果有人以前做过或有任何想法吗?
论文链接:http://lear.inrialpes.fr/pubs/2007/TT07/Tan-amfg07a.pdf http://lear.inrialpes.fr/pubs/2007/TT07/Tan-amfg07a.pdf
代码如下:(Peb Aryan的Python代码转换为JAVACV)
public static IplImage preprocessImg(IplImage img)
{
IplImage gf = cvCreateImage(cvSize(img.width(),img.height()),IPL_DEPTH_32F, 1 );
IplImage gr = IplImage.create(img.width(),img.height(), IPL_DEPTH_8U, 1);
IplImage tr = IplImage.create(img.width(),img.height(), IPL_DEPTH_8U, 1);
IplImage b1 = IplImage.create(img.width(),img.height(),IPL_DEPTH_32F, 1 );
IplImage b2 = IplImage.create(img.width(),img.height(),IPL_DEPTH_32F, 1 );
IplImage b3 = IplImage.create(img.width(),img.height(),IPL_DEPTH_32F, 1 );
CvArr mask = IplImage.create(0,0,IPL_DEPTH_8U, 1 );
cvCvtColor(img, gr, CV_BGR2GRAY);
gamma(gr,gr,gf);
cvSmooth(gf,b1,CV_GAUSSIAN, 1);
cvSmooth(gf,b2,CV_GAUSSIAN,23);
cvSub(b1,b2,b2,mask);
cvConvertScale(b2,gr,127,127);
cvEqualizeHist(gr, gr);
//cvThreshold(gr,tr,255,0,CV_THRESH_TRUNC);
return gr;
}
public static void gamma(IplImage src,IplImage dst, IplImage temp)
{
cvConvertScale(src,temp, 1.0/255,0);
cvPow(temp, temp, 0.2);
cvConvertScale(temp, dst, 255,0);
}
这是我尝试的结果:
以及论文中的参考: