Local Binary Pattern in OpenCV (Python)
Masih melanjutkan tulisan sebelumnya, sengaja disambung karena isinya sangat sederhana (gatal kalau tidak ditulis). LBP (Local Binary Pattern) atau Pola Biner Lokal merupakan salah satu informasi yang dapat dianalisis dari citra. Informasi LBP biasanya digunakan sebagai deksriptor dari tekstur. Salah satu kelebihan dari LBP adalah sifatnya yang invarian terhadap perubahan fotometri dari objek yang sama karena sifatnya yang merupakan ukuran intensitas relatif suatu piksel dengan intensitas piksel di sekitarnya.
istilah biner berasal dari representasi kenisbian intensitas piksel tetangga terhadap piksel yang sedang diproses. LBP dihitung dengan mengasosiasikan sejumlah ketetanggaan dengan bit-bit pada angka. Misalkan, untuk area ketetanggaan 3×3 piksel maka piksel yang ada di tengah akan memiliki tetangga sebanyak 8 piksel. Suatu posisi bit akan bernilai 1 jika intensitas piksel tetangga lebih besar daripada piksel yang sedang diproses (piksel tengah). Setiap piksel tetangga diasosiasikan dengan satu posisi bit sehingga untuk ketetanggan 3×3 (8 tetangga) tersebut maka setiap piksel yang diproses akan memiliki variasi tetangga sebanyak 2^8 = 255 kombinasi.
Implementasi algoritma menghitung fitur LBP diperlihatkan pada kode (python) berikut.
import cv
def calc_lbp(im):
"""
calculate LBP (Local Binary Pattern) image N8 neighborhood
"""
sz = cv.GetSize(im)
gr = cv.CreateImage(sz, 8, 1)
lbp = cv.CreateImage(sz, 8, 1)
#convert to grayscale
cv.CvtColor(im, gr, cv.CV_BGR2GRAY)
LBPMASK = [(0,-1),(1,-1),(1,0),(1,1),(0,1),(-1,-1),(-1,0),(-1,1)]
for y in xrange(1, sz[1]-2):
for x in xrange(1, sz[0]-2):
n = 0
gv = gr[y,x]
for i in xrange(len(LBPMASK)):
m = LBPMASK[i]
if gr[y+m[1], x+m[0]]>gv:
n += 1 << i
lbp[y,x] = n
return lbp
if __name__ == '__main__':
im = cv.LoadImage('jalan2.jpg')
lbpim = calc_lbp(im)
cv.ShowImage('lbp', lbpim)
key = cv.WaitKey(0)
Untuk menunjukkan efek dari kode di atas, saya akan menggunakan gambar yang sama dengan tulisan sebelumnya.
Dalam beberapa paper yang saya baca, fitur LBP ini dikombinasikan dengan fitur HOG untuk menghasilkan sistem pendeteksi yang lebih akurat. Pemrosesan lebih lanjut dengan PCA dilakukan untuk mereduksi dimensi vektor yang perlu diproses untuk membandingkan dan ternyata (di paper yang saya baca) melaporkan bahwa hasil pendeteksiannya menjadi lebih akurat. Mari kita buktikan apakah laporan itu benar atau tidak. tunggu tulisan selanjutnya!
Filed under: computer vision, hacking, image processing, programming | Leave a Comment
Tag:lbp, local binary pattern, opencv, python, texture descriptor


No Responses Yet to “Local Binary Pattern in OpenCV (Python)”