簡體   English   中英

使用HoughLinesP檢測矩形對象的准確中心點

[英]Detecting accurate center point of rectangular object using HoughLinesP

我有一個對象,我想定義它的確切中心。 使用OpenCV,我使用Canny檢測邊緣,然后執行HoughLinesP檢測線: 請參見this

我使用Hough變換是因為對象不是完全矩形,有時在此處檢測到凹凸。

行是在結構中定義的。 我還計算了中間點,角度和長度:

struct hLine {
    Point pStart, pEnd, pMidpoint;
    float angle;
    int length;
};

如您所見,在側面檢測到多條線。

問題是:如何獲得矩形每一邊的最長線(在這種情況下為0、1、3、4)?

我嘗試的方法是計算線方程y = kx + n ,然后按角度,長度和n對線進行排序,並僅保留n被某個數字(矩形的相對側)分開的線。 我對垂直線有問題(無法計算n ),而且當對象幾乎垂直時n的數目很大,因此不會刪除線。

下一步是計算線相交,然后計算中心。 想法基於此教程:opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/

另外,如果有人有更好的解決方案來檢測准確的中心點,請大聲說:)

使用canny檢測邊緣后,可以使用形態學閉合操作來合並邊緣。 然后找到輪廓並使用多邊形近似對輪廓進行平滑。 對於找到的每個四邊形,您可以檢查拐角是否大約為90度,以確認它是矩形。 根據示例圖像,您檢測到的最大矩形應該是您感興趣的矩形。(您還可以找到每個輪廓的凸包,然后將多邊形近似應用於凸包)。

我會做:

  • 首先計算數據的OBB(定向邊界框)。
  • 沿着OBB的邊緣創建四個邊界框,其寬度要達到預定的精度。
  • 丟棄所有點,這些點位於四個邊緣邊界框之一中。
  • 為邊緣制作四個最小邊緣邊界框(此處丟棄凹凸)
  • 從四個邊緣邊界框的中心線創建一個矩形。
  • 計算矩形的中心。

我會這樣做:

  1. 使用霍夫變換來計算線方程。 如果通過線的法向矢量對其進行參數化,則垂直/水平線應該沒有問題。
  2. 然后,通過計算直線的交點獲得矩形的4個角。
  3. 最后,通過計算矩形的對角線方程,然后尋找它們的交點來獲得中心。

您提供的鏈接中已經完成了步驟1和2。

如果霍夫線檢測不夠魯棒怎么辦?

在這種情況下,我將采用A. Desolneux提出的一種非常強大的檢測算法,稱為有意義比對 首先,其背后的數學運算可能看起來有些嚇人,但是該算法仍然非常易於實現(盡管可能有點慢)。 我過去使用過它,結果確實和作者所說的一樣好。

暫無
暫無

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

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