Python 3.x 在python中比较两个图像的更有效方法

Python 3.x 在python中比较两个图像的更有效方法,python-3.x,numpy,python-imaging-library,image-comparison,Python 3.x,Numpy,Python Imaging Library,Image Comparison,我有一个任务,需要在较大的图像中指定较小图像的左上角坐标。 我实现了这段代码,但是它太慢了,因为我有20秒的时间限制,在一些数据集中我有3000个图像。如何更有效地实施这一点?我可以使用numpy、scipy和标准python库中的所有包 import numpy as np from PIL import Image map_image_path = input() map_image = Image.open(map_image_path) map_ar = np.asarray(map_

我有一个任务,需要在较大的图像中指定较小图像的左上角坐标。 我实现了这段代码,但是它太慢了,因为我有20秒的时间限制,在一些数据集中我有3000个图像。如何更有效地实施这一点?我可以使用numpy、scipy和标准python库中的所有包

import numpy as np
from PIL import Image

map_image_path = input()
map_image = Image.open(map_image_path)
map_ar = np.asarray(map_image)
map_ar_y, map_ar_x  = map_ar.shape[:2]

i = int(input())
dimensions = input()
patches=list()

for k in range(i):
  patch_image_path = input()
  patches.append(Image.open(patch_image_path))

for j in range(i):
  patch_ar = np.asarray(patches[j])
  patch_ar_y, patch_ar_x = patch_ar.shape[:2]
  stop_x = map_ar_x - patch_ar_x + 1
  stop_y = map_ar_y - patch_ar_y + 1

  for x in range(0, stop_x):
    for y in range(0, stop_y):
      x2 = x + patch_ar_x
      y2 = y + patch_ar_y
      picture = map_ar[y:y2, x:x2]
      if np.array_equal(picture, patch_ar):
        print(str(x) + "," + str(y))

这是一种锻炼吗?为什么要自己实现这个,这在其他包中已经做过很多次了。这里有一篇关于他们使用的算法的论文:它是有效的,但速度太慢了,对于4幅图像,我的执行时间大约为2.7秒。这感觉像是人为的限制,StackOverflow上允许有家庭作业问题,但大多数人,包括我在内,除了在家庭作业问题上付出更大的努力之外。你能告诉我们你试图改进算法的地方吗?我可以告诉你,问题是你已经为你的问题创建了一个O(n^3)-ish算法:你为数组中的每个像素构建一个大数组,然后必须将每个像素与另一个数组进行比较。想象一下,重复将250像素的补丁图像与500 x 500像素中每个像素250像素的切片进行比较,其中只有一幅图像。这是一种蛮力方法,时间限制正好是给你的,因此你必须想出一种更聪明的方法来解决这个问题。你想过并行处理所有四幅图像吗?