<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
經典霍夫變換用來檢測影象中的直線,後來霍夫變換經過擴充套件可以進行任意形狀物體的識別,例如圓和橢圓。霍夫變換運用兩個座標空間之間的變換,將在一個空間中具有相同形狀的曲線或直線對映到另一個座標空間的一個點上形成峰值,從而把檢測任意形狀的問題轉化為統計峰值問題。
(1)影象空間中的點與引數空間中的直線一一對應
在影象空間直角座標系x-y中,一條直線在直角座標系下可以表示為:y = k x + b;其中常數k和b是引數,表示直線的斜率和截距。過某一點A ( x 0 , y 0 ) 的所有直線的引數均滿足方程:y 0 = k ∗x 0 + b ;即過影象上的一點A ( x 0 , y 0 )可以確定N條直線。
如果我們將方程改寫為:b=-kx0+y0;那麼該方程在引數空間k-b中就對應了一條直線。也就是說,影象空間直角座標系x-y中的點( x 0 , y 0 ) ;對應了引數空間k-b中的直線 b = − k ∗ x 0 + y 0 ;因此可以得到結論,影象空間中的點與引數空間中的直線一一對應。
直線y=kx+b上再增加一個點 B(x1, y1),B點在影象空間直角座標系可以確定N條直線,那麼點B ( x 1 , y 1 ) ,但是在引數空間也有一條對應的直線,與A ( x 0 , y 0 ) 確定的直線相較於M點。
(2)影象空間中的直線與引數空間中的點一一對應
影象空間直角座標系x-y中的點A(x0,y0)和點B(x1,y1),在引數空間座標系k-b中對應的直線相交於一點,這也就是說AB所確定的直線,在引數空間座標系中對應著唯一一個點,而這個點的座標值( k 0 , b 0 ) 也就是直線AB的引數。這就是直線檢測任務中的對偶性,這個性質也為我們解決直線檢測任務提供了方法,也就是把影象空間中的直線對應到引數空間中的點,最後通過統計特性來解決問題。假如影象空間中有兩條直線,那麼最終在引數空間中就會對應到兩個峰值點,依此類推。
引數空間選擇了笛卡爾直角座標系是為了解釋偶性和霍夫變換的基本原理,但在實際應用中,引數空間是不能選擇直角座標系的,原始影象直角座標空間中的特殊直線x=c(c為常數,垂直x軸,直線的斜率為無窮大)是沒辦法在基於直角座標系的引數空間中表示的,一般我們採用極座標方式作為引數空間。
空間直角座標系與極座標系的轉換
在下圖中可以看出,引數空間的每個點(r,θ)都對應了影象空間直角座標系的一條直線,或者說影象空間的一個點在引數空間中就對應為一條曲線。引數空間採用極座標系,這樣就可以在引數空間表示影象空間直角座標系中的所有直線了。此時影象空間直角座標系x-y上的一個點對應到引數空間(極座標系ρ-θ)上是一條曲線,確切的說是一條正弦曲線。
經過變換,影象空間中的每個點(x,y)就被對映為一個(r,θ)極座標空間中的正弦曲線。而影象空間直角座標系中共線的點所對應的引數空間中正弦曲線相交於一點(r’,θ’)。這樣就把在影象空間中檢測直線的問題,轉化為在極座標引數空間中尋找通過點(r,θ)的最多正弦曲線數量的問題。霍夫空間中,曲線的交點次數越多,所代表的引數越確定(相交的曲線都是影象空間直角座標系上的點),畫出的圖形越飽滿。空間直角座標系上一條直線上的所有點都轉化為引數空間上的曲線,曲線一定會交於一個共同點。
OpenCV支援三種霍夫直線檢測演演算法:
1)Standard Hough Transform(SHT,標準霍夫變換)
2)Multiscale Hough Transform(MSHT,多尺度霍夫變換)
3)Progressive Probability Houth Transform(PPHT,漸進概率式霍夫變換)
(1)標準霍夫變換直線檢測 cv::HoughLines從平面座標轉換到霍夫空間,最終輸出是 (θ,rθ) 表極座標空間。
霍夫直線變換API函數介面
cv::HoughLines( InputArray src, // 輸入影象,必須8-bit的灰度影象 OutputArray lines, // 輸出的極座標來表示直線 ,經過呼叫HoughLines函數後儲存了霍夫線變換檢測到線條 //的輸出向量(每一條線由具有兩個元素的向量(rho,theta)表示) double rho, // 生成極座標時候的畫素掃描步長 double theta, //生成極座標時候的角度步長,一般取值CV_PI/180 int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線 double srn=0;// 是否應用多尺度的霍夫變換,如果不是設定0表示經典霍夫變換 double stn=0;//是否應用多尺度的霍夫變換,如果不是設定0表示經典霍夫變換 double min_theta=0; // 表示角度掃描範圍 0 ~180之間, 預設即可 double max_theta=CV_PI ) // 一般情況是有經驗的開發者使用,需要自己反變換到平面空間
HoughLines函數輸出檢測到直線的向量表示集合,每一條直線由具有兩個元素的向量(ρ, θ)表示,其中ρ表示直線距離原點(0, 0)的長度,θ表示直線的角度(以弧度為單位)。HoughLines函數無法輸出影象空間中線段的長度。
(2)HoughLinesP:漸進概率式霍夫變換
cv::HoughLinesP( InputArray src, // 輸入影象,必須8-bit的灰度影象 OutputArray lines, // 輸出的極座標來表示直線 double rho, // 生成極座標時候的畫素掃描步長 double theta, //生成極座標時候的角度步長,一般取值CV_PI/180 int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線 double minLineLength=0;// 最小直線長度 double maxLineGap=0;// 最大間隔 )
漸進概率式霍夫變換直線檢測 cv::HoughLinesP最終輸出是直線的兩個點。HoughLinesP能夠檢測出線端,即能夠檢測出影象中直線的兩個端點,確切地定點陣影象中的直線。
(1)彩色影象RBG轉化為灰度圖Gray,opencv上需要注意顏色空間是RGB還是BGR,CImg中RGB分別對應0,1,2通道。
(2)因為霍夫圓檢測對噪聲比較敏感,所以首先要對影象做中值濾波(或者高斯濾波)去噪,平滑影象,消除影象噪聲。
(3)影象邊緣提取(梯度運算元、拉普拉斯運算元、canny邊緣檢測演演算法)
(4)影象二值化(判斷此處是否為邊緣點,就看灰度值==255),在高斯去噪和邊界提取之後都需要二值化。
(5)對映到霍夫空間(此處準備兩個容器,一個CImg用來展示hough-space概況,一個陣列hough-space用來儲存voting的值,因為投票過程往往有某個極大值超過255,多達幾千,不能直接用灰度圖來記錄投票資訊)。
(6)取區域性極大值,設定閾值,過濾低於閾值的畫素,排除干擾直線
(7)繪製直線。
程式碼實現
#include"stdafx.h" #include<opencv2imgprocimgproc.hpp> #include<opencv2opencv.hpp> #include<opencv2highguihighgui.hpp> using namespace std; using namespace cv; int main() { Mat Image = imread("F:/photo/cdjc.jpg", 0); Mat CannyImg; Canny(Image, CannyImg, 140, 250, 3); imshow("CannyImg", CannyImg); Mat DstImg; cvtColor(Image, DstImg, COLOR_GRAY2BGR); vector<Vec4i> Lines; HoughLinesP(CannyImg, Lines, 1, CV_PI / 360, 170, 30, 15); for (size_t i = 0; i < Lines.size(); i++) { line(DstImg, Point(Lines[i][0], Lines[i][1]), Point(Lines[i][2], Lines[i][3]), Scalar(0, 0, 255), 2, 8); } imshow("HoughLines_Detect", DstImg); waitKey(0); return 0; }
影象處理效果
到此這篇關於OpenCV利用霍夫變換實現交通車道線檢測的文章就介紹到這了,更多相關OpenCV車道線檢測內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45