日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hough直线检测的理解

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hough直线检测的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在前面的《圖像的顏色選擇》、《圖像的感興趣區域》中提到了對車道線的檢測。

通過對原始行車圖像進行顏色選擇和感興趣區域的提取,得到了如下的車道線:

我們的車道線當然是一左一右兩條線。那怎樣從這個車道線圖像中提取出這2條線呢?

這就要談到“霍夫變換(Hough Transfrom)”。霍夫變換是1972年提出來的,最開始就是用來在圖像中過檢測直線,后來擴展能檢測圓、曲線等。

我們在初中數學中了解到,一條直線可以用如下的方程來表示:y=kx+b,k是直線的斜率,b是截距。

圖像是一個個離散的像素點構成的,如果在圖像中有一條直線,那也是一系列的離散點構成的。那么怎樣檢測這些離散的點構成了直線呢?

我們再看上面的直線方程:y=kx+b,(x,y)就是點。我們轉換下變成:b=-kx+y。我們是不是也可以把(k,b)看作另外一個空間中的點?這就是k-b參數空間。

我們看到,在x-y圖像空間中的一個點,變成了k-b參數空間中的一條直線,而x-y圖像空間中的2點連成的直線,變成了k-b參數空間中的一個交點。

如果x-y圖像空間中有很多點在k-b空間中相交于一點,那么這個交點就是我們要檢測的直線。這就是霍夫變換檢測直線的基本原理。

當然,有一個問題需要注意,圖像空間中如果一條直線是垂直的,那么斜率k是沒有定義的(或者說無窮大)。為了避免這個問題,霍夫變換采用了另一個參數空間:距離-角度參數空間。

我們在中學中學過,平面上的一個點也可以用距離-角度來定義,也就是極坐標:

那么在圖像中,每一個點都可以用距離和角度來表達:

但是,使用距離-角度后,點(x,y)與距離,角度的關系變成了:

ρ=xcosθ+ysinθρ=xcosθ+ysinθ
于是,在新的距離-角度參數空間中,圖像中的一個點變成了一個正弦曲線,而不是k-b參數空間中的直線了。這些正弦曲線的交點就是圖像空間中我們要檢測的直線了。

對于最開始的圖像,我們先用Canny進行邊緣檢測,較少圖像空間中需要檢測的點數量:

lane = cv2.imread("final_roi.png") # 高斯模糊,Canny邊緣檢測需要的 lane = cv2.GaussianBlur(lane, (5, 5), 0) # 進行邊緣檢測,減少圖像空間中需要檢測的點數量 lane = cv2.Canny(lane, 50, 150) cv2.imshow("lane", lane) cv2.waitKey()

import numpy as np rho = 1 # 距離分辨率 theta = np.pi / 180 # 角度分辨率 threshold = 10 # 霍夫空間中多少個曲線相交才算作正式交點 min_line_len = 10 # 最少多少個像素點才構成一條直線 max_line_gap = 50 # 線段之間的最大間隔像素 lines = cv2.HoughLinesP(lane, rho, theta, threshold, maxLineGap=max_line_gap) line_img = np.zeros_like(lane) for line in lines:for x1, y1, x2, y2 in line:cv2.line(line_img, (x1, y1), (x2, y2), 255, 1) cv2.imshow("line_img", line_img) cv2.waitKey()

總結

以上是生活随笔為你收集整理的Hough直线检测的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。