2015-01-16 154 views
1

从一串图像I,颜色平均值C_m发展而来。现在我想使用mahalanobis距离获得距离图像,其中每个像素的马氏距离计算得到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); 
     } 
    } 

结果造成: OpenCV Error: Assertion failed (type == v2.type() && type == icovar.type() && sz == v2.size() && len == icovar.rows && len == icovar.cols) in Mahalanobis, file /tmp/opencv-8GA996/opencv-2.4.9/modules/core/src/matmul.cpp,

什么是我的错吗?提前致谢!

回答

1

Mahalanobis不适用于单个像素,而是整个图像。所以请尝试:

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

好吧,所以我想我必须编写自己的函数来完成我的任务,即获取平均颜色和实际像素颜色之间的距离。我这样做是因为这是写在一篇论文中:“第二帧与第一帧建立的道路模型之间的每像素马哈拉诺比斯距离的视觉检查表明,一些颜色变换将按照 - 比其他人更好“。道路模型只包含平均颜色。 –