用模式比较两个图像的算法 - Python

时间:2013-10-11 11:39:40

标签: python image-processing python-2.7 scipy computer-vision

我想请你帮忙。我是一名学生,在学术研究方面,我正在设计一个系统,其中一个模块负责低分辨率简单图像的比较(img,jpg,jpeg,png,gif)。但是,如果我可以在 Python 中编写实现以及如何开始,我需要指导。也许你们中的某个人曾经遇到过这样的事情并且能够分享他们的知识。

问题1 - 简单版 输入数据必须与模式(包括图像)进行比较,数据输出将包含有关相似程度(百分比)的信息,以及给定输入最相似的模式图像。在这个版本中,假设输入图像不会以任何方式被修改(即不旋转,倾斜等)

问题2 - 难度较高的版本 输入数据必须与模式(包括图像)进行比较,数据输出将包含有关相似程度(百分比)的信息,以及给定输入最相似的模式图像。在这个版本中,假设输入图像可以旋转

你们有些人可以告诉我我需要做什么以及如何开始。我将不胜感激。

2 个答案:

答案 0 :(得分:0)

作为初学者,您可以使用matplotlib或python图像库(PIL)读取图像。 可以通过互相关来完成与模式的比较,您可以使用scipynumpy来完成。因为你只有很少的像素,我会选择不使用傅里叶变换的numpy。

import pylab as P
import numpy as N

# read the images    
im1 = P.imread('4Fsjx.jpg')
im2 = P.imread('xUHhB.jpg')

# do the crosscorrelation
conv = N.convolve(im1, im2)
# a measure for similarity then is:
sim = N.sum(N.flatten(conv))

请注意,这是一种非常快速和肮脏的方法,您应该花一些时间考虑如何改进它,甚至不包括您提到的轮换。无论如何;虽然convolve不适用于彩色编码数据,但此代码可以读取您的图像,并为您提供相似性的度量。我希望它会给你一些启动。

答案 1 :(得分:0)

这是一个伪代码的开始。我强烈建议让numpy / scipy来帮助解决这个问题。

#read the input image:
files = glob.glob('*.templates')
listOfImages = []
for elem in files:
  imagea = scipy.misc.imread(elem)
  listOfImages.append(imagea)

#read input/test imagea
targetImage = scipy.misc.imread(targetImageName)

现在遍历每个listOfImages并计算“距离” 请注意,这可能是最难的部分。你将如何决定? 如果两个图像相似?使用直接像素比较?运用 图像直方图,使用一些图像对齐度量(这将是有用的 为你的困难版本)。一些简单的陷阱,我注意到你上传的图像大小不同。如果图像大小不同,那么你必须这样做 扫过图像。此外,图像可以缩放吗?然后,您需要具有比例不变度量或尝试不同比例的扫描

#keep track of the min distance
minDistance = Distance(targetImage,listOfImages[0])
minIndex = 0
for index,elem in enumerate(listOfImages):
  currentDistance = Distance(targetImage,elem)
  if currentDistance < minDistance:
    minDistance = currentDistance
    minIndex = index

距离函数是挑战所在,但我会离开 为了你。