1

我想確定一個對象的移動和旋轉(可以是純色,但不一定是)在不完全恆定的背景上。這裏有一個例子:找到移動的對象而不使用關鍵點

image1 image2

使用關鍵點,找到改造作爲tutorials不工作,因爲我處理的對象不一定提供此足夠的邊緣。 由於改變背景,構建差異圖像並進行分割通常也會失敗。在這個例子中,它並沒有那麼糟糕,但可能會改變反射或輕微變形。

difference image

我如何找到變換矩陣(仿射,只有四個自由度),從一個圖像的對象(在這個例子中,藍色的東西)映射到其他任何想法?

+0

也許你應該嘗試光流法。那麼你將不需要計算轉換。 Lucas Kanade方法可能無法處理這樣的平滑區域,因此您應該使用Horn-Schunk等全局方法。 您也可以使用更多精細的技術,例如SIFT-Flow。 您對這個解決方案有什麼看法? – GilLevi

+0

感謝您的建議。我試過cv.CalcOpticalFlowHS,但無法找到實際爲我工作的參數。 SIFT-Flow看起來很有趣。你知道一個用於OpenCV的實現嗎? –

+0

我只知道這個實現: http://people.csail.mit.edu/celiu/ECCV2008/ – GilLevi

回答

0

對圖像相減的結果使用二進制閾值(如此處所述 - Foreground Extraction) - 應該刪除小的變化(這是閃電變化的結果)。在此之前,您可能會嘗試使用一些過濾器來模糊邊緣,但中值過濾器可能是一個不錯的選擇(但也嘗試使用不同的過濾器) - 嘗試在輸入圖像和圖像相減結果上使用此技術。

//編輯:
爲了確定您可以嘗試使用SURF轉型 - http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html
如果您不需要計算旋轉嘗試使用光流技術 - http://robots.stanford.edu/cs223b05/notes/CS%20223-B%20T1%20stavens_opencv_optical_flow.pdf或者更簡單的方法:
1.在第一張和第二張圖像上計算標記輪廓的幾何中心(僅添加所有點的位置並將結果除以點數)(將它們命名爲輪廓1和輪廓2)。或者,您可以計算填充輪廓的質心 - 這取決於您。
2.變換:movementVector = centerOfContour2 - centerOfContour1

如果結果將是不夠準確,試圖找到對圖像最大輪廓並繪製空圖像上該輪廓(所以你不會有任何噪音,文物等)。對新圖像執行所有操作。

+0

是的,模糊之前計算差異圖像有一定的幫助,即使結果不完美。但讓我們說我會有一個相當不錯的移動物體輪廓(在我的例子中沒有重疊的部分,因爲顏色是相同的)。那我怎樣才能確定轉型? –

+0

查看編輯答案。 – cyriel

+0

當然,使用SURF(SIFT,BRIEF,ORB等)很容易,但它們不適用於我處理的許多對象,如示例中所示。僅僅運動矢量是不夠的。我也需要旋轉,但差分圖像中的分割輪廓不足以使用主慣性矩。如果分割不好,首先在新圖像上繪製分割輪廓不起作用。爲了舉例說明,我選擇了在我的例子中重疊的對象。 ;) –

相關問題