我正在尝试将 2d 高斯函数拟合到图像(以 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 做同样的事情,它在一秒钟内返回。
有人能帮助我吗?提前致谢。