def calc_rms(im1, im2): # http://effbot.org/zone/pil-comparing-images.htm#rms # calculate the root-mean-square difference between two images source, compare = utility.open_image(im1, im2) "Calculate the root-mean-square difference between two images" diff = ImageChops.difference(source, compare) h = diff.histogram() sq = (value * (idx**2) for idx, value in enumerate(h)) sum_of_squares = sum(sq) rms = math.sqrt(sum_of_squares / float(source.size[0] * source.size[1])) return round(rms, 0)
def ncc(im1, im2): n = 33856 image, template = utility.open_image(im1, im2) np_image = numpy.asarray(image.getdata()) np_template = numpy.asarray(template.getdata()) image_mean = np_image.mean() image_std = np_image.std() template_mean = np_template.mean() template_std = np_template.std() s = sum( ( image_mean / image_std ) * ( template_mean / template_std) ) x = 1 / n * s return x
def op_transform(im1, im2, operation): source, compare = utility.open_image(im1, im2) if operation == 'xor': x = algorithm.xor(source, compare) return x elif operation == 'union': x = ImageChops.multiply(source, compare) return x elif operation == 'subtract': x = algorithm.subtract(source, compare) return x elif operation == 'intersect': x = algorithm.intersect(source, compare) return x elif operation == 'modified-subtract-horizontal': x = algorithm.modified_subtract(source, compare, 'horizontal') return x elif operation == 'modified-subtract-vertical': x = algorithm.modified_subtract(source, compare, 'vertical') return x
def image_difference(im1, im2): source, compare = utility.open_image(im1, im2) return ImageChops.difference(source, compare).getbbox()