2011-06-30 58 views
6

在圖像上運行Canny邊緣檢測器後,我得到清晰的線條。但是,在Canny邊緣圖圖像上運行時,Hough線功能似乎錯過了非常顯眼的線條。 我只保留垂直和水平霍夫線(公差爲15度)。很多額外的線條即將到來,但邊界矩形的清晰可見的線條未被拾取。Hough變換檢測不到的突出線

這裏的片段:

cvCanny(img, canny, 0, 100, 3); 
lines = cvHoughLines2(canny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 35, 20, 10); 

的主要目的是檢測表示鏈表的節點的矩形框。但是squares.c示例程序只能檢測完美的矩形,而不是如果箭頭觸摸矩形邊界。

您能否介紹一下Hough線功能的改變,這將幫助我得到對應於Canny邊緣圖像中清晰可見線的Hough線?

hough

+2

本週第五次:圖像處理功能都是使用正確的參數。使用傳遞給cvHoughLines2()的參數進行遊戲,直到找到一組滿足您需求的參數。 – karlphillip

回答

9

補充:預處理步驟,通過shernshiou建議

預處理步驟:

  1. 閾值的圖像,
  2. 使用連接分量
  3. 從連接組件結果,檢測並刪除小對象 - 下面和下面四組數字在每個盒子的中間。

(備註。該閾值化步驟是簡單地通過連接組分所需的預處理步驟。)


如果要僅檢測完全水平和垂直線,我的建議是執行在Hough變換之前的水平和垂直邊緣增強(通過卷積)。

這將使真實線條更有可能在Hough投影中「高峯」,並增加OpenCV拾取線條的機會。

的步驟是:從輸入

    1. 計算Canny邊緣圖像應用水平索貝爾濾波處理上Canny邊緣圖像
    2. 水平增強的邊緣圖像上應用霍夫線檢測。
    3. 在Canny邊緣圖像上應用垂直Sobel濾波。 (注意:使用步驟1的結果,而不是步驟2)
    4. 在垂直增強的邊緣圖像上應用霍夫線檢測。
    5. 合併水平線和垂直線並顯示結果。
  • 1

    通常人們不使用霍夫線從包裝盒中,立竿見影。正常實踐涉及預處理圖像(例如,改變亮度,改變顏色,銳化圖像...)。

    +0

    謝謝,您提醒我可以將兩個步驟添加到建議中:閾值化圖像,然後使用連接組件檢測小寫字母(數字)並在執行Hough之前將其刪除,這樣可以減少噪音。 – rwong

    6

    您沒看過the documentation是不是?

    我有幾個選項供您:

    1. 你錯過了(在圖像中的最右邊框最引人注目的是最左邊的垂直線)的線相當短。嘗試降低閾值(cvHoughLines2的第5個輸入變量)。該閾值就是必須位於該線上的像素數量。從圖片中我猜想,你錯過的線條確實少於35個像素。
    2. 第6個輸入變量表示最小線長。我假設這是以像素爲單位的,所以第五個參數需要35個像素,然而您需要搜索20像素或更長的像素。你設置這個變量的方式是不起作用的。降低第五個變量,如果發現許多無用的短線,則提高這個值。
    3. 降低第7個參數以禁止行中的大間隙。這將消除一些斜線。

    總之,使用不同的值再次嘗試對參數5,6和7.

    我想嘗試的參數5和7一些較低的值,和6相似的或稍高的值。由於2以上5應始終低於或等於6才能起作用。 7應該至少等於5和6之間的差值,如果5較低。