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.

citra asal

citra asal

ekstraksi fitur LBP

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!

5 comments

  1. Ping-balik: Tracking Using Local Binary Pattern « GAIBlog
  2. Ping-balik: Local Binary Pattern with NumPy « GAIBlog
  3. gobib · Februari 18, 2016

    “fitur LBP ini dikombinasikan dengan fitur HOG untuk menghasilkan sistem pendeteksi yang lebih akurat” — ditunggu mas artikel selanjutnya..

  4. Ping-balik: OpenCvを少し動かしてみる。mac or linux - TECHBIRD | TECHBIRD - プログラミングを楽しく学ぼう
  5. Ruslan · Desember 16, 2022

    Artikel yang menarik, saya ingin tahu artikel mana yang mengatakan bila fitur LBP dikombinasikan dengan HOG menjadi lebih baik?

Tinggalkan komentar

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.