opencl _高斯核卷积

生成高斯核代码:

void GetGaussianKernel(float *gaus, const int size,const float sigma) 

  const double PI=4.0*atan(1.0); //圆周率π赋值 
  int center=size/2; 
  double sum=0; 
  for(int i=0;i<size;i++) 
  { 
         for(int j=0;j<size;j++) 
     { 
      gaus[i * size + j] =  (1/(2*PI*sigma*sigma))*exp(-((i-center)*(i-center)+(j-center)*(j-center))/(2*sigma*sigma));
      sum+= gaus[ i * size  + j]; 
     }
  } 
  for(int i=0;i<size;i++) 
  { 
   for(int j=0;j<size;j++) 
   { 
    gaus[ i  * size + j]/=sum; 
   } 
  } 
  return  ; 

高斯模糊操作:

__kernel void gaoSi_kernel(__global uchar* inputImage, __global uchar* outputImage, __global float * mode_kernel , int g_wid, int wid, int hig )
{


 int dx = get_global_id(0);
 int dy = get_global_id(1);


 uchar sum[3]= {0};
 int i = 0;
 int j = 0;
 float temp = 0.0f;
 

 for(i= -g_wid / 2; i <= g_wid / 2; i++ )
 {
  for(j= -g_wid / 2; j <= g_wid / 2; j++ )
  {
   sum[0] += convert_uchar(mode_kernel[((i + g_wid / 2) * g_wid) + (j + g_wid / 2) ] * inputImage[ 3  * ( clamp((dy + i), 0, hig - 1) * wid + clamp((dx + j), 0, wid - 1) )  + 0 ] );
   sum[1] += convert_uchar(mode_kernel[((i + g_wid / 2) * g_wid) + (j + g_wid / 2) ] * inputImage[ 3  * ( clamp((dy + i), 0, hig - 1) * wid + clamp((dx + j), 0, wid - 1) )  + 1 ] );
   sum[2] += convert_uchar(mode_kernel[((i + g_wid / 2) * g_wid) + (j + g_wid / 2) ] * inputImage[ 3  * ( clamp((dy + i), 0, hig - 1) * wid + clamp((dx + j), 0, wid - 1) )  + 2 ] );
   
  }
  
 } 
 
 outputImage[3 *(dy * wid + dx ) + 0] = sum[0];
 outputImage[3 *(dy * wid + dx ) + 1] = sum[1];
 outputImage[3 *(dy * wid + dx ) + 2] = sum[2];

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值