gpt4 book ai didi

c++ - 如何在 OpenCV 的 EM 算法中检索协方差矩阵?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:18 33 4
gpt4 key购买 nike

我尝试使用 OpenCV 的 EM 算法实现 GMM。一切正常,除了在训练模型后我无法访问协方差矩阵。尝试访问它们总是会导致访问冲突。我使用 C++ API,因为 C API 在文档中被标记为已弃用。

首先,我使用了 OpenCV 2.4.9 版。在 OpenCV 中实现 GMM 模型非常容易:

EM model (3);
Mat probs;
bool b = model.train (samples, noArray(), noArray(), probs);
Mat means = model.get<Mat>("means"); // --> correct values.
vector<Mat> sigmas = model.get<vector<Mat>>("covs"); // --> access violation.

由于之前使用其他OpenCV包也遇到过类似的版本问题,所以升级到OpenCV 3.0 Beta再试(3.0界面略有不同):

ml::EM::Params emps = ml::EM::Params::Params (3);
Mat probs;
Ptr<ml::EM> model = ml::EM::train (samples, noArray(), noArray(), probs, emps);
Mat means = model->getMeans(); // same mean values, all correct
std::vector<Mat> sigmas;
model->getCovs (sigmas); // --> access violation

现在我很困惑。我是在犯一些愚蠢的错误还是 OpenCV 中存在持续的错误?在这两种情况下,我都说服自己模型训练有素,并且概率值和均值是正确的。所以我希望协方差矩阵也是正确的,但我无法访问它们。在我切换回旧版本和 C API 之前,它在某些时候似乎有效

我犯了什么错误?

最佳答案

尝试做这样的事情gmm.getMatVector("covs")[i],其中 i 是簇。

关于c++ - 如何在 OpenCV 的 EM 算法中检索协方差矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28318920/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com