我尝试使用Eigenfaces做this面部识别示例。并且无法理解这些函数 subspaceProject()和 subspaceReconstruct()实际上是做什么的。我试图在http://docs.opencv.org/上搜索,但没有任何描述链接。
你能解释一下这部分代码实际上是做什么的吗?
Mat evs = Mat(W, Range::all(), Range(0, num_components));
Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1));
Mat reconstruction = subspaceReconstruct(evs, mean, projection);
// Normalize the result:
reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows));
我的意思是这些功能做什么,他们返回什么样的cv :: Mat?
答案 0 :(得分:1)
subspaceProject()
基本上可以减少维数。
projection = (images[0] - mean) * evs
减去均值可确保图像接近子空间。 推测evs是截断的右奇异向量。
和subspaceReconstruct()
reconstruction = projection * transpose(evs) + mean
重建只是投影的反面,除了因为evs被截断,它不可能是完美的。
请参阅PCA