2012-04-27 49 views
2

我在C中創建了一部分掃描儀,它將掃描部分的所有可能性都作爲目錄中的圖像。我的代碼當前獲取該目錄中的所有圖像並將其轉儲到一個向量中。然後我爲所有圖像生成輪廓組。然後程序進入一個while循環,它不斷從攝像頭抓取圖像,併爲這些圖像生成輪廓。我已經爲零件設置了一個夾具,因此方向和尺寸不是問題,但我不想校準機器,因此模板圖像和拍攝的零件圖像之間可能會發生移動。如何比較二進制模式圖像的兩個輪廓?

什麼是比較輪廓的最佳方法?我已經嘗試了幾種方法,包括沒有輪廓的matchTemplate,但是如果你看看下面的兩個部分,你可以看到這兩個部分彼此非常接近,所以matchShapes和matchTemplate無法以我使用的方式區分它們他們。我也不確定如何使用cvMatchShapes。它只是將圖像直接加載到匹配形狀中,但結果不確定。我認爲輪廓是要走的路,我只是不確定如何去實施比較階段。任何幫助都會很棒。

你可以在這裏查看模板:http://www.cryogendesign.com/partDetection.html

+0

[OpenCV matching images]可能重複(http://stackoverflow.com/questions/8893539/opencv-matching-images) – karlphillip 2012-04-27 18:39:52

+0

或http://stackoverflow.com/questions/9444142/comparing-images-for - 相似性 – karlphillip 2012-04-27 18:40:38

回答

1

如果你準備好做它自己,一個方法可以是計算‘距離圖像’(最小歐幾里得距離分配每個像素的輪廓作爲參考)。見http://en.wikipedia.org/wiki/Distance_transform

使用這個距離圖像,可以快速計算出一個新的輪廓到參考一的平均距離(每一個輪廓象素,得到的距離圖像的距離),平均距離爲您提供適合度的指示,並可讓您找到與一組參考模板的最佳匹配。

如果零件具有一定的運動自由度,情況會更加困難:在計算平均距離之前,必須將新輪廓與參考輪廓擬合。您將需要應用適當的變換(平移,旋轉,可能縮放),並查找將使平均距離最小化的參數。

+0

如果這個不清楚,請隨時問我更多... – 2012-05-07 10:55:59

0

可以計算出兩個輪廓之間的倒角距離:

chamfer

TE是一套模板和圖像,並x邊緣的就是你開始比較的參考點兩組邊緣。因此,每個x你都會得到不同的價值。

DT是圖像的距離變換。 Matlab提供了算法here

如果您想了解如何計算倒角距離的更詳細版本,請參閱here