Выходы MATLAB PCA и OpenCV PCA - PullRequest
       3

Выходы MATLAB PCA и OpenCV PCA

0 голосов
/ 14 января 2020

Я хочу задать вопрос, который похож на этот пост , но я думаю, что мне нужен более подробный ответ.

В MATLAB я пишу код PCA, который дает мне матрицу коэффициентов 3x3 (собственный вектор, упомянутый в документации):

 function [Ipc1, Ipc2, Ipc3] = applyPCA(I)

X = reshape(I,size(I,1)*size(I,2),size(I,3));
[l score latent] = pca(X);
Itransformed = X*coeff;

Ipc1 = reshape(Itransformed(:,1),size(I,1),size(I,2));
Ipc2 = reshape(Itransformed(:,2),size(I,1),size(I,2));
Ipc3 = reshape(Itransformed(:,3),size(I,1),size(I,2));
figure, imshow(Ipc1,[]);
figure, imshow(Ipc2,[]);
figure, imshow(Ipc3,[]);

end

Размер моего изображения 307x309x3, и я применяю PCA к каждому каналу rgb (пикселям). Я сделал тот же метод, используя OpenCV с C ++.

       cv::Mat scene = cv::imread("deneme.JPG");
   std::cout<<"scene.type(): "<<scene.type()<<std::endl;
   scene.convertTo(scene, CV_32FC3, 1/255.0);

    std::vector<cv::Mat> bgr;   //destination array
    split(scene,bgr);//split source  

    cv::Mat data(static_cast<int>(3), scene.rows * scene.cols, CV_32F);
    // Turn an image into one row vector in the data matrix
    for(unsigned int i = 0; i < bgr.size(); i++)
    {
        // Extract image as one long vector of size w x h x 3
        cv::Mat image = bgr[i].reshape(1,1);

        // Copy the long vector into one row of the destm
        image.copyTo(data.row(i));
    }

   cv::PCA pca(data, cv::Mat(), CV_PCA_DATA_AS_ROW);
   cv::Mat mean=pca.mean;                // get mean of Data in Mat form
   cv::Mat eigenvalue=pca.eigenvalues;
   cv::Mat eigenvectors=pca.eigenvectors;

, но размер собственного вектора и другие такие же

  • scene.size (): [309 x 307]
  • eigenvectors.size (): [94863 x 3]
  • eigenvalues.size (): [1 x 3]

Я что-то упустил или вы можете сказать мне, как использовать OpenCV PCA для получения матрицы коэффициентов, как я сделал с помощью MATLAB?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...