Algorithm 确定图像是否与目标图像大致相似
我试图为下面的问题想出一个快速算法 给定一个目标图像G以及两个图像a和B,确定a或B中哪一个与G更相似。请注意,图像a、B和G的维度都相同 更相似的是,我的意思是它看起来更像图像G 对算法有什么想法吗?我在Objective-C中这样做,并且能够扫描图像A、B和G中的每个像素Algorithm 确定图像是否与目标图像大致相似,algorithm,image,Algorithm,Image,我试图为下面的问题想出一个快速算法 给定一个目标图像G以及两个图像a和B,确定a或B中哪一个与G更相似。请注意,图像a、B和G的维度都相同 更相似的是,我的意思是它看起来更像图像G 对算法有什么想法吗?我在Objective-C中这样做,并且能够扫描图像A、B和G中的每个像素 我实现了以下功能:扫描每个像素,确定A到G和B到G的红色、绿色和蓝色值的绝对误差。误差较小的像素更相似。它工作正常,但速度非常慢。我建议您签出,这是一个图像处理库。我不认为它有Objective-C支持,但我认为它是一个比
我实现了以下功能:扫描每个像素,确定A到G和B到G的红色、绿色和蓝色值的绝对误差。误差较小的像素更相似。它工作正常,但速度非常慢。我建议您签出,这是一个图像处理库。我不认为它有Objective-C支持,但我认为它是一个比编写自己的算法更好的起点。通常最好不要重新发明轮子,除非你是为了个人练习。不可能比
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算法(尺度不变特征变换)。正如你刚才提到的,你想找出哪个图像更接近目标图像,那么我想这是最好的算法。它基本上提取图像的不变特征(不随发光强度、比例、透视等变化而变化的特征),然后创建这些特征向量。然后您可以使用此特征向量将其与其他图像进行比较。您可以查看和以供进一步参考。 理想情况下,有一些计算机视觉库可以使事情变得更简单(我想如果没有任何计算机视觉库,在objective C中读写图像可能会很困难)。(开源计算机视觉库)最适合这样的东西。它有许多内置功能来处理图像/视频的常见内容。
希望这能有所帮助:)我发现,最好的办法是做以下事情 首先,反转图像上的所有像素,使其与图像相反。这是最不相似的图像
然后,要将图像与目标图像进行比较,请计算它与最不相似的图像的距离。如果距离更远,则图像效果更好。图像a、B、G的尺寸相同,“看起来更像”,如“在人眼看来”?我建议使用结构相似性指数。我实现了这个,并决定只检查一些随机点。但是您如何定义“异类”?我提到了
dissimilar()
,以表示正在比较的两幅图像的RBG值的绝对误差,正如您所做的那样。