1

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

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

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

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

4

2 回答 2

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

距离函数是挑战所在,但我将把它留给你。

于 2013-10-11T15:21:35.760 回答
0

作为初学者,您可以使用matplotlib或 python 图像库 ( PIL) 读取图像。与模式进行比较可以通过互相关来完成,您可以使用scipyor来完成numpy。由于您只有几个像素,我会选择不使用傅立叶变换的 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不适用于颜色编码的数据。我希望它能给你一些开始的东西。

于 2013-10-11T15:14:14.813 回答