2012-08-31 46 views
4

我一直在iPhone上使用GrabCut算法(在OpenCV中实现)一起玩耍。表现很可怕。即使在模拟器上运行大约800x800的图像也需要大约10-15秒的时间。在我的手机上运行几分钟,最终耗尽内存,并崩溃(iPhone 4)。我敢肯定,如果我用C语言编写我自己的算法版本,我可以做一些优化,但我感觉没有任何优化将会使它接近可用。我在一些学术论文中挖掘了一些性能指标,甚至在多核1.8 GHz的CPU上看到了30秒的运行时间。GrabCut等图像分割算法能否在iPhone GPU上运行?

所以我唯一的希望就是GPU,我完全不知道它的含义。到目前为止,我已经对OpenGL ES进行了一些基础研究,但这是一个非常深入的主题,我不想浪费数小时或数天的时间学习基本概念,以便了解我是否在使用正确的道路。

所以我的问题是双重的:

1)能像GrabCut在GPU上运行?如果是这样,我很乐意有一个“学习OpenGL ES”的起点。理想情况下,我想知道我需要特别注意哪些概念。请记住,我对OpenGL没有经验,对图像处理的经验也很少。

2)即使这种类型的算法可以在GPU上运行,我应该期待什么样的性能改进?考虑到当前运行时间大约为CPU的30秒AT BEST,看起来GPU不太可能在运行时产生足够大的影响以使算法有用。

编辑:对于算法是“有用”,我认为它将不得不在10秒或更少的时间内运行。

在此先感谢。

+0

你见过http://stackoverflow.com/questions/6328273/how-can-opengl-es-be-use-for-gpgpu-implementation? – MSalters

+0

因此,GPU上似乎可以进行“正常处理”。不幸的是,iPhone还不支持OpenCL,所以我仍然不确定从哪里开始,也不知道我可以期待什么样的性能改进。 –

+0

这是一个非常复杂的过程来决定自己实施。 GPU上的图像分割是相当多研究的主题,因此您可以从关于该主题的研究出版物开始:http://web.iiit.ac.in/~vibhavvinet/Research/。如果没有在实际硬件上的工作实现,也无法回答性能问题,因为实际上无法预测iOS GPU性能(我应该知道)。在OpenGL ES方面,您可以利用如下所示的内容:https://github.com/BradLarson/GPUImage来为您处理底层细节。 –

回答

2

看来grabcut不会从图像分辨率中受益。这意味着结果的质量并不直接取决于输入图像的质量。另一方面,性能从尺寸上受益,这意味着图像越小,执行剪切的算法越快。因此,请尝试缩小图像至300x300,应用截取,取出遮罩,将遮罩缩放至原始大小,然后将遮罩应用于原始图像以获取结果。让我知道它是否有效。

卢卡