我有一张 4 channel HSVL 图像 - 色调、饱和度、值( float )、标签(无符号整数)。 任务是为每个唯一标签计算一系列色调、饱和度和值的总和。例如,我将能够访问输出 Sum[of pixels with label 455] = { Hue: 500, Sat: 100, Val: 200 }。图像大小约为 5 MP,并且有大约 3000 个不同的标签。
我的想法是对图像的部分进行约 32 次扫描,这将产生 32 x nLabels 总和。然后我可以扫描图像的 32 个分区,得到 nLabel 总和结构。
“按键扫描”吗?是否存在可以解决此类问题的算法?
最佳答案
如果您想通过 CUDA 执行此操作,以下内容可能会有所帮助。
因为你只需要求和值,我认为你需要的是“按键减少”。 Thrust 提供了一个实现 thrust::reduce_by_key()
这可以满足您的需求。
但在使用它之前,您必须按标签对所有像素进行排序。这可以通过 thrust::sort_by_key()
来完成
您可能还对 thrust::zip_iterator
感兴趣, 它可以将 3 channel 的 HSV 压缩到一个单一的值迭代器中进行排序和归约。
关于c++ - 按键多次扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314520/