C++ 计算马氏距离

C++ 计算马氏距离,c++,opencv,C++,Opencv,从一堆图像I,一个平均颜色C\m演变而来。现在我想用马氏距离获得一个距离图像,其中每个像素到C\m的马氏距离都被计算出来。我无法让OpenCV的Mahalanobis()函数工作。 我使用I的所有像素颜色计算calcCovarMatrix,将其反转并传递给Mahalanobis()。接下来,我将在新图像上循环以计算每个像素的距离: Mat covar, incovar, mean; calcCovarMatrix(...); invert(covar,incovar,DECOMP_S

从一堆图像
I
,一个平均颜色
C\m
演变而来。现在我想用马氏距离获得一个距离图像,其中每个像素到
C\m
的马氏距离都被计算出来。我无法让OpenCV的
Mahalanobis()
函数工作。 我使用
I
的所有像素颜色计算calcCovarMatrix,将其反转并传递给
Mahalanobis()
。接下来,我将在新图像上循环以计算每个像素的距离:

  Mat covar, incovar, mean;
  calcCovarMatrix(...);
  invert(covar,incovar,DECOMP_SVD);

  for (int row = 0; row < image.rows; ++row) {
        for (int col = 0; col < image.cols; ++col) {
            Scalar color = image.at<Vec3b>(row, col);
        double m_dist = Mahalanobis(color, mean, incovar);
        }
  }
Mat-covar,incovar,平均值;
calcCovarMatrix(…);
反转(covar、incovar、反汇编SVD);
对于(int row=0;row
导致:
OpenCV错误:在Mahalanobis文件/tmp/OpenCV-8GA996/OpenCV-2.4.9/modules/core/src/matmul.cpp中断言失败(type==v2.type()&&type==icovar.type()&&sz==v2.size()&&len==icovar.rows&&len==icovar.cols)

我犯了什么错?提前谢谢

不是处理单个像素,而是处理整个图像。因此,请尝试:

double dist = Mahalanobis( image1, image2, invcovar );

好的,我想我必须编写我自己的函数来完成我的任务,得到平均颜色和实际像素颜色之间的距离。我之所以要这么做,是因为这是在一篇论文中写的:“目视检查第二帧和从第一帧构建的道路模型之间每像素的马氏距离,发现某些颜色变换的每形式比其他颜色变换更好”。其中道路模型仅由平均颜色组成。