2014-12-29 4 views
1

У меня есть Image<Gray, Byte>, и я хочу вычислить матрицу ковариации для изображения.EmguCV: Как создать матрицу ковариации из изображения?

Поэтому я использую функцию CvInvoke.cvCalcCovarMatrix(imageptr, 2, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

Вот мой код:

 Image<Gray, Byte> image_gray = _image.Convert<Gray, Byte>(); 
     Matrix<float> cov = new Matrix<float>(image_gray.Rows, image_gray.Cols); 
     Matrix<float> avg = new Matrix<float>(image_gray.Cols, 1); 
     Matrix<float>[] input = new Matrix<float>[image_gray.Rows]; 
     float[] temp = new float[image_gray.Rows]; 


     for (int j = 0; j <image_gray.Rows; j++) 
     { 
      for (int i = 0; i < image_gray.Cols; i++) 
      { 
       temp[i] = (float)image_gray[j, i].Intensity; 

      } 

      input[j] =new Matrix<float>(temp); 
     } 

     IntPtr[] imageptr = Array.ConvertAll<Matrix<Single>, IntPtr>(input, delegate(Matrix<Single> mat) { return mat.Ptr; }); 
     CvInvoke.cvCalcCovarMatrix(imageptr, 2, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL); 

Проблема заключается в том, что результат ковариации матричных элементов всегда нуль.

ответ

0

Ошибка была второй параметр cvCalcCovarMatrix(imageptr,count, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

Correct является:

cvCalcCovarMatrix(imageptr, image_gray.Cols, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

Смежные вопросы