SVM ile Görüntü Segmentasyonu Nasıl Oluşturulur: Adım Adım Kılavuz
Yayınlanan: 2024-12-05Görüntü segmentasyonu, bir görüntünün renk, doku veya yoğunluk gibi ortak özellikleri paylaşan bölgelere veya bölümlere ayrıldığı bilgisayarlı görmede önemli bir görevdir. Bu segmentasyon işlemi tıbbi görüntüleme, nesne tespiti ve uydu görüntüsü analizi dahil olmak üzere çeşitli alanlarda faydalıdır. Görüntü segmentasyonu için güçlü araçlardan biri Destek Vektör Makinesidir (SVM). Bu adım adım kılavuzda, SVM kullanarak görüntü segmentasyon modelinin nasıl oluşturulacağı konusunda size yol göstereceğiz.
Destek Vektör Makinesi (SVM) Nedir?
Destek Vektör Makineleri (SVM), sınıflandırma ve regresyon görevleri için yaygın olarak kullanılan denetimli makine öğrenme algoritmalarıdır. Görüntü segmentasyonunda SVM, bir görüntünün her pikselini renk, yoğunluk veya doku gibi piksel özelliklerine dayalı olarak farklı sınıflara (örneğin ön plan, arka plan veya farklı nesneler) sınıflandırabilir.
SVM, farklı sınıflar arasındaki marjı maksimuma çıkaran optimal hiperdüzlemi bularak çalışır. Görüntü segmentasyonu durumunda amaç, eğitimli bir SVM sınıflandırıcısı kullanılarak görüntüdeki her pikseli önceden tanımlanmış kategorilerden birinde sınıflandırmaktır.
1. Adım: Gerekli Kitaplıkları İçe Aktarın
Öncelikle ortamı ayarlayalım ve gerekli kütüphaneleri içe aktaralım. Python'u OpenCV, Scikit-learn ve NumPy gibi popüler kütüphanelerle kullanacağız.
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
2. Adım: Görüntüyü Yükleyin
Segmentasyon işleminin ilk adımı, segmente etmek istediğiniz görüntüyü yüklemektir. Görüntüyü yüklemek ve segmentasyon için uygun formata dönüştürmek için OpenCV'yi kullanabilirsiniz.
# 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)
Ön İşleme (İsteğe Bağlı)
Bazı durumlarda, segmentasyondan önce görüntüyü geliştirmek için bazı ön işleme tekniklerinin uygulanması faydalı olabilir. Yaygın ön işleme adımları arasında yumuşatma, gürültü azaltma ve histogram eşitleme yer alır.
# Optional: Apply GaussianBlur to reduce noise blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
Adım 3: Özellik Çıkarma
SVM tabanlı görüntü segmentasyonunda bir sonraki görev, her pikseli sınıflandırmak için kullanılabilecek ilgili özellikleri görüntüden çıkarmaktır. Ortak özellikler arasında piksel yoğunluğu, doku ve renk histogramları bulunur. Basit olması açısından özellik olarak piksel yoğunluğuyla başlayacağız.
# Flatten the image to create a feature vector for each pixel features = gray_image.flatten() # Using grayscale intensity as a feature
Renkli görüntülerde doku için renkli histogramları (RGB veya HSV değerleri) veya Yerel İkili Desenler (LBP) gibi daha gelişmiş özellikleri kullanmak isteyebilirsiniz.
Adım 4: Etiketleri Tanımlayın
Denetimli öğrenme için etiketlenmiş verilere ihtiyacımız var. Tipik olarak görüntü segmentasyonunda bu, görüntüdeki her pikselin etiketlenmesini içerir. Görüntünün bir alt kümesini manuel olarak etiketleyebilir veya mevcut bir temel gerçeği (varsa) kullanabilirsiniz. Etiketler ikili (ön plan ve arka plan) veya çok sınıflı (birden çok nesne) olabilir.
Basit olması açısından pikselleri manuel olarak etiketlediğimizi varsayalım:
# Manually define labels (0 for background, 1 for object) labels = np.array([0, 1, 1, 0, 1, 0]) # Example, label values for each pixel
Resim biçiminde kesin doğruluk etiketleriniz varsa bunları doğrudan kullanabilirsiniz.
Adım 5: SVM Sınıflandırıcısını Eğitin
Özellikleri ve etiketleri edindikten sonraki adım, verileri eğitim ve test setlerine bölerek SVM sınıflandırıcısını eğitmektir.
# 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)
Adım 6: Model Değerlendirmesi
Modeli eğittikten sonra test setini kullanarak performansını değerlendirmek çok önemlidir. Bu, sınıflandırıcının görüntüyü doğru şekilde bölümlendirme yeteneğini değerlendirmenize yardımcı olacaktır.
# 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)}')
Adım 7: Segmentasyon için Eğitimli SVM Modelini Uygulayın
SVM sınıflandırıcısı eğitilip değerlendirildikten sonra, onu orijinal görüntüdeki her pikselin etiketlerini tahmin etmek ve bölümlere ayrılmış görüntüyü oluşturmak için kullanabiliriz.
# 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()
Bölümlere ayrılmış görüntü, SVM'nin sınıflandırmasına bağlı olarak görüntünün farklı bölgelerini gösterecektir. Her sınıfın tipik olarak benzersiz bir renk veya etiketle temsil edildiği segmentasyon sonucunu görselleştirebilirsiniz.
Adım 8: İşlem sonrası (İsteğe bağlı)
Bazı durumlarda, morfolojik işlemler (örneğin erozyon, genişleme) gibi işlem sonrası teknikler, bölümlere ayrılmış bölgelerin temizlenmesine ve küçük artefaktların giderilmesine yardımcı olabilir.
# 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()
Çözüm
Görüntü segmentasyonu için SVM'nin kullanılması, görüntü piksellerini farklı kategorilere ayırmanın etkili bir yolunu sağlar. Görüntünün yüklenmesinden segmentasyon için eğitilmiş SVM modelinin uygulanmasına kadar olan bu adımları izleyerek, görüntüleri piksel özelliklerine göre bölümlere ayırabilirsiniz. Bu kılavuzda temel gri tonlama yoğunluğu özellikleri kullanılmış olsa da, özellik çıkarma için renk histogramları, doku veya derin öğrenmeye dayalı yöntemler gibi daha karmaşık özellikleri birleştirerek performansı artırabilirsiniz.
Görüntü segmentasyonuna yönelik SVM yöntemi çok yönlüdür ve tıbbi görüntüleme, otonom sürüş ve uydu görüntüsü analizi dahil olmak üzere çeşitli kullanım durumlarına uygulanarak doğru ve verimli segmentasyon sonuçları sağlanabilir.