【问题标题】:Column-Wise Standard Deviation in OpenCVOpenCV中的列标准偏差
【发布时间】:2016-10-18 22:22:40
【问题描述】:

有没有直接的方法来计算opencv中矩阵的列标准差?类似于 Matlab 中的 std。我找到了一个平均数:

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

但是我找不到这样的标准差函数。

【问题讨论】:

标签: opencv mean


【解决方案1】:

这里是您要查找的内容的快速答案。我为每列添加了标准偏差和平均值。代码可以轻松修改为行。

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

【讨论】:

  • 这正是我目前正在做的事情。我正在寻找一个单行声明。我想我可以把它外包成一个函数,然后把它变成一个单行的东西。
  • 这似乎是列中每个元素的均值和标准差。
【解决方案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

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 2013-08-05
    • 1970-01-01
    • 2022-11-27
    • 2021-11-30
    • 2020-03-28
    • 1970-01-01
    • 2021-10-16
    • 2014-05-09
    相关资源
    最近更新 更多