2012-04-10 135 views
4

我有一套參考圖像(200)和這些圖像的一組照片(數萬)。我必須以半自動化的方式對每張照片進行分類。你會建議我使用哪種算法和開源庫來完成此任務?對我來說最好的辦法是在照片和參考圖像之間有一個相似性度量,這樣我就會向操作人員展示從最相似到最不相似的圖像,以使她的工作更輕鬆。圖像分類/識別開源庫

爲了提供更多的背景知識,參考圖像是品牌包裝,照片是相同的包裝,但有各種噪音:閃光燈反射,低光照,不完美透視等。已經(手動)分段:只有包是可見的。我回想起在圖像識別(像15年前)的日子裏,我可能會嘗試用參考圖像訓練一個神經網絡,但我想知道現在是否有更好的方法來做到這一點。

回答

5

我建議您使用Python,併爲您的數值工作使用NumPy/SciPy庫。一些用於處理圖像的有用庫是Mahotas庫和scikits.image庫。

另外,您將需要使用scikits.learn,它是Libsvm的一個Python包裝器,這是一個非常標準的SVM實現。

難的部分是選擇你的描述符。描述符將是您從每個圖像計算的特徵,旨在計算與參考圖像集合的相似距離。一系列可以嘗試的方法是定向梯度直方圖,SIFT特徵和顏色直方圖,並利用各種方式對圖像的不同部分進行合併,並將這些描述符連接在一起。

接下來,擱置一些您的數據進行培訓。對於這些數據,您必須根據它們所屬的真實參考圖像手動標記它們。您可以將這些標籤以scikits.learn的形式提供給內置函數,並且它可以訓練多類SVM識別您的圖像。

之後,您可能需要查看MPI的Python實現MPI4Py,以便在執行大量描述符計算和對成千上萬個剩餘圖像進行分類時利用多處理器。

您描述的任務非常困難,並且以高準確度解決問題很容易導致計算機視覺領域的研究級出版物。我希望我已經給出了一些出發點:在Google上搜索上述任何概念都會遇到有用的研究論文以及有關如何使用各種庫的更多詳細信息。

+0

謝謝;我目前在我的項目中使用Ruby,但對於這類工作,Python看起來更好。 – danmaz74 2012-04-12 10:53:24

1

對我來說最好的辦法是在照片和參考圖像之間進行相似性度量,這樣我就會向操作人員展示從最相似點到最不相似點的圖像,以使她工作更容易。

這樣做的一種方式是所謂的「地球移動者的距離」。簡而言之,將圖像中的每個像素想象爲一堆高度與像素值相對應的岩石,並將兩個圖像之間的距離定義爲將岩石的一個佈置轉換爲另一個佈置所需的最小工作量。

這是一個當前的研究課題。這裏有一個matlab:http://www.cs.huji.ac.il/~ofirpele/FastEMD/code/。看起來他們也有一個Java版本。這裏是原來的紙和C代碼的鏈接:http://ai.stanford.edu/~rubner/emd/default.htm

0

與IMMI(圖像挖掘擴展,http://www.burgsys.com/mumi-image-mining-community.php),AGPL許可證嘗試Radpiminer(使用最廣泛的數據挖掘平臺之一,http://rapid-i.com)。

它目前實現了幾種相似性測量方法(不僅是逐像素比較)。可以爲學習算法(例如神經網絡,KNN,SVM ...)輸入相似性度量,並且可以對其進行訓練以提供更好的性能。回合方法的一些信息,在本文中給出: http://splab.cz/wp-content/uploads/2012/07/artery_detection.pdf

0

現在給天深度學習基礎framworks像火炬TensorflowTheanoKeras是最好的開源工具/庫用於對象分類/識別任務。