簡體   English   中英

如何使用 opencv-python 使用霍夫線變換去除噪聲

[英]How can I remove noise with Hough Line Transform with opencv-python

該程序的目的是將 map 移出房間的角落和邊緣,這就是我現在所處的位置:image_current 右上角的圖像是我的結果,左上角的圖像是我的輸入。 目前,我正在使用帶有高斯濾波器的精明邊緣檢測。 但正如你所看到的,圖像中有很多來自其他細節的隨機線條。

我的目標是這樣的:圖像結果

到目前為止,我已經嘗試過,只顯示平坦的線(0 或無限斜率):

if lines is not None:
    for line in lines:
        x1, y1, x2, y2 = line[0]
        if math.isclose(x1, x2, tol_abs=25) or math.isclose(y1, y2, tol_abs=10):
            cv2.line(bgrimg, (x1, y1), (x2, y2), (0, 255, 0), 1)

但這導致我失去了一些重要的台詞。 接下來,我嘗試只在圖像邊緣顯示線條:

if lines is not None:
    for line in lines:
        x1, y1, x2, y2 = line[0]
        if y1 > 100 and y2 > 100:
            cv2.line(bgrimg, (x1, y1), (x2, y2), (0, 255, 0), 1)

這有點適用於頂部,但由於側面可能在圖片中的任何位置,我無法確定它們的確切位置。

有沒有辦法解決這個問題? 如果沒有,機器學習是否有可能?

從Canny得到的信息開始。 可以:

1 - 確定水平線的良好參考,

2 - 確定右對角線的良好參考

3 - 確定左對角線的良好參考

4 - 從這些參考線的延伸中,您可以找到交叉點。

有些路口會很好,有些則不好。

如果水平基准線和斜基准線形成的角度左右相同或相似,則為良好的交點。

正如我在這里添加的圖片: https://i.stack.imgur.com/OYS2c.png

暫無
暫無

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

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