Python 3.x 在python中比较两个图像的更有效方法
我有一个任务,需要在较大的图像中指定较小图像的左上角坐标。 我实现了这段代码,但是它太慢了,因为我有20秒的时间限制,在一些数据集中我有3000个图像。如何更有效地实施这一点?我可以使用numpy、scipy和标准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_
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像素的切片进行比较,其中只有一幅图像。这是一种蛮力方法,时间限制正好是给你的,因此你必须想出一种更聪明的方法来解决这个问题。你想过并行处理所有四幅图像吗?