硬件加速图像比较/搜索?

时间:2012-11-16 13:25:04

标签: iphone ios image-processing opengl-es

我需要在较大的图像中找到较小图像的位置。较小的图像是较大图像的子集。要求也是像素值可能略有不同,例如,如果图像是由不同的JPEG压缩产生的。 我通过使用CPU比较字节来实现解决方案,但我现在正在研究加速该过程的任何可能性。 我可以以某种方式利用OpenGLES和iPhone GPU吗?

注意:图像为灰度。

1 个答案:

答案 0 :(得分:1)

@Ivan,这是视频压缩中非常标准的问题(在前一帧中找到当前宏块的位置)。您可以使用度量来区分像素差异,例如abs差值之和(SAD),平方差值之和(SSD)或Hadamard变换差值之和(SATD)。我假设您不是在尝试压缩视频,而是在寻找类似水印的东西。在许多情况下,您可以使用渐变下降类型搜索来查找局部最小值(最佳匹配),在经验观察中将图像(您的小图像)与其略微偏移的版本进行比较(匹配其位置为has& #39; t确切地发现)产生比与另一图像的随机部分相比更接近的度量。因此,您可以从相当粗略地对所有可能的偏移/位置(视频编码中的运动矢量)的空间进行采样,然后围绕最佳结果进行局部优化。本地优化的工作原理是将匹配与一些相邻匹配进行比较,并且如果有任何优于当前匹配,则移动到最佳匹配,重复。这比蛮力(检查每个可能的位置)快得多,但它可能不适用于所有情况(它取决于匹配的性质)。不幸的是,这种类型的算法不能很好地转换为GPU,因为每个步骤都取决于之前的步骤。它可能还是值得的;如果您检查例如16个邻居到256x256图像的位置,这是足够的并行计算发送到GPU,是的,它绝对可以在OpenGL-ES中完成。然而,所有这些的答案实际上取决于您是否正在进行暴力破解或局部最小化类型搜索,以及本地最小化是否适合您。