在图像中查找单独的块

时间:2016-06-13 17:59:38

标签: image-processing graphics parallel-processing compute-shader

对于一个项目我有一个不寻常的问题,我没有找到答案。

我在很大程度上依靠图像处理来构建游戏,例如每像素碰撞和非常频繁的滴答计算,我需要做的一件事就是检查图像(在这种情况下代表船只)被打破,构成不止一部分。

示例:

enter image description here

正如你所看到的那样,这艘船是分裂的(比如武器撞击),左翼现在被拆掉了。我需要确定哪些像素是分开的(例如通过将其alpha通道标记为0)。

到目前为止,我的程序图像处理部分的方法涉及DirectCompute。它可以高效工作,因为所有当前实现的功能都可以并行化 - 比如,计算图像的质心就像平均α不为0的像素的位置一样容易。

这个问题不同了。我在开始时想到的是在该位置使用驾驶舱位置(即船的核心)和洪水填充(使用α> 0作为连接),然后过滤在操作中未改变的像素。但是,此操作不可并行化(洪水填充本质上是递归的),并且在CPU端实现它会导致大量性能损失或可见滞后(降低滴答率会使分裂反应非常无响应)。

此问题是否可以并行解决,还是需要采用其他技术?任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

是否检测到它已损坏或检测到碎片 - 我认为后者基于您的描述

泛洪填充本身并不是递归的,可以通过在队列中运行它来举例说明;从这个答案开始Is there a parallel flood fill implementation?给出了基本原理,但不是如何实施;你必须思考并弄清楚如何实现它(使用“并行填充填充”进行搜索会得到很多结果)。

至于其他想法,这是连通分量分析,它基本上就像你描述为洪水填充。