在c++中拟合二维高斯函数太慢
Fitting 2d gauss function in C++ too slow
我正在尝试将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中使用lsq非线性做同样的事情,它在一秒钟内返回。
有人能帮我一下吗?提前感谢。at<>()
函数运行缓慢。如果速度是至关重要的,那么在循环中使用速度并不是一个好主意。在循环外获取一个指针,然后在循环内使用该指针。
一个相关问题:OpenCV Mat数组访问,哪种方式是最快的,为什么?
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 中动态二维数组的访问冲突
- 在二维向量或数组中可以存储的最大元素数是多少?
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- 使用高斯核的一维卷积
- 三维数据的高斯模糊
- 在c++中拟合二维高斯函数太慢
- 带有二维数组的戴克斯特拉算法