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.

