Ekstraksi Ciri Citra (Feature Extraction) dan Implementasinya dengan Python
Setelah proses Segmentasi Citra selesai dan objek berhasil dipisahkan dari latar belakangnya, langkah berikutnya dalam Mid-Level Processing adalah Ekstraksi Ciri (Feature Extraction).
Ekstraksi ciri adalah proses mengambil informasi kuantitatif atau Karakteristik unik dari suatu citra untuk mewakili objek tersebut. Hasil dari ekstraksi ciri berupa nilai numerik (vektor ciri) yang nantinya digunakan oleh komputer pada tahap High-Level Processing (seperti Machine Learning) untuk mengenali, mengklasifikasikan, atau membedakan satu objek dengan objek lainnya.
a. Definisi Ekstraksi Ciri Citra
Ekstraksi Ciri Citra adalah teknik penyederhanaan data visual dari bentuk piksel mentah menjadi sekumpulan parameter atau deskriptor matematis yang relevan.
Tujuan utamanya adalah untuk mengurangi dimensi data tanpa kehilangan informasi penting. Vektor ciri yang ideal harus bersifat invarian—artinya nilai cirinya tetap stabil meskipun objek mengalami perubahan ukuran (scaling), rotasi, pencahayaan, maupun pergeseran posisi (translation).
b. Ekstraksi Ciri Bentuk (Shape Feature)
Ciri Bentuk mendeskripsikan struktur luar atau kontur dari suatu objek. Fitur ini sangat penting untuk membedakan objek yang memiliki bentuk visual khas, seperti daun, buah, atau bentuk geometris tertentu.
-
Pendekatan: Berbasis batas/kontur (boundary-based) atau berbasis wilayah (region-based).
-
Contoh Deskriptor: Eccentricity (keleluapan), Compactness (kepadatan/kebulatan), Solidity, dan Hu Moments (momen yang tahan terhadap skala dan rotasi).
c. Ekstraksi Ciri Ukuran (Size Feature)
Ciri Ukuran adalah bagian spesifik dari ciri bentuk yang mengukur dimensi fisik objek dalam satuan piksel. Fitur ini memberikan gambaran kuantitatif mengenai seberapa besar wilayah yang ditempati oleh objek dalam sebuah citra.
-
Parameter Utama:
-
Luas (Area): Jumlah total piksel yang membentuk objek.
-
Keliling (Perimeter): Jumlah piksel yang berada di sepanjang garis batas (contour) objek.
-
Panjang & Lebar (Bounding Box Width & Height): Dimensi kotak terkecil yang mengurung objek.
-
d. Ekstraksi Ciri Geometri (Geometric Feature)
Ciri Geometri menggabungkan dimensi ukuran dan bentuk untuk menggambarkan hubungan spasial serta proporsi objek secara matematis.
-
Parameter Utama:
-
Pusat Massa (Centroid / Center of Mass): Titik koordinat pusat dari objek $(\bar{x}, \bar{y})$.
-
Rasio Aspek (Aspect Ratio): Perbandingan antara lebar dan tinggi objek $(\text{Width} / \text{Height})$.
-
Kebulatan (Circularity / Form Factor): Mengukur seberapa dekat bentuk objek dengan lingkaran sempurna. Dirumuskan sebagai:
$$\text{Circularity} = \frac{4 \pi \times \text{Area}}{\text{Perimeter}^2}$$(Nilai mendekati 1 menunjukkan bentuk lingkaran sempurna).
-
e. Ekstraksi Ciri Tekstur (Texture Feature)
Ciri Tekstur mendeskripsikan pola keragaman atau variasi tingkat keabuan (gray level) serta kerapatan struktur pada permukaan objek (misalnya: halus, kasar, bergaris, atau teratur).
-
Pendekatan Populer: GLCM (Gray-Level Co-occurrence Matrix)—menganalisis frekuensi kemunculan pasangan piksel dengan nilai intensitas dan arah tertentu.
-
Parameter Utama GLCM:
-
Kontras (Contrast): Mengukur intensitas variasi lokal.
-
Homogenitas (Homogeneity): Mengukur keseragaman tekstur.
-
Energi / ASM (Energy): Mengukur kerapatan pola.
-
Korelasi (Correlation): Mengukur keterkaitan linier antar piksel.
-
f. Ekstraksi Ciri Warna (Color Feature)
Ciri Warna mengukur distribusi dan karakteristik warna pada objek. Ciri ini bersifat invarian terhadap posisi dan ukuran objek, serta sangat berguna jika warna menjadi identitas utama objek.
-
Pendekatan Utama:
-
Rataan Warna (Color Moments): Menghitung Mean (rata-rata), Standard Deviation (variasi), dan Skewness (kemiringan) dari setiap saluran warna.
-
Histogram Warna (Color Histogram): Menghitung frekuensi kemunculan setiap tingkatan warna.
-
Ruang Warna (Color Spaces): Memanfaatkan ruang warna selain RGB, seperti HSV (Hue, Saturation, Value) atau Lab yang lebih tahan terhadap perubahan pencahayaan.
-
Implementation Code pada Python
Berikut adalah contoh kode Python menggunakan perpustakaan OpenCV, NumPy, dan scikit-image untuk mengekstrak ciri-ciri di atas secara langsung dari sebuah gambar:
import cv2
import numpy as np
from skimage.feature import graycomatrix, graycoprops
# 1. BACA CITRA & PREPROCESSING
# Buat citra sintetis sederhana (objek lingkaran/persegi di background hitam)
img = np.zeros((300, 300, 3), dtype=np.uint8)
cv2.circle(img, (150, 150), 60, (0, 255, 128), -1) # Objek lingkaran berwarna hijau-biru
# Konversi ke Gray dan Biner untuk analisis bentuk & ukuran
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)
# Find contours (Menemukan batas objek)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
# -------------------------------------------------------------
# b, c, d. EKSTRAKSI CIRI UKURAN, GEOMETRI, DAN BENTUK
# -------------------------------------------------------------
# Ukuran
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt, True)
x, y, w, h = cv2.boundingRect(cnt)
# Geometri
moments = cv2.moments(cnt)
cx = int(moments['m10'] / moments['m00']) # Centroid X
cy = int(moments['m01'] / moments['m00']) # Centroid Y
aspect_ratio = float(w) / h
# Bentuk (Circularity)
circularity = (4 * np.pi * area) / (perimeter ** 2) if perimeter > 0 else 0
print("=== CIRI UKURAN, GEOMETRI & BENTUK ===")
print(f"Luas (Area) : {area} piksel")
print(f"Keliling (Perimeter) : {perimeter:.2f} piksel")
print(f"Centroid (Pusat Massa) : ({cx}, {cy})")
print(f"Aspect Ratio : {aspect_ratio:.2f}")
print(f"Circularity (Kebulatan): {circularity:.2f} (1.0 = Lingkaran Sempurna)\n")
# -------------------------------------------------------------
# e. EKSTRAKSI CIRI TEKSTUR (GLCM)
# -------------------------------------------------------------
# Menghitung GLCM untuk jarak 1 piksel dan sudut 0 derajat
glcm = graycomatrix(gray, distances=[1], angles=[0], levels=256, symmetric=True, normed=True)
contrast = graycoprops(glcm, 'contrast')[0, 0]
homogeneity = graycoprops(glcm, 'homogeneity')[0, 0]
energy = graycoprops(glcm, 'energy')[0, 0]
print("=== CIRI TEKSTUR (GLCM) ===")
print(f"Contrast : {contrast:.4f}")
print(f"Homogeneity : {homogeneity:.4f}")
print(f"Energy : {energy:.4f}\n")
# -------------------------------------------------------------
# f. EKSTRAKSI CIRI WARNA (RGB & HSV)
# -------------------------------------------------------------
# Rata-rata warna pada objek (menggunakan mask dari thresh)
mean_val_bgr = cv2.mean(img, mask=thresh)[:3]
# Konversi ke HSV untuk ciri warna yang lebih stabil
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mean_val_hsv = cv2.mean(hsv_img, mask=thresh)[:3]
print("=== CIRI WARNA (RATA-RATA) ===")
print(f"Mean BGR : B={mean_val_bgr[0]:.1f}, G={mean_val_bgr[1]:.1f}, R={mean_val_bgr[2]:.1f}")
print(f"Mean HSV : H={mean_val_hsv[0]:.1f}, S={mean_val_hsv[1]:.1f}, V={mean_val_hsv[2]:.1f}")
Rangkuman: Ekstraksi ciri mengubah data piksel visual menjadi angka-angka deskriptif. Pemilihan ciri yang tepat (apakah bentuk, tekstur, atau warna) sangat bergantung pada jenis data dan domain masalah yang ingin diselesaikan oleh sistem kecerdasan buatan Anda.