OpenCV ile PCA (Temel Bileşenler Analizi)
Bu yazı temel bileşenler analizinin OpenCV/C++ ile kodlanması üzerinedir. Temel bileşenler analizi hakkında detaylı teorik bilgi için tıklayınız.
Son zamanlarda en çok kullandığım yöntem Temel Bileşenler Analizi olabilir! MATLAB ve Python ile yapılan kodlamaları paylaşmıştım. Bugün C++ ile yazmam gerekiyordu. OpenCV'nin içinde olduğunu öğrenince ve kolaylıkla kullanıverince çok iyi oldu. Buradaki dokümantasyon bölümünde anlatılmış. Henüz Python'a port etmemişler, yeni OpenCV'nin C++ kısmında mevcut. Dokümantasyondaki örnek kod gayet anlaşılır:
PCA compressPCA(const Mat& pcaset, int maxComponents, const Mat& testset, Mat& compressed) { PCA pca(pcaset, // veri Mat(), // önceden hesaplanmış bir ortalama vektörümüz yok, // o halde PCA sınıfımız onu hesaplasın CV_PCA_DATA_AS_ROW, // vektörlerin matrisin satırlarında olduğunu bildir // (sütunlarda olursa CV_PCA_DATA_AS_COL kullanın maxComponents // en çok kaç tane temel bileşen olduğunu ver ); // eğer test verisi yoksa, hesaplanan baz vektörleri kullanım için döndür if( !testset.data ) return pca; CV_Assert( testset.cols == pcaset.cols ); compressed.create(testset.rows, maxComponents, testset.type()); Mat reconstructed; for( int i = 0; i < testset.rows; i++ ) { Mat vec = testset.row(i), coeffs = compressed.row(i); // vektörü sıkıştır. Sonuç çıktı matrisinin i. satırına yazılacak pca.project(vec, coeffs); // ve sonra geri oluştur pca.backProject(coeffs, reconstructed); } return pca; }
PCA ile ilgili teorik bilgi için Google'a başvurabilirsiniz. Jonathon Shlens'in anlatımı çok güzel. Yayın hakkım olmadığı için burada paylaşamıyorum.