我正在尝试在 CUDA 中实现最大性能的圆形霍夫变换,从而边缘像素坐标在霍夫空间中投票。CHT 的伪代码如下,我使用的是 256 x 256 像素的图像大小:
int maxRadius = 100;
int minRadius = 20;
int imageWidth = 256;
int imageHeight = 256;
int houghSpace[imageWidth x imageHeight * maxRadius];
for(int radius = minRadius; radius < maxRadius; ++radius)
{
for(float theta = 0.0; theta < 180.0; ++theta)
{
xCenter = edgeCoordinateX + (radius * cos(theta));
yCenter = edgeCoordinateY + (radius * sin(theta));
houghSpace[xCenter, yCenter, radius] += 1;
}
}
我的基本想法是让每个线程块计算输出霍夫空间的(小)块(可能输出霍夫空间的每一行一个块)。因此,我需要以某种方式将输入图像的所需部分放入共享内存中,以便在特定的输出子霍夫空间中进行投票。
我的问题如下:
如何计算输入图像所需部分的坐标并将其存储在共享内存中?
如何检索以前存储在共享内存中的边缘像素的 x,y 坐标?
我是在另一个共享内存数组中投票还是直接将投票写入全局内存?
提前感谢大家的时间。我是 CUDA 的新手,我们将不胜感激地收到任何帮助。