利用simd提高lbp的提取速度的制作方法
【專利摘要】LBP(Local?Binary?Pattern)是一種用來描述圖像局部紋理特征的算子,作用是進行圖像紋理特征的提取,在圖像領域應用非常廣泛。本發明公開了一種使用SIMD(Single?Instruction?Multiple?Data)指令提高LBP提取速度的方法,SIMD可以用一條指令操作128位數據,即可以一次操作16組8位的數,即16個像素,所以和傳統的LBP特征提取相比,使用SIMD指令可以使LBP提取速度在量級上得到提高。
【專利說明】利用SIMD提高LBP的提取速度
【技術領域】
[0001]本發明涉及一種在圖像處理領域的LBP特征提取的加速方法。
【背景技術】
[0002]人們感知事物的時候往往通過視覺來提取物體的特征,進而判斷物體的類型,故而計算機在識別物體的時候也需要提取特征,而圖像LBP特征提取在計算機視覺中應用廣泛,例如紋理分類、模式識別等領域。計算機視覺的應用場景一般情況是對實時性會有一定要求,而且計算量會比較龐大,所以如何加速往往是研究的重點。
[0003]舉例來說,LBP局部紋理特征算子已經成功應用于指紋識別、人臉識別、車牌識別等等,而現在的LBP特征提取都是對圖像的像素逐一提取(例如20*30的圖像,至少要循環18*28次),在這點上大大限制了速度。
【發明內容】
[0004]本發明的目的是提出一種利用SMD加速LBP特征提取的辦法,該方法的速度相比普通的LBP提取可以在量級上提高。
[0005]本發明要解決的技術問題是,在效果不變的情況下,加速LBP特征提取。
[0006]為解決上述技術問題,本發明采取以下技術方案:利用SMD提高LBP特征提取速度。具體的,SMD具有可以同時處理128位數據的優點,灰度圖的像素值為8位,利用SMD指令可以一次處理16個像素,但是現有的LBP特征提取是每個像素逐一計算的,由此可見,利用SIMD可以將LBP特征提取的速度提高數倍。
【專利附圖】
【附圖說明】
[0007]圖1—計算某一像素的LBP特征示意圖。
[0008]圖2-SIMD的ADDPS指令操作。
[0009]圖3——未使用SMD計算圖像LBP特征流程圖。
[0010]圖4——使用SMD計算圖像LBP特征流程圖。
【具體實施方式】
[0011 ] 下面舉出實例對本發明的技術方案進行詳細說明。
[0012]LBP算子是一種用來描述圖像局部紋理特征的算子,在3*3的窗口內,以中心像素值作為閾值,經過計算得到該窗口的值,這個值來反映該區域的紋理信息。圖像提取LBP特征的具體步驟如下:取圖像中的某一像素作為3*3窗口的中心點,將該中心點的灰度值作為基準值,分別與窗口內中心像素周圍的8個點的灰度值相比較,標記為I或者O (大于基準值標記為1,否則標記為O)。8個點的位置決定了自身的權重,將其加權求和之后可以得到此窗口的LBP值。這樣逐一對圖像的每個像素操作,可以提取到整個待提取圖像的LBP特征。由此可見,傳統的LBP特征提取是每個像素逐一進行的,這樣速度得到了限制。
[0013]圖1為取圖像中一 3*3的窗口,計算該窗口中心像素的LBP特征的示意圖,這個計算過程可以用如下公式表示:
[0014]Value (Ibp) = (Al > value (η) ? 1: O) *ffl+ (A2 > value (n) ? 1:0) *W2
[0015]+ (A3 > value (n) ? 1:0) *W3+ (A4 > value (n) ? 1:0) *W4
[0016]+ (A5 > value (n) ? 1:0) *W5+(A6 > value (n) ? 1:0) *W6
[0017]+ (A7 > value (n) ? 1:0) *W7+ (A8 > value (n) ? 1:0) *W8
[0018]Al、A2、A3等是3*3窗口內四周像素的值,value (n)為中心像素值,Wl、W2、W3等是四周像素各自的權重。
[0019]SMD可以同時處理128位數據,即可以用一條指令處理多組數據,例如4組32位float類型數,或16組8位的數等等。圖2是SMD的ADDPS指令操作實現兩組單精度值相加的示意圖,A和B是兩組包含4個float類型數據的向量,該指令可以同時讓4組float數據實現相加操作。
[0020]灰度圖像的像素值范圍在0-255,長度為8位,由此,SMD可以一次處理16個像素點,那么可以用SIMD的load指令分別加載16個中心像素值、對應的周圍像素值(8組,每組16個值),然后,按照LBP特征提取的方法操作,但在比較、求和等操作時均使用SMD指令。
[0021]圖3為傳統方法來提取圖像LBP特征的流程圖。提取圖像的LBP特征需要逐個像素來進行操作,圖4為使用SMD來提取圖像LBP特征的流程圖。與傳統的提取方法相比,這種方法一次加載16組數據,可以一次性計算16個像素點。圖4中提取LBP特征中所用的公式:
[0022]Vec (Value (Ibp)) = (Vec (Al) > Vec (value (η))) *Vec (Wl)
[0023]+(Vec (A2) > Vec (value (n))) *Vec (W2) + (Vec (A3) > Vec (value (n))) *Vec (W3)
[0024]+ (Vec (A4) > Vec (value (n))) *Vec (W4) + (Vec (A5) > Vec (value (n))) *Vec (W5)
[0025]+(Vec(A6) > Vec(value(n)))*Vec(W6) + (Vec (A7) > Vec(value(n)))*Vec (W7)
[0026]+ (Vec (A8) > Vec (value (n))) *Vec (W8)
[0027]16個中心像素點構成中心像素向量Vec (value (η)),16個中心像素點的左上像素點構成向量Vec(Al),正上像素點構成向量Vec (Α2),其余周邊像素可以以此類推,Vec(W)表示某個周邊像素點的權重向量。該公式用來表示3*3窗口內周邊8個像素的向量分別與中心像素的向量相比較,比較結果為O和I組成的向量,該結果分別與各自的權重向量相乘,最后結果相加得到LBP特征的向量。
[0028]使用SIMD指令后,可以同時提取16個像素的特征,不足16個像素的可以使用傳統的逐個像素提取的方法,如此,對圖像提取LBP特征的速度能得到量級提升。
【權利要求】
1.利用SIMD提高LBP提取速度的方法,其特征在于: 利用SIMD的相關指令,一次計算16個像素的LBP特征,達到減少循環次數,提升整體速度的效果。
2.利用SIMD指令提取圖片LBP特征值的步驟主要為: (1)加載需要提取LBP的圖像到緩沖; (2)SIMD指令加載16組數據,每組包括9個數據,分別是3*3窗口的中心像素值、8個中心像素的四周(左上、正上、右上、左、右、左下、正下、右下)像素值; (3)按照LBP 特征提取辦法使用 _mm_or_sil28, _mm_and_sil28, _mm_cmpgt_epi8 等SIMD指令計算得到一組(16個)LBP特征值,保存至圖像LBP特征提取的結果中; (4)對9*16個數據計算完成后,即提取完成16個像素的LBP特征值,繼續循環步驟(2)和(3)可以計算下一組LBP特征,如果發現沒有16個數據可以加載(例如只有10個),可以按照逐一像素計算的方法進行。
【文檔編號】G06K9/46GK104166852SQ201310185954
【公開日】2014年11月26日 申請日期:2013年5月20日 優先權日:2013年5月20日
【發明者】李軍, 劉宇 申請人:南京壹進制信息技術有限公司