c++ - 按键多次扫描

标签 c++ cuda

我有一张 4 channel HSVL 图像 - 色调、饱和度、值( float )、标签(无符号整数)。 任务是为每个唯一标签计算一系列色调、饱和度和值的总和。例如,我将能够访问输出 Sum[of pixels with label 455] = { Hue: 500, Sat: 100, Val: 200 }。图像大小约为 5 MP,并且有大约 3000 个不同的标签。

我的想法是对图像的部分进行约 32 次扫描,这将产生 32 x nLabels 总和。然后我可以扫描图像的 32 个分区,得到 nL​​abel 总和结构。

“按键扫描”吗?是否存在可以解决此类问题的算法?

最佳答案

如果您想通过 CUDA 执行此操作,以下内容可能会有所帮助。

因为你只需要求和值,我认为你需要的是“按键减少”。 Thrust 提供了一个实现 thrust::reduce_by_key()这可以满足您的需求。

但在使用它之前,您必须按标签对所有像素进行排序。这可以通过 thrust::sort_by_key() 来完成

您可能还对 thrust::zip_iterator 感兴趣, 它可以将 3 channel 的 HSV 压缩到一个单一的值迭代器中进行排序和归约。

关于c++ - 按键多次扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314520/

相关文章:

c++ - 每次我想在基本类型之间进行转换时,我真的应该使用 static_cast 吗?

c++ - 使用 Stream Builder 查询字符串

Cuda block /网格尺寸: when to use dim3?

cuda - 如何编译PTX代码

cuda - 让 Theano 使用 GPU 和所有 CPU 内核(同时)

c++ - Qt 中的 Tab 键顺序

c++通过csv文件和最后一列进行解析

c++ - 当变量是局部变量时是否需要删除?

c++ - 将二维数组从 C++ 类传递给 CUDA 函数

c++ - 如何将四面体树结构复制到CUDA设备内存?