GLCM merupakan salah satu ektraksi ciri untuk memperoleh nilai fitur dengan menghitung kemunculan matriks yang sama dalam piksel gambar. Fitur yang terdapat dalam GLCM terdiri dari energi, entropi, homogenitas, kontras, korelasi, mean, dissimilariti dsb. GLCM dapat digunakan untuk ekstraksi sebuah gambar. Karena masing-masing gambar berbeda-beda berdasarkan tekstur dan polanya.
Sederhananya, GLCM merupakan teknik analisis tekstur pada citra yang merepresentasikan hubungan antara 2 pixel yang bertetanggaan (neighboring pixels) berdasarkan keabuan (grayscale intensity), jarak dan sudut. Terdapat 8 sudut yang dapat digunakan pada GLCM, diantaranya sudut 0°, 45°, 90°, dan 135°.
Detil perhitungan GLCM dapat anda lihat disini
Pada kasus ini kita diberikan sebuah dataset tekstur kain dengan 4 kelas yaitu “ceruti”,”cornskin”,”diamond”,”toyobo”. Data-data tersebut telah dipisahkan didalam folder-folder khusus.
Adapun bentuk gambar-gambar tekstur kain tersebut adalah
Kelas : Ceruti
Kelas: Diamond
Kelas : Cornskin
Kelas: Toyobo
Maka langkah-langkah yang dilakukan adalah
Ekstraksi fitur
import numpy as np
import os
import matplotlib.pyplot as pyplot
from skimage.feature import greycomatrix,greycoprops
from skimage.measure import label,regionprops
import pandas as pd
import cv2
from google.colab import drive
drive.mount('/content/gdrive')
Untuk image telah saya simpan di google Drive, silakan sesuaikan dengan coding anda. jika menggunakan direktori langsung silakan hapus 2 baris terakhir
#silakan ganti dengan alamat dataset anda
path_ds="/content/gdrive/MyDrive/05. DOKUMN/MYBOOK/ML BOOK/SOURCECODE/DATASET/tekstur_kain"
#sudut texture GLCM
sudut = [0, 45, 90, 135]
#fitur GLCM yang digunakan
featureList = ['contrast', 'dissimilarity', 'homogeneity', 'ASM', 'energy','correlation']
properties =np.zeros(25)
glcmMatrix = []
final=[]
folders = ["ceruti","cornskin","diamond","toyobo"]
for folder in folders:
print("======Proses kelas :",folder)
labell=folders.index(folder)
INPUT_SCAN_FOLDER=path_ds+"/"+folder+"/"
image_folder_list = os.listdir(INPUT_SCAN_FOLDER)
for i in range(len(image_folder_list)):
abc =cv2.imread(INPUT_SCAN_FOLDER+image_folder_list[i])
gray_image = cv2.cvtColor(abc, cv2.COLOR_BGR2GRAY)
# images = images.f.arr_0
print(image_folder_list[i])
x=0
for ssd in sudut:
print("SUDUT =",ssd)
glcmMatrix = (greycomatrix(gray_image, distances=[2], angles=[ssd]))
for j in range(0, len(featureList)):
properties[x] = (greycoprops(glcmMatrix, prop=featureList[j]))
#print (featureList[j],">",properties[x])
x=x+1
features = np.array(
[properties[0], properties[1], properties[2], properties[3], properties[4],properties[5],
properties[6],properties[7], properties[8], properties[9], properties[10], properties[11],
properties[12], properties[13], properties[14], properties[15], properties[16], properties[17],
properties[18], properties[19], properties[20], properties[21], properties[22], properties[23],
labell])
final.append(features)
df = pd.DataFrame(final)
Pembagian dataset
#pisahkan data dan label
Y= df[24]
X = df.drop([24],axis=1)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,Y, test_size=.3, random_state=100)
Pelatihan Model
from sklearn.neural_network import MLPClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
names = ["Nearest Neighbors", "Linear SVM", "RBF SVM", "Gaussian Process",
"Decision Tree","KNN", "Random Forest", "Neural Net", "AdaBoost",
"Naive Bayes"]
classifiers = [
KNeighborsClassifier(3),
SVC(kernel="linear", C=0.025),
SVC(kernel = 'rbf', C = 0.3, gamma = 0.21),
GaussianProcessClassifier(1.0 * RBF(1.0)),
DecisionTreeClassifier(max_depth=5),
KNeighborsClassifier(n_neighbors=5),
RandomForestClassifier(),
MLPClassifier(),
AdaBoostClassifier(),
GaussianNB()]
Lakukan train dan evaluasi
# iterate over classifiers
for name, clf in zip(names, classifiers):
clf.fit(X_train,y_train)
score = clf.score(X_test, y_test)
print(name,":",score)
Hasilnya adalah
Nearest Neighbors : 0.5416666666666666
Linear SVM : 0.6333333333333333
RBF SVM : 0.24166666666666667
Gaussian Process : 0.7916666666666666
Decision Tree : 0.7166666666666667
KNN : 0.5916666666666667
Random Forest : 0.9166666666666666
Neural Net : 0.4166666666666667
AdaBoost : 0.55
Naive Bayes : 0.5166666666666667