Local Binary Pattern

by 23.58 0 komentar
Kali ini saya akan membahas mengenai salah satu tehnik untuk mengekstrak fitur pada pemrosesan gambar digital. Fitur ini yang akan digunakan untuk input fitur pada saat pengklasifikasian. Contohnya menggunakan Local Binary Pattern sebagai tehnik untuk mengekstrak fiture dan kemudian digunakan sebagai input pada tehnik pengklasifikasian SVM, CNN, K Nearest Neighbor dan masih banyak lagi. 

Langkah-langkah untuk menghitung nilai LBP pada suatu gambar adalah : 
  • Mengkonversi gambar ke abu - abu. Hal ini memudahkan kita untuk mendapatkan nilai intensitas pada suatu pixel pada gambar.

  •  Setelah dikonversi ke gambar abu - abu, langkah selanjutnya adalah menghitung nilai binernya. Kita dapat menghitung nilai binernya dengan membagi gambar ke bagian - bagian yang lebih kecil atau sering disebut mask/kernel/template. Disini saya menggunakan template dengan ukuran 3 x 3. Selanjutnya hitung  nilai intensitas setiap piksel pada template 3 x 3. Disini kita memiliki 9 piksel, yang mana pusat piksel akan digunakan sebagai acuan untuk perbandingan dengan 8 piksel lainnya. 
  •  Selanjutnya adalah memberi nilai perbandingan. Kotak hitam mewakili pusat piksel yang selanjutnya akan dibandingkan dengan kotak abu-abu. Jika nilai piksel pada kotak abu-abu lebih kecil dari pusat piksel maka nilai perbandingannya adalah 0, sebaliknya jika nilainya lebih besar atau sama dengan pusat piksel maka nilai perbandingannya adalah 1.

  •  Kita dapat menyusun nilai biner dengan ketentuan searah jarum jam atau kebalikan arah jarum jam. Sehingga sekarang kita mendapatkan nilai biner = 11110001
  • Selanjutnya kita gunakan bilangan biner tersebut untuk menghitung nilai LBP di setiap templatenya. Untuk menghitung nilai LBP adalah dengan mengalikan nilai biner dengan bilangan eksponensial dari 2.
  • Nilai LBP nya adalah 241 dan nilai LBP ini kita set pada pusat piksel seperti gambar dibawah ini. 

  • Dan hasilnya setelah diterapkan pada gambar adalah seperti gambar dibawah ini.

  • Berikut kode LBP untuk C++
    <code>
    #include "stdafx.h"
    #include "highgui.h"
    #include &lt;opencv2\opencv.hpp&gt;
    using namespace std;
    using namespace cv;
    void LBP(IplImage *src, IplImage *dst)
    {
     int tmp[8] = { 0 };
     CvScalar s;
    IplImage * temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
     uchar *data = (uchar*)src-&gt;imageData;
     int step = src-&gt;widthStep;
    for (int i = 1; i&lt;src-&gt;height - 1; i++)
     for (int j = 1; j&lt;src-&gt;width - 1; j++)
     {
     int sum = 0;
     if (data[(i - 1)*step + j - 1]&gt;data[i*step + j])
     tmp[0] = 1;
     else
     tmp[0] = 0;
     if (data[i*step + (j - 1)]&gt;data[i*step + j])
     tmp[1] = 1;
     else
     tmp[1] = 0;
     if (data[(i + 1)*step + (j - 1)]&gt;data[i*step + j])
     tmp[2] = 1;
     else
     tmp[2] = 0;
     if (data[(i + 1)*step + j]&gt;data[i*step + j])
     tmp[3] = 1;
     else
     tmp[3] = 0;
     if (data[(i + 1)*step + (j + 1)]&gt;data[i*step + j])
     tmp[4] = 1;
     else
     tmp[4] = 0;
     if (data[i*step + (j + 1)]&gt;data[i*step + j])
     tmp[5] = 1;
     else
     tmp[5] = 0;
     if (data[(i - 1)*step + (j + 1)]&gt;data[i*step + j])
     tmp[6] = 1;
     else
     tmp[6] = 0;
     if (data[(i - 1)*step + j]&gt;data[i*step + j])
     tmp[7] = 1;
     else
     tmp[7] = 0;
     s.val[0] = (tmp[0] * 1 + tmp[1] * 2 + tmp[2] * 4 + tmp[3] * 8 + tmp[4] * 16 + tmp[5] * 32 + tmp[6] * 64 + tmp[7] * 128);
    cvSet2D(dst, i, j, s);
     }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
     IplImage *img = cvLoadImage("1.bmp", 1);
     IplImage *dstImg = NULL;
     dstImg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 0);
     LBP(img, dstImg);
     cvNamedWindow("1", CV_WINDOW_AUTOSIZE);
     cvShowImage("1", img);
     cvShowImage("LBPI¼", dstImg);
     cvSaveImage("LBP.bmp", dstImg);
     cvWaitKey();
     return 0;
    }
    </code>


Mega Kusuma

Developer

Masa lalu saya adalah milik saya, masa lalu kamu adalah milik kamu, dan masa depan adalah milik kita -B.J. Habibie-

0 komentar:

Posting Komentar