Cara Membuat Segmentasi Gambar dengan SVM: Panduan Langkah demi Langkah
Diterbitkan: 2024-12-05Segmentasi gambar adalah tugas penting dalam visi komputer, di mana gambar dibagi menjadi beberapa wilayah atau segmen yang memiliki atribut yang sama seperti warna, tekstur, atau intensitas. Proses segmentasi ini berguna dalam berbagai bidang, termasuk pencitraan medis, deteksi objek, dan analisis citra satelit. Salah satu alat yang ampuh untuk segmentasi gambar adalah Support Vector Machine (SVM). Dalam panduan langkah demi langkah ini, kami akan memandu Anda tentang cara membuat model segmentasi gambar menggunakan SVM.
Apa itu Mesin Vektor Dukungan (SVM)?
Support Vector Machines (SVM) adalah algoritme pembelajaran mesin terawasi yang biasa digunakan untuk tugas klasifikasi dan regresi. Dalam segmentasi gambar, SVM dapat mengklasifikasikan setiap piksel suatu gambar ke dalam kelas yang berbeda (misalnya latar depan, latar belakang, atau objek berbeda) berdasarkan fitur piksel seperti warna, intensitas, atau tekstur.
SVM bekerja dengan menemukan hyperplane optimal yang memaksimalkan margin antar kelas yang berbeda. Dalam kasus segmentasi gambar, tujuannya adalah untuk mengklasifikasikan setiap piksel dalam gambar ke dalam salah satu kategori yang telah ditentukan menggunakan pengklasifikasi SVM yang terlatih.
Langkah 1: Impor Perpustakaan yang Diperlukan
Pertama, mari siapkan lingkungan dan impor perpustakaan yang diperlukan. Kami akan menggunakan Python dengan perpustakaan populer seperti OpenCV, Scikit-learn, dan NumPy.
import cv2 import numpy as np from sklearn import svm from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, accuracy_score
Langkah 2: Muat Gambar
Langkah pertama dalam proses segmentasi adalah memuat gambar yang ingin disegmentasi. Anda dapat menggunakan OpenCV untuk memuat gambar dan mengonversinya ke format yang sesuai untuk segmentasi.
# Load the image image = cv2.imread('your_image.jpg') # Convert to grayscale for simplicity (you can also work with color channels if needed) gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Pemrosesan awal (Opsional)
Dalam beberapa kasus, ada baiknya menerapkan beberapa teknik pra-pemrosesan untuk menyempurnakan gambar sebelum segmentasi. Langkah-langkah pra-pemrosesan yang umum mencakup penghalusan, pengurangan noise, dan pemerataan histogram.
# Optional: Apply GaussianBlur to reduce noise blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
Langkah 3: Ekstraksi Fitur
Dalam segmentasi citra berbasis SVM, tugas selanjutnya adalah mengekstrak fitur-fitur relevan dari citra yang dapat digunakan untuk mengklasifikasikan setiap piksel. Fitur umum mencakup intensitas piksel, tekstur, dan histogram warna. Untuk mempermudah, kita akan mulai dengan intensitas piksel sebagai fitur.
# Flatten the image to create a feature vector for each pixel features = gray_image.flatten() # Using grayscale intensity as a feature
Untuk gambar berwarna, Anda mungkin ingin menggunakan histogram warna (nilai RGB atau HSV), atau fitur lebih lanjut seperti Pola Biner Lokal (LBP) untuk tekstur.
Langkah 4: Tentukan Label
Untuk pembelajaran yang diawasi, kita memerlukan data berlabel. Biasanya, dalam segmentasi gambar, hal ini melibatkan pelabelan setiap piksel dalam gambar. Anda dapat memberi label secara manual pada subkumpulan gambar atau menggunakan kebenaran dasar yang ada (jika tersedia). Label dapat berupa biner (latar depan vs. latar belakang) atau kelas jamak (banyak objek).

Untuk mempermudah, anggaplah kita telah memberi label piksel secara manual:
# Manually define labels (0 for background, 1 for object) labels = np.array([0, 1, 1, 0, 1, 0]) # Example, label values for each pixel
Jika Anda memiliki label kebenaran dasar dalam bentuk gambar, Anda dapat menggunakannya secara langsung.
Langkah 5: Latih Pengklasifikasi SVM
Setelah Anda memiliki fitur dan label, langkah selanjutnya adalah membagi data menjadi set pelatihan dan pengujian serta melatih pengklasifikasi SVM.
# Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42) # Initialize the SVM classifier (using a linear kernel as an example) svm_classifier = svm.SVC(kernel='linear') # Train the SVM model svm_classifier.fit(X_train.reshape(-1, 1), y_train)
Langkah 6: Evaluasi Model
Setelah melatih model, penting untuk mengevaluasi performanya menggunakan set pengujian. Ini akan membantu Anda menilai kemampuan pengklasifikasi untuk mengelompokkan gambar dengan benar.
# Predict using the test set y_pred = svm_classifier.predict(X_test.reshape(-1, 1)) # Evaluate the classifier performance print(classification_report(y_test, y_pred)) print(f'Accuracy: {accuracy_score(y_test, y_pred)}')
Langkah 7: Terapkan Model SVM Terlatih untuk Segmentasi
Setelah pengklasifikasi SVM dilatih dan dievaluasi, kita dapat menggunakannya untuk memprediksi label untuk setiap piksel pada gambar asli dan menghasilkan gambar tersegmentasi.
# Predict labels for the entire image segmented_image = svm_classifier.predict(features.reshape(-1, 1)) # Reshape the result back to the original image shape segmented_image = segmented_image.reshape(gray_image.shape) # Display the segmented image cv2.imshow('Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
Gambar yang tersegmentasi akan menampilkan wilayah gambar yang berbeda berdasarkan klasifikasi SVM. Anda dapat memvisualisasikan hasil segmentasi, dimana setiap kelas biasanya diwakili oleh warna atau label yang unik.
Langkah 8: Pasca-pemrosesan (Opsional)
Dalam beberapa kasus, teknik pasca-pemrosesan seperti operasi morfologi (misalnya erosi, pelebaran) dapat membantu membersihkan wilayah yang tersegmentasi dan menghilangkan artefak kecil.
# Apply morphological operations to improve segmentation (optional) kernel = np.ones((5, 5), np.uint8) segmented_image = cv2.dilate(segmented_image, kernel, iterations=1) segmented_image = cv2.erode(segmented_image, kernel, iterations=1) # Display final segmented image cv2.imshow('Final Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
Kesimpulan
Menggunakan SVM untuk segmentasi gambar memberikan cara yang efektif untuk mengklasifikasikan piksel gambar ke dalam kategori yang berbeda. Dengan mengikuti langkah-langkah berikut — mulai dari memuat gambar hingga menerapkan model SVM terlatih untuk segmentasi — Anda dapat mengelompokkan gambar berdasarkan fitur piksel. Meskipun panduan ini menggunakan fitur intensitas skala abu-abu dasar, Anda dapat meningkatkan kinerja dengan menggabungkan fitur yang lebih canggih seperti histogram warna, tekstur, atau metode berbasis pembelajaran mendalam untuk ekstraksi fitur.
Metode SVM untuk segmentasi gambar bersifat serbaguna dan dapat diterapkan pada berbagai kasus penggunaan, termasuk pencitraan medis, mengemudi otonom, dan analisis citra satelit, sehingga memberikan hasil segmentasi yang akurat dan efisien.