確定物體顏色的最準確方法是什麼?
我編寫了一個計算機程序,可以使用計算機視覺的一些標準技術(高斯模糊、閾值、霍夫變換等)檢測靜態圖像(.jpeg、.png 等)中的硬幣。使用從給定圖像中拾取的硬幣的比率,我可以確定哪些硬幣是哪個。但是,我希望增加我的置信度,並確定我推斷為 A 型的硬幣(根據半徑比)是否也是正確的顏色[u]r。問題是對於英國硬幣等。(銅,銀,金),各自的顏色(特別是銅到金)非常相似。
我有一個程序可以根據 RedGreenBlue(RGB)“顏色空間”提取給定硬幣的平均顏色,並將該顏色轉換為 HueSaturationBrightness(HSB 或 HSV)“顏色空間”。
RGB 在嘗試區分三種硬幣顏色時不太好用(參見附加的 [基本] 圖像以獲取示例)。對於不同硬幣類型的顏色,我有以下範圍和典型值:
注意:這裡的典型值是使用真實圖像的“像素”平均值選擇的值。
**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60). **Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71). **Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86)
我首先嘗試使用給定的平均硬幣顏色(使用 RGB)和上面給出的每種硬幣類型的典型值之間的“歐幾里得距離”,將 RGB 值視為向量;對於銅,我們將擁有:
其中差的最小值() 會告訴我們給定的硬幣最有可能是哪種類型。這種方法已經證明自己非常不准確。
我還嘗試將硬幣的色調與上面提供的類型的典型值進行比較。雖然理論上這提供了一個更好的“色彩空間”來處理圖像的不同亮度和飽和度水平,但它也不夠準確。
**問題:**根據顏色(從靜態圖像)確定硬幣類型的最佳方法是什麼?
非常感謝你花時間陪伴。
編輯 1
注意:我已經嘗試了下面討論的所有想法,但幾乎一無所獲。光照條件的差異(即使在同一張圖像中)使這個問題變得非常棘手,應該加以考慮。
編輯 2(結果摘要)
謝謝您的回答。我自己的進一步研究(包括您的回答和評論)強調了在任意照明、任意相機(移動設備)、硬幣顏色波動(即使對於同一物種/類型)的一般情況下處理這個問題是多麼困難等等。我首先將膚色識別(一個非常活躍的研究領域)作為起點,即使僅對白種人的膚色識別仍然存在許多問題(有關當前技術的評論,請參閱本文),並且這個問題包含三種不同的顏色對象,所有這些對像都可以具有連續和變化的色度,這使得計算機視覺這個主題成為一個很難分類和處理的主題(事實上,你可以在這方面取得很好的博士學位!)。
我從下面 DW非常有用的帖子中研究了色域約束方法。乍一看,這是一個非常有前途的預處理步驟,可以將圖像和單獨的硬幣對象轉換為獨立於光照條件的顏色。然而,即使這種技術也不能完美地工作(並且涉及用於映射的圖像/直方圖庫——我不想進入),更複雜的神經網絡架構方法也不能。事實上,這篇論文在摘要中指出:
"current machine colour constancy algorithms are not good enough for colour-based object recognition.".
這並不是說沒有更多關於這個主題的最新論文,但我找不到它們,而且目前它似乎不是一個非常活躍的研究領域。
AVB的回答也很有幫助,我簡要地研究了 L A B *。
"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear response of the eye. Furthermore, uniform changes of components in the L*a*b* colour space aim to correspond to uniform changes in perceived colour, so the relative perceptual differences between any two colours in L*a*b* can be approximated by treating each colour as a point in a three dimensional space."
根據我所閱讀的內容,我的設備相關圖像到此顏色空間的轉換將是棘手的 - 但當我有更多時間時,我會詳細研究這一點(以實現某種實現)。
我並沒有屏住呼吸尋找這個問題的具體解決方案,在嘗試使用 L A B* 之後,我將忽略硬幣顏色並尋求確定我當前的幾何檢測算法(準確的橢圓霍夫變換等)。
謝謝大家。作為這個問題的結束說明,這是具有新幾何檢測算法的相同圖像,它沒有顏色識別:
兩件事,首先。
一,絕對不能在RGB中工作。您的默認值應該是 Lab(又名 CIE Lab*)色彩空間。丟棄
L
。從您的圖像看起來a
坐標為您提供了最多的信息,但您可能應該對第一個(最重要的)組件進行主成分分析,a
並b
沿著第一個(最重要的)組件工作,以保持簡單。如果這不起作用,您可以嘗試切換到 2D 模型。只是為了感受一下,在
a
三枚淡黃色硬幣中,STD 低於 6,137(“黃金”)、154 和 162 的平均值應該可以區分。二是燈光問題。在這裡,您必須仔細定義您的問題。如果您想在任何照明和任何環境下區分接近的顏色 - 無論如何,您不能,不喜歡這樣。如果您只擔心亮度的局部變化,Lab 將主要解決這個問題。如果您希望能夠在日光和白熾燈下工作,您能否確保統一的白色背景,就像在您的示例圖像中一樣?一般來說,您的照明條件是什麼?
此外,從外觀上看,您的圖像是用相當便宜的相機拍攝的。它可能具有某種自動白平衡功能,這會使顏色變得非常糟糕——如果可以的話,把它關掉。看起來圖像在某些時候是用 YCbCr 編碼的(如果是攝像機,會發生很多),或者是 JPG 的類似變體;顏色信息嚴重欠採樣。在你的情況下,它實際上可能很好——這意味著相機已經在顏色通道中為你做了一些去噪。另一方面,這可能意味著在某些時候顏色信息也被量化得比亮度更強——這不太好。這裡最重要的是——相機很重要,你做什麼應該取決於你要使用的相機。
如果這裡有什麼沒有意義 - 發表評論。