580
社区成员
发帖
与我相关
我的任务
分享
__global__ void CountGrad(int nrow,int ncol, double *pic, double *grad, int *orient)
{
int x = threadIdx.x+blockIdx.x*blockDim.x;
int y = threadIdx.y+blockIdx.y*blockDim.y;
int pos = y+x*ncol;
if(x>0&&x<nrow-1&&y>0&&y<ncol-1){
double diff1=pic[pos+ncol]-pic[pos-ncol];
double diff2=pic[pos+1]-pic[pos-1];
grad[pos]=sqrt(diff1*diff1+diff2*diff2);
orient[pos]=Round(atan2(diff1,diff2)/PI_4)+4;
if(orient[pos]>=8) orient[pos]=0;
}
}
// Launch a kernel on the GPU with one thread for each element.
dim3 dimBlock(BLOCK_SIZE,BLOCK_SIZE);
dim3 dimGrid((greyPic.nrow/dimBlock.x)+1,(greyPic.ncol/dimBlock.y)+1);
CountGrad<<<dimGrid,dimBlock>>>(greyPic.nrow,greyPic.ncol,dev_pic,dev_grad, dev_orient);