Klasifikasi Image dengan Fitur GLCM

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

Write a Comment

Your email address will not be published. Required fields are marked *

twenty − seven =