一、Hough變換概述
Hough變換是一種在圖像和計算機視覺領域中廣泛使用的技術,用於檢測圖像中的幾何形狀,例如圓、直線和曲線等。
經典的霍夫變換算法包括直線霍夫變換(Houghlines)和圓霍夫變換(Houghcircles),下面我們將詳細介紹Houghlines算法。
二、Houghlines算法原理
Houghlines算法可以用於檢測圖像中的直線,它的基本思想是將直線表示為參數空間中的一個點,並在這個空間中進行檢測。在Houghlines中,我們使用的是極坐標表示法,即每條直線可以表示為(r,θ)形式。r是從原點到直線的距離,θ是與x軸的夾角。
Houghlines算法的主要步驟如下:
三、Houghlines算法步驟
1、邊緣檢測
首先,需要使用Canny算子進行邊緣檢測,獲取到二值化的邊緣圖像。
import cv2 import numpy as np # 讀取圖像 img = cv2.imread('image.jpg', 0) # Canny算子邊緣檢測 edges = cv2.Canny(img, 50, 150, apertureSize=3)
2、霍夫變換
接下來,對於圖像中的每個邊緣點,我們將在(r,θ)參數空間中遍歷所有可能的值,並將得分存儲在一個二維數組中,該數組稱為累加器(accumulator)。
得分越高的(r,θ)組合表示檢測到的直線越強。經過閾值處理後,我們就可以從累加器中提取出最強的直線,這些直線的(r,θ)組合即為我們所需的結果。
# 霍夫變換 lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
3、繪製直線
最後,我們可以將檢測到的直線繪製在原始圖像上,以便在實際應用中進行可視化。
# 繪製直線 for line in lines: r, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a * r y0 = b * r x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
四、應用場景
Houghlines算法可以在許多實際應用中使用,例如在機器人視覺中用於檢測牆壁,或者在自動駕駛汽車中用於檢測路標和車道線。
總之,霍夫變換是一種非常強大的圖像處理技術,可以在許多計算機視覺應用中使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151472.html