Feature Extraction : Gray Level Co-occurrence Matrix (GLCM)
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,
- Setelah itu buatlah symmetric matrix dengan menjumlahkan GLCM matrix dengan hasil transpose-nya,
- Hasil penjumlahan GLCM matrix dan hasil transpose-nya,
- lakukan matrix normalization pada symmetric matrix dengan formula,
- Sehingga dihasilkan matrix hasil normalisasinya sebagai berikut,
- 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 modulegreycomatrix
untuk mendapatkan GLCM matrix, dangreycoprops
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,
- dataset dengan directory tree sebagai berikut,
- Selanjutnya kita akan menggunakan library
os
untuk membaca nama file dari folder, dan librarycv2
(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
dancv2
(OpenCV),
- keseluruhan dataset citra kopi akan tersimpan pada list
imgs
dan nama kopi disimpan pada listlabels
- Kita dapat preview salah satu citra dengan cara berikut,
- Preview gambar kopi,
- Selanjutnya kita dapat mencari matrix GLCM dan metric texture keseluruhan citra kopi dengan menggunakan fungsi
greycomatrix()
dangreycoprops()
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 sudut0, 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 librarypandas
, - 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 namaglcm_coffee_dataset.csv
untuk keperluan klasifikasi di tahap neural network nantinya. - Hasilnya pada jupyter Notebook,
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 :
- https://www.kaskus.co.id/thread/5ce18a33facb95577a5499ce/analisis-tekstur-gray-level-cooccurance-matrix-glcm/
- https://scikit-image.org/docs/stable/api/skimage.feature.html#skimage.feature.greycoprops
- “Recognition of Roasted Coffee Bean Levels using Image Processing and Neural Network” — (http://iopscience.iop.org/1757-899X/180/1/012059)