2013-04-09 99 views
3

我有很多不同顏色深淺的​​紙卡的圖像。就像所有的藍調,或所有的紅色等等。在圖像中,它們被固定在不同的具有該顏色的物體上。在OpenCV中檢測顏色的深淺

我想編寫一個程序,將顏色與卡片上的陰影進行比較,並選擇與對象最近的陰影。

但是我意識到,對於未來的圖像我的相機將受到許多不同的照明。我想我應該轉換成HSV空間。

我也不確定我應該使用什麼類型的距離度量。考慮到卡片上的某些斑點,我可以對HSV進行平均,並簡單地看到哪個斑點的平均值最接近。

但我歡迎任何和所有的建議,我想了解更多關於我可以用OpenCV做什麼。

編輯:樣本

enter image description here

在這裏,我想比較填充在6點的紅,看它實際上是第三紙矩形的陰影。

+1

請發佈您可能使用的圖像樣本。 – 2013-04-10 13:10:17

+0

@FrancoCallari完成了!讓我知道你是否想要更多細節。 – lollercoaster 2013-04-11 05:16:14

回答

6

我認爲一種可能性是做到以下幾點:

從色調和飽和度顏色通道直方圖

  1. 計算實心圓圈的顏色直方圖。
  2. 計算紙條的顏色直方圖。
  3. 使用直方圖距離度量來計算距離。 可能性在這裏包括: 卡方, 推土機距離, 巴塔查里亞距離, 直方圖路口等

檢查的histogram comparisons

computing histograms

檢查這個鏈接的OpenCV OpenCV的這個鏈接的詳細信息的詳細信息

請注意,在計算顏色直方圖時,請按照自己的建議將圖像轉換爲HSV顏色空間。然後,這裏需要注意兩點。

  1. [EDITED,使這個建議,而不是必須做的,因爲我相信V通道可能有必要區分色調。無論如何,嘗試兩種方式,並與更好的結果一起使用。道歉,如果這使你偏離軌道。]一種可能性是隻使用色調和飽和度通道,即建立一個2D直方圖而不是3D色度和飽和度通道的值組成的三維直方圖。這樣做的原因是在V通道中感覺最明亮的變化 。這與使用直方圖的 一樣,希望可以讓您的比較更適合照明變化。在這篇文章here中構建顏色直方圖時,有一些關於忽略 V通道的討論。您可能會發現其中的參考有用。
  2. 使用opencv函數規格化直方圖。這是爲 佔補丁材料的不同尺寸(您的 小圓圈vs巨大的顏色欄有不同數量的像素)。

您可能還希望考慮執行某種形式的預處理來「拉伸」圖像中的顏色,例如,使用直方圖均衡或「S曲線」映射,使不同色調的色彩更好地分離。然後計算這個處理過的圖像上的顏色直方圖。保存映射的信息並在計算顏色直方圖之前在新的測試樣本上執行。

使用ML分類

除了簡單地計算距離,走最近的一個(即1個近鄰分類),你可能要考慮訓練分類,對分類爲您服務。這樣做的一個原因是分類器的培訓希望能夠學習某種方式來區分色調的不同色調,因爲它可以在培訓階段訪問它們並且需要區分它們。注意,簡單地計算一個距離,即你所建議的方法,可能沒有這個屬性。希望這會給予更好的分類。

用於訓練的特徵仍然可以是我在上面提到的顏色直方圖。也就是說,您可以按照上述方法爲您的訓練樣本計算顏色直方圖,並將其與類別(即它們的陰影)一起傳遞給分類器。然後,當您希望對測試樣本進行分類時,同樣計算顏色直方圖並將其傳遞給分類器,它會返回測試樣本顏色屬於的類(您的案例中的顏色陰影)。

訓練分類時,而不是使用一個簡單的距離比較基礎的方法,你暗示了一些潛在的問題是部分程序的增加的複雜性以及可能得到不好的結果時,訓練數據是不好的。還需要進行很多參數調整才能使其正常運行。

有關更多詳細信息,請參閱opencv機器學習教程here。請注意,在鏈接的示例中,分類器僅區分2個類別,而您具有2個以上的色彩陰影。這不是一個問題,因爲一般的分類器可以使用兩個以上的類。

希望這會有所幫助。

+0

優秀的答案!我相信我也會有幫助。謝謝 !!! :) – 2016-06-17 15:06:37