我正在進行人臉識別項目。我有不同照明的照片,所以我需要做照明標準化。我讀了一篇論文,聲稱做光照正常化。本文描述了以下功能和值。用γ與(sigma0 = 1,sigma1 = 2)的10
3-對比度均衡(截斷閾值和壓縮元件0.1濾波OpenCV中的照明規範化
1-伽馬校正= 0.2
2-高斯差分(DOG)的使用在紙)
我用CvPow
的伽瑪校正,CvSmooth
狗和Threshold()
與截斷(我不知道如何來指定壓縮部件),但我並沒有得到確切的圖像。我使用直方圖均衡來進行對比度均衡。
如果有人以前做過或有任何想法?
鏈接到紙:http://lear.inrialpes.fr/pubs/2007/TT07/Tan-amfg07a.pdf
的代碼如下:(PEB雅利安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);
}
這是我的嘗試的結果:
參考文獻:
如果您發佈了[您的代碼](http://sscce.org)並描述了您的方法有什麼不同,那麼這個問題會更好。更好的是,張貼鏈接到示例圖像。 – Aurelius
@Aurelius:代碼現在可用,照片也會上傳。 – Shah