Help
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Copilot Lvl 3
Message 1 of 2

A more efficient way of comparing two images in a python

I have a task where i need to specify the upper left coordinate of the smaller image in the larger image. I implemented this code, however it is too slow since I have a time limit of 20 seconds, and in some datasets I have 3000 images. How can this be implemented more effectively? I can use numpy, scipy and all packages from the standard python library.

 

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))
1 Reply
Highlighted
Commander Lvl 2
Message 2 of 2

Re: A more efficient way of comparing two images in a python

See the 4th answer to this:

https://stackoverflow.com/questions/3049370/how-to-find-an-image-within-another-image-using-python

 

Other thoughts:

Parallelism - break the larger image down into parts, process each on separate thread.

 

https://stackoverflow.com/questions/7670112/finding-a-subimage-inside-a-numpy-image

https://stackoverflow.com/questions/17566752/how-to-find-subimage-using-the-pil-library 

http://werner.yellowcouch.org/Papers/subimg/index.html 

 

Let me know what you find out - I'd be interested in the answer!

 

Please follow-up to let us know how you made out. For good karma, mark a reply as the answer if it helped!