簡體   English   中英

計算機視覺中的形狀/模式匹配方法

[英]Shape/Pattern Matching Approach in Computer Vision

在我看來,我目前正面臨一個相當普遍的問題,這個問題應該很容易解決,但到目前為止,我接近的所有人都失敗了所以我轉向你尋求幫助。

我認為這個問題最好用一些插圖來解釋。 我有一些像這兩樣的模式:

模式1模式3

我也有一個像(可能更好,因為這張照片起源於照片很差)這個:

圖片

(注意模板是如何縮放的,以適應圖像的大小)

最終目標是確定用戶是否顯示拇指向上/向下拇指手勢以及兩者之間的某些角度的工具。 因此,我希望將圖案與圖像進行匹配,並查看哪一個與圖片最相似(或者更准確地說,是手所呈現的角度)。 我知道拇指在圖案中顯示的方向,所以如果我發現看起來相同的圖案我也有角度。

我正在使用OpenCV(使用Python Bindings)並且已經嘗試過cvMatchTemplate和MatchShapes但是到目前為止它還沒有真正可靠地工作。

我只能猜到為什么MatchTemplate會失敗,但我認為較小的白色較小的圖案完全適合圖片的白色區域,因此創造了最佳的匹配因子,盡管它們顯然看起來並不相同。

是否有一些隱藏在OpenCV中的方法我還沒有找到或者是否有一個已知的算法來解決我應該重新實現的那些問題?

新年快樂。

一些簡單的技術可以工作:

  1. 在二值化和分割之后,找到Feret的斑點直徑(也就是點之間的最遠距離,或主軸)。
  2. 找到點集的凸包,填充它,並將其視為連接區域。 用拇指減去原始圖像。 不同之處在於拇指和拳頭之間的區域,並且該區域相對於質心的位置應該為您提供旋轉指示。
  3. 對每個點到斑點邊緣的距離使用分水嶺算法。 這有助於識別連接的薄區域(拇指)。
  4. 適合blob中最大的圓(或最大的內切多邊形)。 擴大這個圓或多邊形,直到它的一部分邊緣與背景重疊。 從原始圖像中減去這個擴張的圖形; 只剩下拇指。
  5. 如果手的大小一致(或相對一致),那么你也可以執行N形態侵蝕操作,直到拇指消失,然后N擴張操作使拳頭恢復到其原始的近似大小。 從原始斑點中減去這個僅有拳頭的斑點以獲得拇指斑點。 然后使用拇指斑點方向(Feret's直徑)和/或質心相對於第一個斑點質心來確定方向。

找到關鍵點(強方向變化的區域)的技術比較棘手。 最簡單的方法是,你也可以使用角落探測器,然后檢查從一個角落到另一個角落的距離,以確定拇指內緣與拳頭相遇的位置。

對於更復雜的方法,請查看作者如Kimia,Siddiqi和Xiaofing Mi的形狀分解論文。

MatchTemplate似乎非常適合您描述的問題。 它以什么方式失敗了? 如果您實際上正如您在樣本圖像中所顯示的那樣對拇指向上/向下豎起/豎起大拇指進行掩飾,那么您已經完成了最困難的部分。

MatchTemplate在搜索空間中不包括旋轉和縮放,因此您應該在要檢測的所有旋轉中從參考圖像生成更多模板,並且應該縮放模板以匹配找到的拇指向上/拇指的一般大小下來的跡象。

[edit] MatchTemplate的結果數組包含一個整數值,用於指定圖像中模板在該位置的擬合程度。 如果使用CV_TM_SQDIFF,則結果數組中的最小值是最適合的位置,如果使用CV_TM_CCORR或CV_TM_CCOEFF,則它是最高值。 如果縮放和旋轉的模板圖像都具有相同數量的白色像素,則可以比較您為所有不同模板圖像找到的最佳擬合值,並且總體上最適合的模板圖像是您要選擇的模板圖像。

有大量的旋轉/縮放獨立檢測功能可以幫助您,但將問題規范化以使用MatchTemplate是最簡單的。

有關更高級的內容,請查看基於 SIFTHaar功能的分類器OpenCV中提供的其他 分類器

如果你只計算最遠路徑最短的兩個點,我認為你可以得到很好的結果。 拇指指向的方向只是連接兩點的線的方向。

您可以通過在白色區域采樣點並使用Floyd-Warshall輕松完成此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM