public static void Sobel(cudaTextureObject_t texObj, float[] output, int width, int height) //make output to be a surface
        {
            for (int i = threadIdx.y + blockIdx.y * blockDim.y; i < height; i += blockDim.y * gridDim.y)
            {
                for (int j = threadIdx.x + blockIdx.x * blockDim.x; j < width; j += blockDim.x * gridDim.x)
                {
                    int pixelId = i * width + j;
                    if (i != 0 && j != 0 && i != height - 1 && j != width - 1)
                    {
                        float tl = TextureHelpers.tex2D(texObj, j - 1.0F, i - 1.0F);
                        float t  = TextureHelpers.tex2D(texObj, j - 1.0F, i);
                        float tr = TextureHelpers.tex2D(texObj, j - 1.0F, i + 1.0F);
                        float l  = TextureHelpers.tex2D(texObj, j, i - 1.0F);
                        float r  = TextureHelpers.tex2D(texObj, j, i + 1.0F);
                        float br = TextureHelpers.tex2D(texObj, j + 1.0F, i + 1.0F);
                        float bl = TextureHelpers.tex2D(texObj, j + 1.0F, i - 1.0F);
                        float b  = TextureHelpers.tex2D(texObj, j + 1.0F, i);

                        float data = (Math.Abs((tl + 2.0F * l + bl - tr - 2.0F * r - br)) +
                                      Math.Abs((tl + 2.0F * t + tr - bl - 2.0F * b - br)));

                        if (data > 255)
                        {
                            data = 255;
                        }

                        output[pixelId] = data;
                    }
                    else
                    {
                        output[pixelId] = 0;
                    }
                }
            }
        }
        public static void Sobel(cudaTextureObject_t texObj, cudaSurfaceObject_t surfObj, int width, int height)
        {
            for (int i = threadIdx.y + blockIdx.y * blockDim.y; i < height; i += blockDim.y * gridDim.y)
            {
                for (int j = threadIdx.x + blockIdx.x * blockDim.x; j < width; j += blockDim.x * gridDim.x)
                {
                    int pixelId = i * width + j;
                    if (i != 0 && j != 0 && i != height - 1 && j != width - 1)
                    {
                        float tl = TextureHelpers.tex2D(texObj, j - 1.0F, i - 1.0F);
                        float t  = TextureHelpers.tex2D(texObj, j - 1.0F, i);
                        float tr = TextureHelpers.tex2D(texObj, j - 1.0F, i + 1.0F);
                        float l  = TextureHelpers.tex2D(texObj, j, i - 1.0F);
                        float r  = TextureHelpers.tex2D(texObj, j, i + 1.0F);
                        float br = TextureHelpers.tex2D(texObj, j + 1.0F, i + 1.0F);
                        float bl = TextureHelpers.tex2D(texObj, j + 1.0F, i - 1.0F);
                        float b  = TextureHelpers.tex2D(texObj, j + 1.0F, i);

                        float data = (Math.Abs((tl + 2.0F * l + bl - tr - 2.0F * r - br)) +
                                      Math.Abs((tl + 2.0F * t + tr - bl - 2.0F * b - br)));

                        if (data > 255)
                        {
                            data = 255;
                        }

                        TextureHelpers.surf2Dwrite(data, surfObj, j * sizeof(float), i);
                    }
                    else
                    {
                        TextureHelpers.surf2Dwrite(0.0F, surfObj, j * sizeof(float), i);
                    }
                }
            }
        }
Esempio n. 3
0
        public static void Sobel(cudaTextureObject_t texObj, cudaSurfaceObject_t surfObj, int width, int height)
        {
            float ii, jj;

            for (int i = threadIdx.y + blockIdx.y * blockDim.y; i < height; i += blockDim.y * gridDim.y)
            {
                ii = (float)i;
                for (int j = threadIdx.x + blockIdx.x * blockDim.x; j < width; j += blockDim.x * gridDim.x)
                {
                    if (i != 0 && j != 0 && i != height - 1 && j != width - 1)
                    {
                        jj = (float)j;
                        float tl = TextureHelpers.tex2D(texObj, jj - 1.0F, ii - 1.0F);
                        float t  = TextureHelpers.tex2D(texObj, jj - 1.0F, ii);
                        float tr = TextureHelpers.tex2D(texObj, jj - 1.0F, ii + 1.0F);
                        float l  = TextureHelpers.tex2D(texObj, jj, ii - 1.0F);
                        float r  = TextureHelpers.tex2D(texObj, jj, ii + 1.0F);
                        float br = TextureHelpers.tex2D(texObj, jj + 1.0F, ii + 1.0F);
                        float bl = TextureHelpers.tex2D(texObj, jj + 1.0F, ii - 1.0F);
                        float b  = TextureHelpers.tex2D(texObj, jj + 1.0F, ii);

                        float data = fabsf((tl + 2.0F * l + bl - tr - 2.0F * r - br)) +
                                     fabsf((tl + 2.0F * t + tr - bl - 2.0F * b - br));

                        if (data > 255.0F)
                        {
                            data = 255.0F;
                        }

                        TextureHelpers.surf2Dwrite(data, surfObj, j * sizeof(int), i);
                    }
                    else
                    {
                        TextureHelpers.surf2Dwrite(0.0F, surfObj, j * sizeof(int), i);
                    }
                }
            }
        }
 public static float tex2D(cudaTextureObject_t texObj, float x, float y)
 {
     return(0.0F);
 }