尝试压缩一些图像描述符时遇到一些困难,请举例:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <opencv2/core.hpp>
int main(int argc, char *argv[])
{
// create some random descriptor 1 rows x 10 cols and populate with some data
const cv::Mat A = (cv::Mat_<float>(1,10) << 0, -1.5f, -2.f, -3.5f, -3.f, -5.f, -2.f, -2.f, 0, -1.f);
std::cout << "DESCRIPTOR A : " << std::endl << A << std::endl;
// create PCA and pass descriptor data with no mean and 6 max components
cv::PCA pca(A, cv::Mat(), CV_PCA_DATA_AS_ROW, 6);
// project A to compressed descriptor B (expecting 1 rows x 6 cols)
const cv::Mat B = pca.project(A);
std::cout << "DESCRIPTOR B : " << std::endl << B << std::endl;
return EXIT_SUCCESS;
}
输出:
DESCRIPTOR A :
[0, -1.5, -2, -3.5, -3, -5, -2, -2, 0, -1]
DESCRIPTOR B :
[0]
我得到PCA尝试转换坐标系以表示维度较小的值,这是使用所有可用的描述符完成的吗?即PCA类是否需要使用所有描述符构造?如果是这样,如果他们不知道怎么办?
注意:使用OpenCV 3.0.0 附加说明:在我的实际代码中,描述符的大小为1行x 1000列,但仍然输出[0]
答案 0 :(得分:0)
PCA找到一个旋转,将第一维中所有样本之间的最大点差放在一起。
单独使用一个样本就无法做任何有意义的事情。
我建议访问图书馆。