优化GPU上2D高斯的加法(叠加)

时间:2014-05-07 16:18:37

标签: performance algorithm opengl opengl-es gpu

我想知道是否有更快的方法(算法或更快的高斯计算)在GPU上实现以下功能(因此代码在片段着色器中)

有两个输入:

  1. 2D网格(例如图像)。
  2. 二维高斯的数组(10~20)(每个由center_x,center_y,std_x,std_y,angle描述)
  3. 我想要做的是对于网格中的每个点(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);
     }
    

0 个答案:

没有答案