Local Binary Pattern in OpenCV (Python)

10Nov11

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!

About these ads


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


  1. 1 Tracking Using Local Binary Pattern « GAIBlog
  2. 2 Local Binary Pattern with NumPy « GAIBlog

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s


Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 2.083 pengikut lainnya.

%d bloggers like this: