1

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

注意:图像是灰度的。

4

1 回答 1

1

@Ivan,这是视频压缩中的一个非常标准的问题(在前一帧中查找当前宏块的位置)。您可以使用像素差异度量,例如绝对差异之和 (SAD)、平方差异之和 (SSD) 或 Hadamard 变换差异之和 (SATD)。我假设您不是在尝试压缩视频,而是在寻找诸如水印之类的东西。在许多情况下,您可以使用梯度下降类型搜索来找到局部最小值(最佳匹配),根据经验观察,将图像(您的小图像)与相同的稍微偏移版本(匹配的位置没有'未准确找到)产生比与另一幅图像的随机部分相比更接近的度量。因此,您可以先对所有可能的偏移/位置(视频编码中的运动矢量)的空间进行粗略采样,然后围绕最佳结果进行局部优化。局部优化通过将匹配与一定数量的相邻匹配进行比较,并移动到最好的那些,如果有的话比你当前的匹配更好,重复。这比蛮力(检查每个可能的位置)快得多,但它可能并非在所有情况下都有效(这取决于匹配的性质)。不幸的是,这种算法不能很好地转化为 GPU,因为每一步都依赖于前面的步骤。它可能仍然值得;如果您检查例如 256x256 图像位置的 16 个邻居,则足以发送到 GPU 的并行计算,是的,它绝对可以在 OpenGL-ES 中完成。然而,这一切的答案真的取决于你是在做暴力搜索还是局部最小化类型搜索,

于 2012-11-17T01:26:15.503 回答