LBP特徵提取(opencv3&python)
阿新 • • 發佈:2019-02-15
基本的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部分,分別源目標目錄以及結果目錄