2013-10-11 59 views
1

我想問你的幫助。我是學生和學術研究我正在設計一個系統,其中一個模塊負責比較低分辨率簡單圖像(img,jpg,jpeg,png,gif)。但是,如果我可以在Python中編寫實現以及如何開始,我需要指導。也許有人會遇到過這樣的事情,並且能夠分享他們的知識。算法比較兩個圖像與模式 - Python

問題1 - 簡單的版本 輸入數據必須以圖案(包括圖像)進行比較,並且該數據輸出將包含關於相似性(百分比)的程度的信息,和該圖案的圖像,以所述給定的輸入是最相似的。在這個版本中,假定是,在輸入圖像不以任何方式修改(即,不旋轉,傾斜等)

問題2 - 困難版本 輸入數據必須與模式相比較(包括圖像),並且數據輸出將包含關於相似程度(百分比)的信息以及給定輸入與其最相似的圖案的圖像。在這個版本中,推測是輸入圖像可以旋轉

你們有些人可以告訴我我需要做什麼以及如何開始。我會感謝任何幫助。

+0

你可以上傳一些示例圖片嗎? – GilLevi

+0

好吧,有兩個圖像: 模式和輸入 模式:http://i.stack.imgur.com/4Fsjx。JPG 輸入:http://i.stack.imgur.com/xUHhB.jpg – LukeJ

+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不適用於顏色編碼數據。我希望它會給你一些啓動。

+0

我會試試這個快速代碼。也許一開始我做單色圖像,並嘗試在後臺 – LukeJ

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 

距離函數是其中的挑戰是橫掃,但我會留給 你。

+0

的最糟糕的事情清除噪音,我不是圖形,我不知道哪種方法將是完美的(?)。另一件壞事是我沒有得到我老師的支持,因爲他直到明年3月都沒有辦法!所以我一個人。我不是程序員(我是數據庫管理員),所以我只知道一點Python。 我找到OCR解決方案,但... OCR不能識別字母/數字(這將是最多的字母/數字根本沒有圖片)正確。 – LukeJ