在OpenCV中计算列方向的标准差

6

在OpenCV中,是否有一种直接的方法来计算矩阵的列标准差,类似于Matlab中的std函数?我已经找到了一个求平均值的方法:

cv::Mat col_mean;
reduce(A, col_mean, 1, CV_REDUCE_AVG);

但是对于标准差,我找不到这样的功能。

1
请查看以下链接以了解有关数组操作的文档:http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#meanstddev - mprat
2个回答

6

以下是您寻找的内容的快速答案。我为每列添加了标准差和平均值。这段代码可以轻松修改以适用于行。

    cv::Mat A = ...; // FILL IN THE DATA FOR YOUR INPUT MATRIX
    cv::Mat meanValue, stdValue;
    cv::Mat colSTD(1, A.cols, CV_64FC1);
    cv::Mat colMEAN(1, A.cols, CV_64FC1);       

    for (int i = 0; i < A.cols; i++){           
        cv::meanStdDev(A.col(i), meanValue, stdValue);
        colSTD.at<double>(i) = stdValue.at<double>(0);
        colMEAN.at<double>(i) = meanValue.at<double>(0);
    }

这正是我目前正在做的事情。我正在寻找一个一行语句。我想我可以将其外包到一个函数中,然后将其变成一行代码。 - Armin Meisterhirn
这似乎是列中每个元素的平均值和标准差。 - Abc

2
以下内容不是单行排列的,但这是另一种没有循环的版本:
    reduce(A, meanOfEachCol, 0, CV_REDUCE_AVG); // produces single row of columnar means
    Mat repColMean; 
    cv::repeat(meanOfEachCol, rows, 1, repColMean); // repeat mean vector 'rows' times

    Mat diffMean = A - repColMean; // get difference
    Mat diffMean2 = diffMean.mul(diffMean); // per element square

    Mat varMeanF;
    cv::reduce(diffMean2, varMeanF, 0, CV_REDUCE_AVG); // sum each column's elements to get single row
    Mat stdMeanF;
    cv::sqrt(varMeanF, stdMeanF); // get standard deviation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接