2012-05-01 9 views
0

私は画像処理が初めてで、各ピクセルのぼかし値に基づいてぼかしを行いたい。グローバル関数でthreadidを使用して各ピクセルのぼかし値を保持する整数配列があり、そのピクセルを変更したい私の画像フォーマットはFormat24bppRgbであり、ピクセル値を更新したいとき、そのピクセルに整数値をロードできません。私は本当に構造を理解していなかったし、Color.red Color.blue .. valueを変更しないで直接int値でピクセルを変更することが可能かどうかわからない。私はFormat24bppRgbフォーマットを他のどのイメージにも変換する必要がありますか?ここに私のコード:cuda blur with array

__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); 

は、任意のヘルプ

+0

あなたの質問は何ですか?正確に何をしたいのか、問題を抱えているのかについて詳しくは説明していません。あなたが投稿したコードは、 'memcpy'カーネルの量だけを示しています。あなたがしようとしていることとあなたが知りたいことをより明確に説明するために質問を編集してください。 Stack Overflowには多くの有益で有益な人がいますが、彼らは心を読むことができません.... – talonmies

+0

短い説明があります。私はそれが今より明確であることを願っています。 – Ecrin

+0

'Format24bppRgb'の定義はどこですか? – harrism

答えて

1

いただきありがとうございますあなたはおそらくインストールされているCUDAのSDK内のいくつかのサンプルコードがあり、確認してください。理論的な部分については、this technical noteに基づいています。ほとんどのぼかしは実際には分離可能なカーネルであることに注意してください。したがって、既に畳み込みのためのいくつかの高速アルゴリズム(CUDAに適合させることができます)があります。

+0

ありがとうございます。私はこの方法を試して平均フィルタを使いました。しかし、私は、各ピクセルがぼかし値が何であるかを知る必要があるようにしたい(平均フィルタがすべて1であることによる)、各ピクセルをぼかしのためにその値に直接与える。私はフィルタ配列を使いたくない。ピクセルに整数値を与えることは可能ですか? – Ecrin