1. 程式人生 > >LBP特徵提取(opencv3&python)

LBP特徵提取(opencv3&python)

基本的LBP特徵提取主要流程如下:

這裡寫圖片描述

更通俗的理解是將周圍的畫素與中間位置畫素進行比較,並將比較結果以0 | 1寫入對應的畫素位中(etc: 左上角 1 < 5 , 故 第二幅圖左上角寫入 0),從左上角順時針依次填入二進位制字串中(二進位制表示依次為: 00010011),然後轉換成十進位制(19),即是結果。

最終的程式碼:

import cv2
import numpy as np
import os

def LBP(image):
    W, H = image.shape                    #獲得影象長寬
    xx = [-1,  0,  1, 1, 1
, 0, -1, -1]   yy = [-1, -1, -1, 0, 1, 1, 1, 0] #xx, yy 主要作用對應順時針旋轉時,相對中點的相對值. res = np.zeros((W - 2, H - 2),dtype="uint8") #建立0陣列,顯而易見維度原始影象的長寬分別減去2,並且型別一定的是uint8,無符號8位,opencv圖片的儲存格式. for i in range(1, W - 2): for j in range(1, H - 2): temp = "" for m in
range(8): Xtemp = xx[m] + i Ytemp = yy[m] + j #分別獲得對應座標點 if image[Xtemp, Ytemp] > image[i, j]: #畫素比較 temp = temp + '1' else: temp = temp + '0' #print int(temp, 2) res[i - 1
][j - 1] =int(temp, 2) #寫入結果中 return res def Tran(src, drc): list = os.listdir(src) sum = 0 for i in list: try: img = cv2.imread(src + "/" + i, 0) img = cv2.resize(img, (224, 224), interpolation=cv2.INTER_AREA) #將圖片變成固定大小224,224,這步可以不用,自己選擇 cv2.imshow("temp", img) cv2.waitKey(0) cv2.destroyAllWindows() res = LBP(img.copy()) cv2.imwrite(drc + "/" + i, res) sum = int(sum) + 1 print i + " is finnished, number is " + str(sum) except: print "error in " + i src = "/home/rui/ttt/val" drc = "/home/rui/ttt/end" Tran(src, drc)

如果是簡單使用,則只需更改src以及drc部分,分別源目標目錄以及結果目錄