简体   繁体   English

EmguCV:如何从图像创建协方差矩阵?

[英]EmguCV: How to create a covariation matrix from image?

I have an Image<Gray, Byte> and i want to calculate the covariance matrix for the image. 我有一个Image<Gray, Byte> ,我想计算图像的协方差矩阵。

Therefore i use the function CvInvoke.cvCalcCovarMatrix(imageptr, 2, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL); 因此我使用函数CvInvoke.cvCalcCovarMatrix(imageptr, 2, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

Here my code: 这是我的代码:

       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);

The problem is, that the result of the covariance matrix elements are always null. 问题在于,协方差矩阵元素的结果始终为空。

The mistake was the 2nd parameter of cvCalcCovarMatrix(imageptr,count, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL); 错误是cvCalcCovarMatrix(imageptr,count, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);的第二个参数cvCalcCovarMatrix(imageptr,count, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

Correct is: 正确的是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM