LBP原理介紹以及算法實現

有些讀者可能會以爲奇怪,上次推送怎麼就忽然提及了雙線性插值而不是繼續介紹經典人臉識別的算法,實際上是由於在學習圓形LBP算子的時候發現須要用到雙線性插值因而順帶介紹了一下。(由於我的緣由沒常常看公衆號的消息回覆,致使有些讀者留言超過兩天沒法回覆,在這裏說聲抱歉。)web


前言算法

LBP(Local Binary Pattern,局部二值模式)是一種用來描述圖像局部紋理特徵的算子;它具備旋轉不變性和灰度不變性等顯著的優勢,用來提取圖像的局部的紋理特徵。微信


LBP特徵的描述app

原始的LBP算子定義爲在3*3的窗口內,以窗口中心像素爲閾值,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大於中心像素值,則該像素點的位置被標記爲1,不然爲0。這樣,3*3鄰域內的8個點經比較可產生8位二進制數(一般轉換爲十進制數即LBP碼,共256種),即獲得該窗口中心像素點的LBP值,並用這個值來反映該區域的紋理信息。具體圖示以下:函數

通過計算,一個區域的圖像就被咱們用一段十進制數表示出了紋理信息。學習


數學公式以下:spa


LBP的改進.net

看完基本LBP運算算子以後有些讀者可能心裏會有疑惑,若是某個區域是圓形或者其餘尺寸怎麼辦?研究人員提出瞭如下的改進版本。orm


(1)圓形LBP算子blog

爲了適應不一樣尺度的紋理特徵,並達到灰度和旋轉不變性的要求,Ojala 等對 LBP 算子進行了改進,將 3×3 鄰域擴展到任意鄰域,並用圓形鄰域代替了正方

形鄰域,改進後的 LBP 算子容許在半徑爲 R 的圓形鄰域內有任意多個像素點。從而獲得了諸如半徑爲R的圓形區域內含有P個採樣點的LBP算子,圖示以下:

對於不是整數點的像素可使用雙線性插值進行計算,具體計算方式在上一篇推文已經進行了介紹。


(2)LBP旋轉不變模式

從 LBP 的定義能夠看出,LBP 算子是灰度不變的,但卻不是旋轉不變的。圖像的旋轉就會獲得不一樣的 LBP值。 Maenpaa等人又將 LBP 算子進行了擴展,提出了具備旋轉不變性的 LBP 算子,即不斷旋轉圓形鄰域獲得一系列初始定義的 LBP 值,取其最小值做爲該鄰域的 LBP 值,圖示以下:


(2)LBP的等價模式

一個LBP算子能夠產生不一樣的二進制模式,對於半徑爲R的圓形區域內含有P個採樣點的LBP算子將會產生2的P次冪種模式。很顯然,隨着鄰域集內採樣點數的增長,二進制模式的種類是急劇增長的。例如:5×5鄰域內20個採樣點,有2的20次冪=1,048,576種二進制模式。如此多的二值模式不管對於紋理的提取仍是對於紋理的識別、分類及信息的存取都是不利的。同時,過多的模式種類對於紋理的表達是不利的。例如,將LBP算子用於紋理分類或人臉識別時,常採用LBP模式的統計直方圖來表達圖像的信息,而較多的模式種類將使得數據量過大,且直方圖過於稀疏。所以,須要對原始的LBP模式進行降維,使得數據量減小的狀況下能最好的表明圖像的信息。
  爲了解決二進制模式過多的問題,提升統計性,Ojala提出了採用一種「等價模式」(Uniform Pattern)來對LBP算子的模式種類進行降維。Ojala等認爲,在實際圖像中,絕大多數LBP模式最多隻包含兩次從1到0或從0到1的跳變。所以,Ojala將「等價模式」定義爲:當某個LBP所對應的循環二進制數從0到1或從1到0最多有兩次跳變時,該LBP所對應的二進制就稱爲一個等價模式類。如00000000(0次跳變),00000111(只含一次從0到1的跳變),10001111(先由1跳到0,再由0跳到1,共兩次跳變)都是等價模式類。除等價模式類之外的模式都歸爲另外一類,稱爲混合模式類,例如10010111(共四次跳變)(這是個人我的理解,不知道對不對)。
  經過這樣的改進,二進制模式的種類大大減小,而不會丟失任何信息。模式數量由原來的
2的P次冪種減小爲 P ( P-1)+2種,其中P表示鄰域集內的採樣點數。對於3×3鄰域內8個採樣點來講,二進制模式由原始的256種減小爲58種,這使得特徵向量的維數更少,而且能夠減小高頻噪聲帶來的影響。


LBP的使用

在LBP的應用中,如紋理分類、人臉分析等,通常都不將LBP圖譜做爲特徵向量用於分類識別,而是採用LBP特徵譜的統計直方圖做爲特徵向量用於分類識別。由於直接對兩幅圖片提取這種「特徵」,並進行判別分析的話,會由於「位置沒有對準」而產生很大的偏差。後來,研究人員發現,能夠將一幅圖片劃分爲若干的子區域,對每一個子區域內的每一個像素點都提取LBP特徵,而後,在每一個子區域內創建LBP特徵的統計直方圖。如此一來,每一個子區域,就能夠用一個統計直方圖來進行描述;整個圖片就由若干個統計直方圖組成; 例如:一個100*100像素大小的圖片,劃分爲10*10=100個子區域(能夠經過多種方式來劃分區域),每一個子區域的大小爲10*10像素;在每一個子區域內的每一個像素點,提取其LBP特徵,而後,創建統計直方圖;這樣,這幅圖片就有10*10個子區域,也就有了10*10個統計直方圖,利用這10*10個統計直方圖,就能夠描述這幅圖片了。以後,咱們利用各類類似性度量函數,就能夠判斷兩幅圖像之間的類似性了。圖示以下:



代碼實現







本文分享自微信公衆號 - 計算機視覺漫談()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索