【发布时间】:2018-04-01 03:06:54
【问题描述】:
我有一个分割图像作为唯一标签 1 ... k 的二维矩阵。例如:
img =
[1 1 2 2 2 2 2 3 3]
[1 1 1 2 2 2 2 3 3]
[1 1 2 2 2 2 3 3 3]
[1 4 4 4 2 2 2 2 3]
[4 4 4 5 5 5 2 3 3]
[4 4 4 5 5 6 6 6 6]
[4 4 5 5 5 5 6 6 6]
我正在尝试确定区域质心。也就是说,每个标签,质心的 X、Y 坐标是多少?例如,标签 1 的质心为 (1.25, 0.625)。只需平均行号 ((0 + 0 + 1 + 1 + 1 + 2 + 2 + 3) / 8 = 1.25) 和列号 ((0 + 0 + 0 + 0 + 1 + 1 + 1 + 2) / 8 = 0.625)
我知道如何做到这一点的唯一方法是使用从 1 到 k(或者在我的示例中为 1 到 6)的 for 循环,找到每个标签的点的索引,并平均它们的坐标通过索引图像的网格。
但是,我希望以一种针对 GPU 计算进行优化的方式来执行此操作。因此,for 循环的使用不太理想(对于几百个标签,在一个不错的 GPU 上,每张图像大约需要 1 秒)。我正在使用 PyTorch,但实际上任何 numpy 解决方案都应该足够了。
此任务是否有 GPU 高效的解决方案?
【问题讨论】:
标签: numpy image-processing gpu image-segmentation pytorch