【问题标题】:Using OpenCV's PCACompute function使用 OpenCV 的 PCACompute 功能
【发布时间】:2011-12-15 12:29:01
【问题描述】:

我正在尝试使用 OpenCV for Android 实现带有特征脸的面部识别。

我有一组训练图像,它们都是 100x100 像素的灰度图像。我目前正在使用 Highgui.imread 来读取这些图像,因此每个图像都是一个宽高为 100 的 Mat。我正在尝试使用 Core.PCACompute 函数来查找这组图像的主成分。

public static void PCACompute(Mat data, Mat mean, Mat eigenvectors, int maxComponents)

所以我的问题是:第一个参数(Mat 数据)需要具有哪些维度?即使 data 只是一个 Mat,是否可以将一组多个图像传递给它?

还是我做错了,这不是用于特征脸的正确功能?我见过的一个教程使用了一个名为 cvCalcEigenObjects 的 C++ 函数,但我找不到等效的 Java 方法...

【问题讨论】:

    标签: opencv


    【解决方案1】:

    该函数需要一个 Mat 作为输入。但是可以传数据like this

    1711        public void testPCAComputeMatMatMat() {
    1712            Mat data = new Mat(3, 4, CvType.CV_32F) {
    1713                {
    1714                    put(0, 0, 1, 2, 2, 4);
    1715                    put(1, 0, 2, 4, 4, 8);
    1716                    put(2, 0, 3, 6, 6, 12);
    1717                }
    1718            };
    1719            Mat mean = new Mat();
    1720            Mat vectors = new Mat();
    1721    
    1722            Core.PCACompute(data, mean, vectors);
    1723    
    1724            Mat mean_truth = new Mat(1, 4, CvType.CV_32F) {
    1725                {
    1726                    put(0, 0, 2, 4, 4, 8);
    1727                }
    1728            };
    1729            Mat vectors_truth = new Mat(3, 4, CvType.CV_32F, new Scalar(0)) {
    1730                {
    1731                    put(0, 0, 0.2, 0.4, 0.4, 0.8);
    1732                }
    1733            };
    1734            assertMatEqual(mean_truth, mean, EPS);
    1735            assertMatEqual(vectors_truth, vectors, EPS);
    1736        }
    

    要开始使用面部识别,我建议使用 doc,因为它解释了 what PCA does

    this link 提供了一些信息和源代码,用于使用图像进行简单的人脸识别进行训练。

    【讨论】:

    • 在您链接的 Cognotics 文章(第 5 部分,第 4 页)中,他们使用参数 nTrainFaces 和 faceImgArr 调用 cvCalcEigenObjects。 faceImgArr 是一个 nTrainFaces 图像数组。在 eigenfaces 的上下文中,您的代码中的 Mat 数据对象会代表三个人脸图像吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2018-10-22
    • 2017-05-21
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多