Feature Extraction : Gray Level Co-occurrence Matrix (GLCM)

Muhammad Yunus
6 min readJul 16, 2020

--

Menggunakan GLCM untuk mendapatkan feature texture : dissimilarity, correlation, homogeneity, contrast, ASM, energy

Secara visual kita dapat membedakan tekstur suatu gambar dengan mengamati :

  • Perulangan pola
  • Distribusi spasial
  • Susunan warna dan intensitas

Berikut adalah ilustrasi tekstur pada citra dengan distribusi 50% hitam dan 50% putih

Kalkulasi statistik seperti mean, median, maupun standar deviasi tidak akan mampu membedakan ke-3 gambar diatas. Ketiga gambar diatas memiliki susunan warna dan intensitas pixel yang sama, namun memiliki pola dan distribusi spasial berbeda yang tidak dapat dikenali oleh kalkulasi statistik seperti mean, median, maupun standar deviasi sehingga munculah Gray-Level Co-occurrence matrix (GLCM) untuk mengatasi permasalahan tersebut.

Gray-Level Co-occurrence matrix (GLCM) merupakan teknik analisis tekstur pada citra. GLCM merepresentasikan hubungan antara 2 pixel yang bertetanggaan (neighboring pixels) yang memiliki intensitas keabuan (grayscale intensity), jarak dan sudut. Terdapat 8 sudut yang dapat digunakan pada GLCM, diantaranya sudut 0°, 45°, 90°, 135°, 180°, 225°, 270°, atau 315°.

parameter jarak pada GLCM dihitung dengan banyaknya pixel antara pixel reference dan pixel neighbor.

Langkah pembuatan matrix GLCM :

  • Pembuatan framework matrix
  • Pembuatan co-occurrence matrix (mengisi framework matrix)
  • Pembuatan symmetric matrix (penjumlahan co-occurrence matrix dengan transpose matrix)
  • Matrix normalization yang akan menghasilkan nilai matrix antara 0–1

Contoh pembuatan matrix GLCM :

  • Misalkan kita memiliki grayscale matrix dengan ukuran 3x3, dengan gray tone 0–3 seperti berikut,
  • Define framework matrix bernilai 0 dengan dimensi 4x4, ukuran ini didapatkan dari quantization level matrix diatas,
Quantization level = count(gray tone)
  • Sehingga untuk gray tone 0–3 kita mendapatkan quantization level = 4, dengan seperti ini kita harusmembuat framework matrix dengan size 4x4
  • Tiap posisi pada framework matrix merupakan kombinasi nilai pixel pada matrix input 3x3,
  • Pada citra digital 8-bit akan memiliki quantization level 256, mengingat gray tone-nya antara 0 -255.
  • Selanjutnya kita akan menggunakan distance =1 dan angel =0° , untuk membentuk co-occurrence matrix,
  • Kombinasi pixel berpasangan dipilih mulai dari kiri-atas terus sampai kanan-bawah.

Step 1

  • Contohnya untuk matrix input dibawah, pixel ke-1 bernilai 0, pixel ke-2 bernilai 0 juga.
  • Pada framework matrix berada pada lokasi 0,0 karena pixel ke-1 bernilai 0, pixel ke-2 bernilai 0,
  • Tambahkan 1 pada lokasi tersebut,

Step 2

  • Pixel ke-2 bernilai 0, pixel ke-3 bernilai 1.
  • Pada framework matrix berada pada lokasi 0,1 karena pixel ke-2 bernilai 0, pixel ke-3 bernilai 1,
  • Tambahkan 1 pada lokasi tersebut,
  • lakukan penambahan satu untuk semua kombinasi pasangan pixel pada matrix input 3x3,
  • untuk lokasi yang sebelumnya sudah ditambahkan 1, jika ada kombinasi lain yang menghasilkan pasangan pixel yang sama maka tambahkan 1 ke hasil sebelumnya, sehingga menjadi 2, dan seterusnya jika ditemukan yang ketiga kali.
  • Berikut contoh ilustrasi keseluruhan step pencarian co-occurrence matrix pada input matrix 3x3,
ilustrasi pencarian co-occurrence matrix
  • Setelah itu buatlah symmetric matrix dengan menjumlahkan GLCM matrix dengan hasil transpose-nya,
GLCM matrix dan hasil transpose-nya
  • Hasil penjumlahan GLCM matrix dan hasil transpose-nya,
symmetric matrix
  • lakukan matrix normalization pada symmetric matrix dengan formula,
  • Sehingga dihasilkan matrix hasil normalisasinya sebagai berikut,
normalized matrix
  • Selanjutnya dari matrix glcm yang sudah di-normalisasi bisa didapatkan metric texture seperti dissimilarity, correlation, homogeneity, contrast, ASM, energy.
  • Berikut adalah formula untuk masing-masing metric,

untuk,

i,j merupakan koordinat pixel pada matrix GLCM,

levels merupakan rentang gray tone, pada citra digital 0–255 (level=256),

Pi,j merupakan nilai pixel pada koordinat i,j GLCM matrix

Contoh perhitungan metric :

  • Perhitungan Contrast pada matrix GLCM diatas,

Penerapan pada Python Scikit-Image

Prerequisites

  • Install Tool & Library yang dapat diikuti pada tutorial beirkut :
  • Install Scikit-Image melalui Anaconda prompt,
conda install -c anaconda scikit-image
  • Scikit-Image memiliki library untuk perhitungan GLCM pada skimage.feature yaitu module greycomatrix untuk mendapatkan GLCM matrix, dan greycoprops untuk menghitung metric pada GLCM,
  • Berikut adalah contoh penggunaanya untuk kasus matrix 3x3 sebelumnya,
  • hasil pada jupyter notebook,

Penggunaan Pada Citra Digital

  • Sekarang kita akan coba menghitung GLCM matrix citra digital dan mendapatkan metric texture nya seperti dissimilarity, correlation, homogeneity, contrast, ASM, energy.
  • Analisis yang dilakukan adalah untuk mengukur metric texture GLCM pada dataset kopi sebagai berikut,
sumber [link]
  • dataset dengan directory tree sebagai berikut,
  • Selanjutnya kita akan menggunakan library os untuk membaca nama file dari folder, dan library cv2(OpenCV) untuk melakukan pemrosesan citra,
  • Pemrosesan citra pada OpenCV dilakukan dengan beberapa tahap,
- read image menggunakan cv2.imread()
- convert ke grayscale menggunakan cv2.cvtColor()
- crop region of interest (ROI) ini digunakan untuk mendapatkan part penting dalam citra, dalam hal ini biji kopi
- resize 50% menggunakan cv2.resize()
  • berikut implementasinya pada python menggunakan library os dan cv2 (OpenCV),
  • keseluruhan dataset citra kopi akan tersimpan pada list imgs dan nama kopi disimpan pada list labels
  • Kita dapat preview salah satu citra dengan cara berikut,
  • Preview gambar kopi,
preview citra grayscale kopi
  • Selanjutnya kita dapat mencari matrix GLCM dan metric texture keseluruhan citra kopi dengan menggunakan fungsi greycomatrix() dan greycoprops() pada library Scikit-Image,
  • Sudut yang digunakan adalah 0, 45, 90 dan 135 untuk pada masing-masing metric texture (dissimilarity, correlation, homogeneity, contrast, ASM, energy),
  • Sehingga untuk tiap citra kopi akan dihasilkan 24 feature data yang didapatkan dari 4 variasi sudut dengan 6 variasi metric feature.
  • Fungsi calc_glcm_all_agl() digunakan untuk mendapatkan 24 feature data untuk sudut 0, np.pi/4, np.pi/2, 3*np.pi/4 dalam radian.
  • Hasil 24 feature data tersimpan pada list glcm_features ,
  • Selanjutnya kita ubah format data glcm_features dari list menjadi Dataframe menggunakan library pandas ,
  • Dengan diubah kedalam bentuk dataframe, data metric texture GLCM dapat dilihat secara tabular,
  • Gunakan fungsi pd.DataFrame() untuk membuat dataframe baru sebagai berikut,
  • Selain itu kita simpan sebagai csv menggunakan method pandas .to_scv() dengan nama glcm_coffee_dataset.csv untuk keperluan klasifikasi di tahap neural network nantinya.
  • Hasilnya pada jupyter Notebook,
Dataframe glcm_df untuk 24 feature data dan 1 kolom label

Nah, ditahap ini kita sudah mampu mengapatkan GLCM matrix dan menghasilkan metric texture GLCM menggunakan library Scikit-Image,

Selanjutnya kita akan coba terapkan dataframe diatas kedalam algoritma Neural Network menggunakan library Keras,

Sekian dan terima kasih..

Sumber :

--

--

Muhammad Yunus

IoT Engineer, Software Developer & Machine Learning Enthusiast