У меня проблемы с реализацией поворота изображения в CUDA.У меня есть очень простая функция поворота, которая работает следующим образом:
__device__ float readPixVal( float* ImgSrc,int ImgWidth,int x,int y)
{
return (float)ImgSrc[y*ImgWidth+x];
}
__device__ void putPixVal( float* ImgSrc,int ImgWidth,int x,int y, float floatVal)
{
ImgSrc[y*ImgWidth+x] = floatVal;
}
__global__ void Rotate(float* Source, float* Destination, int sizeX, int sizeY, float deg)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;// Kernel definition
int j = blockIdx.y * blockDim.y + threadIdx.y;
if(i < sizeX && j < sizeY)
{
putPixVal(Destination, sizeX, ((float)i)*cos(deg) - ((float)j)*sin(deg), ((float)i)*sin(deg) + ((float)j)*cos(deg)), readPixVal(Source, sizeX, i, j));
}
}
Проблема в том, что я не знаю, как сделать какую-либо интерполяцию.С учетом вышеизложенного многие пиксели пропускаются из-за округления целого числа.Кто-нибудь знает, как это исправить, или есть какие-либо бесплатные / открытые реализации поворота изображения?Я не смог найти ни одного для CUDA.