使用 C++ 的 OpenCV 中的特征脸
Eigenfaces in OpenCV using C++
我写了一个代码来创建特征脸。我拍摄了 3 张不同人的图像作为输入。我已经计算了特征向量和特征值。由于只拍摄了 3 张图像,我 select 所有三个特征向量,每个大小为 36000x1,作为主成分。当我重塑特征向量以查看图像时,我只得到一个人的特征脸。其他图像几乎完全空白。
我正在从 covevec(协方差矩阵的特征向量矩阵)中提取每个特征向量
col1=covevec.col(0);
col2=covevec.col(1);
col3=covevec.col(2);
我将它们重塑如下:
if (!col1.isContinuous() && !col2.isContinuous() && !col3.isContinuous())
{
col1=col1.clone();
col2=col2.clone();
col3=col3.clone();
}
Mat final1,final2,final3;
final1=col1.reshape(0,200);
final2=col2.reshape(0,200);
final3=col3.reshape(0,200);
这是 final2 的样子:
另外两个是这样的:
我做错了什么?
您的代码看起来不错,那有什么问题吗?
DataDataData,在执行这样的计算机视觉任务时,它是如此重要。为了给自己带来优势,请使用具有相应测试数据的现成数据集 - This would work
此外,正如 berak 所说,对图像进行标准化会有帮助。在 Turk & Pentland 中(如果你还没有读过你应该读过)他们说:
Step 6.3: compute the M best eigenvectors of AAT : ui = Avi
(important: normalize ui such that ||ui|| = 1)
这意味着您的所有训练数据都将具有相同的脉络,并为您的算法提供更好的成功机会
我写了一个代码来创建特征脸。我拍摄了 3 张不同人的图像作为输入。我已经计算了特征向量和特征值。由于只拍摄了 3 张图像,我 select 所有三个特征向量,每个大小为 36000x1,作为主成分。当我重塑特征向量以查看图像时,我只得到一个人的特征脸。其他图像几乎完全空白。
我正在从 covevec(协方差矩阵的特征向量矩阵)中提取每个特征向量
col1=covevec.col(0);
col2=covevec.col(1);
col3=covevec.col(2);
我将它们重塑如下:
if (!col1.isContinuous() && !col2.isContinuous() && !col3.isContinuous())
{
col1=col1.clone();
col2=col2.clone();
col3=col3.clone();
}
Mat final1,final2,final3;
final1=col1.reshape(0,200);
final2=col2.reshape(0,200);
final3=col3.reshape(0,200);
这是 final2 的样子:
另外两个是这样的:
我做错了什么?
您的代码看起来不错,那有什么问题吗?
DataDataData,在执行这样的计算机视觉任务时,它是如此重要。为了给自己带来优势,请使用具有相应测试数据的现成数据集 - This would work
此外,正如 berak 所说,对图像进行标准化会有帮助。在 Turk & Pentland 中(如果你还没有读过你应该读过)他们说:
Step 6.3: compute the M best eigenvectors of AAT : ui = Avi
(important: normalize ui such that ||ui|| = 1)
这意味着您的所有训练数据都将具有相同的脉络,并为您的算法提供更好的成功机会