【发布时间】:2016-01-10 10:58:09
【问题描述】:
我正在使用 OpenCV 来计算表示为 2D 点的一组像素的 PCA。但我不确定 PCA 是如何计算这些点的平均值的,因为这不是我所期望的。
如果我有以下3点(x,y):
(2,1), (2,2), (2,3)
然后我计算 PCA(使用了 OpenCvSharp,但它只是一个包装器):
Mat input = new Mat(3,2, MatType.CV_32FC1);
input.Set(0,0, 2f);
input.Set(0,1, 1f);
input.Set(1,0, 2f);
input.Set(1,1, 2f);
input.Set(2,0, 2f);
input.Set(2,1, 3f);
Mat mean = new Mat();
PCA pcaResult = new PCA(input, mean, PCA.Flags.DataAsRow);
float meanX = pcaResult.Mean.Get<float>(0,0);
float meanY = pcaResult.Mean.Get<float>(0,1);
meanX 和 meanY 分别是 (0.6666667, 0)。正如我所期望的那样,它们是(2,2)(我猜某种形式的标准化正在发生)。 PCA 平均值是如何计算的,我需要做什么来计算我期望的平均值?还是我需要将平均值传递给PCA?
【问题讨论】: