gpt4 book ai didi

opencv - OpenCV 中的光照归一化

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:03 25 4
gpt4 key购买 nike

我正在做一个人脸识别项目。我有不同光照的图片,所以我需要进行光照归一化。我读了一篇声称进行光照归一化的论文。本文描述了以下功能和值。

1- Gamma 校正, Gamma = 0.2
2- 高斯 (DOG) 滤波与 (sigma0 = 1, sigma1 =2) 的差异
3-对比度均衡(论文中使用截断阈值10,压缩分量0.1)

我使用 CvPow 进行 Gamma 校正,使用 CvSmooth 进行 DoG,使用 Threshold() 进行截断(我不知道如何指定压缩组件),但我没有得到确切的图像。我使用直方图均衡来进行对比度均衡。

如果有人以前做过或有任何想法??

论文链接:http://lear.inrialpes.fr/pubs/2007/TT07/Tan-amfg07a.pdf

代码如下:(Peb Aryan转JAVACV的Python代码)

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);
}

这是我尝试的结果:

My attempt

以及论文中的引用资料:

enter image description here

最佳答案

不知道对你来说是不是太晚了。

在原始论文中,DoG 是由给定的 sigma 执行的,这里你的半径 (23) 太大了。试试radius = 7和radius = 1。关于均衡步骤,它与论文不同。你需要自己实现一个。

顺便说一句:某些基本函数(例如 cvSmooth)并未正确为您的应用程序实现。您可能需要自己实现才能获得更好的结果。

关于opencv - OpenCV 中的光照归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com