本章我們學習LBP圖像的原理和使用,因為接下來教程我們要使用LBP圖像的直方圖來進行臉部識别。
參考資料:
<a href="http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html">http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html</a>
<a href="http://www.cnblogs.com/mikewolf2002/p/3438166.html">http://www.cnblogs.com/mikewolf2002/p/3438166.html</a>
LBP的基本思想是以圖像中某個像素為中心,對相鄰像素進行門檻值比較。如果中心像素的亮度大于等于它的相鄰像素,把相鄰像素标記為1,否則标記為0。我們可以用二進制數字來表示LBP圖中的每個像素的LBP編碼,比如下圖中的中心像素,它的LBP編碼為:00010011,其十進制值為19。
用公式表示就是:
其中(xc,yc)是中心像素,ic是灰階值,in是相鄰像素的灰階值,s是一個符号函數:
在OpenCV的LBP算法中,使用圓形的LBP算子:
其中R是半徑,p是樣本點的個數。
如果就算的結果不在像素坐标上,我們則使用雙線性插值進行近似處理。
下面的代碼中,我們分别實作了通常LBP圖和圓形算子LBP圖。
elbp是圓形算子LBP函數,elbp1是通常LBP圖,我們分别對lena的圖像進行了處理,結果如下所示,從途中可以看出來,使用圓形算子的效果銳度更強。
我們換另外一張圖,該圖包括不同光照下的四副照片,再來看看LBP圖的效果:
程式代碼:
FirstOpenCV36