确定图像是否或多或少类似于进球图像



我正在尝试为以下问题想出一个快速算法。

给定一个目标图像G以及两个图像a和B,确定a和B中哪一个更类似于G。注意,图像a、B和G都是相同的维度。

更相似的是,我的意思是它看起来更像图像G。

有算法的想法吗?我在Objective-C中这样做,并且能够扫描图像A、B和G中的每个像素。

我实现了以下操作:扫描每个像素,确定A到G以及B到G的红色、绿色和蓝色值的绝对误差。误差较小的像素更相似。它工作正常,但速度极其缓慢。

不可能比X*Y做得更好,其中X、Y是图像尺寸。因为你需要扫描输入的每个像素。

然而,你可以尝试的一种技术是扫描图像中的随机像素并找出差异。一旦你看到一个与A或B非常相似或不同的图像,你就可以停下来。

# X, Y are the dimensions
sim_A = 0
sim_B = 0
while( abs(sim_A - sim_B) > MAX_DISSIMILARITY):
    rand_x = random(X)
    rand_y = random(Y)
    sim_A += dissimilar(img_G, img_A, rand_X, rand_Y)
    sim_B += dissimilar(img_G, img_B, rand_X, rand_Y)

您可以尝试使用SIFT算法(比例不变特征变换)。正如你刚才提到的,你想找到哪幅图像更像进球图像,那么我想这是最好的算法。它基本上提取图像的不变特征(不随发光强度、比例、视角等变化而变化的特征),然后创建这些特征的特征向量。然后可以使用此特征向量将其与其他图像进行比较。你可以检查这个和这个以供进一步参考。理想情况下,有一些计算机视觉库可以让事情变得更简单(我想如果没有任何计算机视觉库,在目标C中读取和写入图像可能会很困难)。OpenCV(开源计算机视觉库)最适合这样的东西。它有许多内置功能来处理图像/视频中的常见内容。希望这有帮助:)

我建议您查看OpenCV,它是一个图像处理库。我不认为它支持Objective-C,但我认为这是一个比编写自己的算法更好的起点。通常最好不要重新发明轮子,除非你是为了个人练习。

我发现,最好的方法是执行以下操作。

首先,反转图像上的所有像素,使图像相反。这是最不一样的图像。

然后,为了将图像与目标图像进行比较,计算它与最不相似的图像相距多远。如果它离得更远,它是一个更好的图像。

最新更新