gpt4 book ai didi

c++ - OpenCV col-wise 标准偏差结果与 MATLAB

转载 作者:行者123 更新时间:2023-11-30 05:00:29 26 4
gpt4 key购买 nike

我看过相关问题,但我不明白为什么 MATLAB 和 OpenCV 会给出不同的结果。

  1. MATLAB 代码

    >> A = [6 4 23 -3; 9 -10 4 11; 2 8 -5 1]
    A =
    6 4 23 -3
    9 -10 4 11
    2 8 -5 1

    >> Col_step_1 = std(A, 0, 1)
    Col_step_1 =
    3.5119 9.4516 14.2945 7.2111

    >> Col_final = std(Col_step_1)
    Col_final =
    4.5081
  2. 使用 OpenCV 和这个函数:

    double getColWiseStd(cv::Mat in)
    {
    CV_Assert( in.type() == CV_64F );

    cv::Mat meanValue, stdValue, m2, std2;
    cv::Mat colSTD(1, A.cols, CV_64F);
    cv::Mat colMEAN(1, A.cols, CV_64F);

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

    std::cout<<"\nCOLstd:\n"<<colSTD<<std::endl;
    cv::meanStdDev(colSTD, m2, std2);
    std::cout<<"\nCOLstd_f:\n"<<std2<<std::endl;


    return std2.at<double>(0,0);
    }

    应用于相同的矩阵会产生以下结果:

    Matrix: 
    [6, 4, 23, -3;
    9, -10, 4, 11;
    2, 8, -5, 1]

    COLstd:
    [2.867441755680876, 7.71722460186015, 11.67142760000773, 5.887840577551898]

    COLstd_f:
    [3.187726614989861]

我很确定 OpenCV 和 MATLAB std 函数是正确的,因此找不到我做错了什么,我是不是缺少类型转换?还有别的吗?

最佳答案

您在 OpenCV 中计算的标准差是按观察次数 (N) 归一化的,而您在 MATLAB 中计算的标准差是按 N-1 归一化的(这也是 MATLAB 中的默认归一化因子,称为 Bessel's correction )。所以有区别。

您可以通过将第二个输入参数选择为 1 在 MATLAB 中按 N 进行归一化:

Col_step_1 = std(A, 1, 1); 
Col_final = std(Col_step_1, 1);

关于c++ - OpenCV col-wise 标准偏差结果与 MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50754864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com