cuda模糊与阵列

时间:2012-05-01 10:42:10

标签: cuda

我是图像处理的新手,想要根据每个像素模糊值进行模糊。有一个整数数组,它保存每个像素的模糊值,并在全局函数中使用threadid,我想更改模糊的像素值。我的图像格式是Format24bppRgb,当我想更新像素值时出现问题,我无法将整数值加载到该像素。我真的不明白结构,不知道是否可以用直接的int值更改像素而不改变Color.red Color.blue ..value。我应该将Format24bppRgb格式转换为任何其他图像吗?这是我的代码:

__global__ void Workload(Format24bppRgb* imageData, int imageWidth, int *PixelBlurAmount)
 {
int tidX = threadIdx.x + blockIdx.x * blockDim.x;
int tidY = threadIdx.y + blockIdx.y * blockDim.y;

int tid  = tidX + tidY * imageWidth; 

imageData[tid] = PixelBlurAmount[tid];
 }

和主要功能:

       int pixelBlurValue[1024*1024];

   for(int i=0; i<8; i++) 
   {
       for(int j=0; j<(1024*1024/8); j++) 
       { 
           pixelBlurValue[i*j]=i;  // VALUE
       }
   }       

   int * dev_pixValue;
   cudaMalloc(&dev_pixValue,sizeof(int)* (1024*1024));  
   cudaMemcpy(dev_pixValue,pixelBlurValue,sizeof(int) * (1024*1024)    ,cudaMemcpyHostToDevice);

   Workload<<<gridDim, blockDim>>>(
   dev_ptr_imageData,  
   imageWidth,
   dev_pixValue);

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可能已经安装了CUDA SDK中的一些示例代码,请检查。对于理论部分,它基于this technical note。请注意,大多数模糊实际上是可分离的内核,因此卷积已经存在一些快速算法(可以适应CUDA)。