在opencv中,使用垫子类型计算马氏距离太慢了。如何提高效率?

In opencv,It's too slow by use Mat type to calculate the Mahalanobis distance. How can i improve the efficiency?

本文关键字:距离 提高效率 马氏 计算 opencv 类型      更新时间:2023-10-16
Mat imv;
Mat_<double>end(1, 1);
double distance;
Mat_<double>Point(1, 3);     
...
imv = Point.t();
end = Point*inv[m]*imv;
distance = sqrt(end(0, 0));

有变量类型的定义和Mahalanobis距离的计算过程。

我很抱歉表达不清楚。我试图遍历图像中的每个像素,计算它们与颜色模型之间的玛哈拉诺比斯距离,并且太慢了。我总是认为应该从矩阵乘法的效率中进行优化。TODAYI通过使用多线程来提高循环速度提高效率,并且很有用。

#pragma omp parallel for num_threads(6)
            for (int m = 0; m < k_num; m++) {       
                Mat_<double>end(1, 1);
                double distance = 1000;
                Mat_<double>Point(1, 3);
                 Point(0, 0) = double(data3[j * 3]) - mean1[m].at<double>(0, 0);
                Point(0, 1) = double(data3[j * 3 + 1]) - mean1[m].at<double>(0, 1);
                Point(0, 2) = double(data3[j * 3 + 2]) - mean1[m].at<double>(0, 2);
                end = Point * inv[m] * Point.t();
                distance = sqrt(end(0, 0));
                }
            }