在C ++中拟合2d高斯函数太慢了

时间:2014-07-07 17:46:47

标签: c++ opencv optimization nlopt

我试图将二维高斯函数拟合到一个图像(使用cv :: Mat格式),并且我正在使用NLopt库。

我把我的对象功能放在这样:

for(i for each row)
    for(j for each col)
    {
        //compute the gauss function value
        double valuenow=x[0]*exp(-( x[3]*(j-x[1])*(j-x[1]) + 2*x[4]*(j-x[1])*(i-x[2]) + x[5]*(i-x[2])*(i-x[2]) ));
        //add square residual to result
        result+=(valuenow-fitdata.at<double>(i,j))*(valuenow-fitdata.at<double>(i,j));
    }
return result;

我的矩阵大小约为1000 * 1000,我使用的是LN_COBYLA算法。当我跑步时,结果非常慢。我认为指定对象函数的方式肯定有问题,因为我曾经在matlab中用lsqnonlinear做同样的事情,它在一秒内返回。

是的,有人能帮帮我吗?提前致谢。

1 个答案:

答案 0 :(得分:3)

at<>()功能很慢。如果速度至关重要,那么在循环中使用它并不是一个好主意。在循环外部取一个指针,然后在循环中使用该指针。

相关问题: OpenCV Mat array access, which way is the fastest for and why?