Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 确定图像是否与目标图像大致相似_Algorithm_Image - Fatal编程技术网

Algorithm 确定图像是否与目标图像大致相似

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支持,但我认为它是一个比

我试图为下面的问题想出一个快速算法

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

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

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


我实现了以下功能:扫描每个像素,确定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值的绝对误差,正如您所做的那样。