【问题标题】:Algorithm to compare two images with pattern - Python将两个图像与模式进行比较的算法 - Python
【发布时间】:2013-10-19 11:34:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你能上传一些示例图片吗?
  • 好的有两个图像:Pattern 和 Input Pattern:i.stack.imgur.com/4Fsjx.jpg Input:i.stack.imgur.com/xUHhB.jpg
  • 两张图片“相似”是什么意思?这对我来说完全不明显,我猜在这里回答这个问题将是你任务的一半。

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


【解决方案1】:

首先,您可以使用 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 不适用于彩色编码数据。我希望它能给你一些开始。

【讨论】:

  • 我会试试这个快速代码。也许首先我将图像设为单色并尝试清除背景上的噪音
【解决方案2】:

这里是一些伪代码的开始。我强烈建议使用 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

距离函数是挑战所在,但我会保留它 为你。

【讨论】:

  • 最糟糕的是我不是图形而且我不知道哪种方法是完美的(?)。另一个不好的事情是我没有得到老师的支持,因为他要到明年三月才有空!!!所以我一个人。我也不是程序员(我是数据库管理员),所以我对 Python 了解一点。我找到了 OCR 的解决方案,但是……OCR 不能正确识别字母/数字(最多是字母/数字,根本没有图片)。
猜你喜欢
  • 2021-06-02
  • 2010-09-06
  • 1970-01-01
  • 2019-07-07
  • 2019-04-16
  • 2014-04-01
  • 2015-01-23
  • 2017-07-14
相关资源
最近更新 更多