簡體   English   中英

基於 OpenCV 邊緣的對象檢測 C++

[英]OpenCV edge based object detection C++

我有一個應用程序,我必須在其中檢測場景中某些項目的存在。 這些項目可以旋轉並稍微縮放(更大或更小)。 我試過使用關鍵點檢測器,但它們不夠快速和准確。 所以我決定首先使用 Canny(或更快的邊緣檢測算法)檢測模板和搜索區域中的邊緣,然后匹配邊緣以找到找到的匹配的位置、方向和大小。

所有這些都需要在不到一秒鍾的時間內完成。

我試過使用matchTemplate()matchShape()但前者不是縮放和旋轉不變的,后者不適用於實際圖像。 旋轉模板圖像以進行匹配也很耗時。

到目前為止,我已經能夠檢測到模板的邊緣,但我不知道如何將它們與場景相匹配。

我已經完成了以下操作,但無法讓它們工作(它們要么使用舊版本的 OpenCV,要么只是不使用演示中的圖像以外的其他圖像):

https://www.codeproject.com/Articles/99457/Edge-Based-Template-Matching

使用 OpenCV 進行角度和尺度不變模板匹配

https://answers.opencv.org/question/69738/object-detection-kinect-depth-images/

有人可以建議我這樣做嗎? 或者如果可能的話剪下相同的代碼?

這是我的示例輸入圖像(要檢測的部分用紅色標記)

示例輸入圖像

這些是一些正在執行此操作的軟件以及我希望它應該如何:

在此處輸入圖片說明

在此處輸入圖片說明

這個主題是我在一個項目上實際處理的一年。 因此,我將嘗試解釋我的方法是什么以及我是如何做到的。 我假設您已經完成了預處理步驟(過濾器、亮度、曝光、校准等)。 並確保您清除圖像上的噪音。

注意:在我的方法中,我從參考圖像上的輪廓收集數據,這是我想要的對象。 然后我將這些數據與大圖像上的其他輪廓進行比較。

  1. 使用精明的邊緣檢測並找到參考圖像上的輪廓。 您需要在這里確定它不應該錯過輪廓的某些部分。 如果漏了,可能預處理部分應該有一些問題。 另一個重點是您需要找到合適的findContours模式,因為每種模式都有不同的屬性,因此您需要為您的情況找到合適的模式。 最后,您需要消除對您有用的輪廓。

  2. 從參考中獲取輪廓后,您可以使用 findContours() 的 outputArray 找到每個輪廓的長度。 您可以在大圖像上比較這些值並消除差異很大的輪廓。

  3. minAreaRect精確地為每個輪廓繪制一個擬合的封閉矩形。 就我而言,這個功能非常好用。 我使用這個函數得到 2 個參數:

    a) 計算擬合矩形的短邊和長邊,並將其值與大圖像上的其他輪廓進行比較。

    b) 計算黑度或白度的百分比(如果您的圖像是灰度的,則獲得接近白色或黑色的像素的百分比)並在最后進行比較。

  4. matchShape可以在最后應用於其余輪廓,也可以應用於所有輪廓(我建議第一種方法)。 每個輪廓只是一個數組,因此您可以將參考輪廓保存在一個數組中,並在最后將它們與其他輪廓進行比較。 在完成 3 個步驟然后應用 matchShape 之后,我覺得非常好。

  5. 我認為matchTemplate不好直接使用。 我將每個輪廓繪制到不同的零墊圖像(空白黑色表面)作為模板圖像,然后與其他輪廓進行比較。 直接使用參考模板圖像不會給出好的結果。

  6. OpenCV 有一些很好的算法來尋找圓、凸等。如果你的情況與它們相關,你也可以將它們用作一個步驟。

  7. 最后,您只需獲得所有數據,值,然后您就可以在腦海中制作表格。 剩下的就是統計分析。

注意:我認為最重要的部分是預處理部分。 所以一定要確保你有一個干凈的幾乎沒有噪音的圖像和參考。

注意:如果您只是想知道對象是否存在,那么培訓可能是一個很好的解決方案。 但是如果你想為工業應用做一些事情,這是完全錯誤的方式。 我多次嘗試 YOLO 和 haarcascade 訓練算法,還用它們訓練了一些對象。 我得到的經驗是:他們幾乎可以正確地找到對象,但即使您的校准正確,中心坐標、旋轉結果等也不會完全正確。 另一方面,訓練時間和收集數據是痛苦的。

您的圖像質量非常差,光照條件非常差,因此您只有兩種方法: 1. 使用過濾器 -> 二進制閾值 -> find_contours -> matchShape。 但是這種對您的對象類型和圖像質量非常不穩定的算法。 你會得到很多錯誤的輪廓並且很難過濾它們。 2. Haarcascades -> cut bounding box -> 檢查里面的形狀

所有“特殊點/邊緣匹配”算法在如此惡劣的條件下都不起作用。

暫無
暫無

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

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