我想知道是否有更快的方法(算法或更快的高斯计算)在GPU上实现以下功能(因此代码在片段着色器中)
有两个输入:
center_x,center_y,std_x,std_y,angle
描述)我想要做的是对于网格中的每个点(x,y)
,计算所有高斯的叠加(加法)。
我现在正在做的是循环遍历网格中的所有点,并且对于每个点,我都会对所有高斯人进行评估并总结。
我使用的高斯函数如下:
highp float gaussian2DUnnormalized(highp float x,highp float y,highp float mx, highp float my,highp float stdx,highp float stdy, highp float radian) {
if (abs(stdx) < 0.00001 || abs(stdy) < 0.00001)
return 0.0;
highp float stdx2 = stdx * stdx;
highp float stdy2 = stdy * stdy;
highp float a = cos(radian) * cos(radian) / (2.0 * stdx2) + sin(radian) * sin(radian) / (2.0 * stdy2);
highp float b = sin(2.0 * radian) *( -1.0/(4.0 * stdx2) + 1.0/(4.0 * stdy2));
highp float c = sin(radian) * sin(radian) / (2.0 * stdx2) + cos(radian) * cos(radian) / (2.0 * stdy2);
highp float result = exp(-1.0* (a * (x - mx)*(x - mx) + 2.0 * b * (x - mx)*(y - my) + c * (y - my)*(y - my)));
return min(max(result,0.0),1.0);
}