我一直在玩iPhone上的GrabCut算法(在OpenCV中实现).表现很糟糕.即使在模拟器上也需要大约10-15秒的时间才能运行大约800×800的图像.在我的手机上,它运行了几分钟,最终耗尽内存,并崩溃(iPhone 4).我敢肯定,如果我在C中编写自己的算法版本,我可以做一些优化,但我觉得没有多少优化可以让它在任何地方都可用.我在一些学术论文中挖出了一些性能测量结果,甚至他们在多核1.8 ghz CPU上看到了30秒的运行时间.
所以我唯一的希望就是GPU,我完全不知道它.到目前为止,我已经对OpenGL ES做了一些基础研究,但这是一个非常深入的主题,我不想浪费时间或几天学习基本概念,这样我就可以知道我是否在正确的道路.
所以我的问题是双重的:
1)像GrabCut这样的东西可以在GPU上运行吗?如果是这样,我希望有一个起点,而不是“学习OpenGL ES”.理想情况下,我想知道我需要特别注意哪些概念.请记住,我没有使用OpenGL的经验,也没有很少的图像处理经验.
2)即使这种算法可以在GPU上运行,我应该期待什么样的性能提升?考虑到当前的运行时间在CPU上大约30秒AT BEST,GPU似乎不太可能在运行时放大,以使算法有用.
编辑:为了使算法“有用”,我认为它必须在10秒或更短的时间内运行.
提前致谢.
最佳答案 似乎抓取不会从图像分辨率中受益.这意味着结果的质量不直接取决于输入图像的质量.另一方面,性能受益于尺寸,意味着图像越小,算法执行剪切的速度越快.因此,尝试将图像缩小到300×300,应用抓取,取出遮罩,将遮罩缩放到原始大小,然后将遮罩应用于原始图像以获得结果.如果有效,请告诉我.
卢卡