最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV利用霍夫變換實(shí)現(xiàn)交通車道線檢測(cè)

 更新時(shí)間:2022年09月06日 10:27:48   作者:肖愛(ài)Kun  
經(jīng)典霍夫變換用來(lái)檢測(cè)圖像中的直線,后來(lái)霍夫變換經(jīng)過(guò)擴(kuò)展可以進(jìn)行任意形狀物體的識(shí)別,例如圓和橢圓。本文就來(lái)利用霍夫變換實(shí)現(xiàn)交通車道線檢測(cè),需要的可以參考一下

一、霍夫變換

經(jīng)典霍夫變換用來(lái)檢測(cè)圖像中的直線,后來(lái)霍夫變換經(jīng)過(guò)擴(kuò)展可以進(jìn)行任意形狀物體的識(shí)別,例如圓和橢圓?;舴蜃儞Q運(yùn)用兩個(gè)坐標(biāo)空間之間的變換,將在一個(gè)空間中具有相同形狀的曲線或直線映射到另一個(gè)坐標(biāo)空間的一個(gè)點(diǎn)上形成峰值,從而把檢測(cè)任意形狀的問(wèn)題轉(zhuǎn)化為統(tǒng)計(jì)峰值問(wèn)題。

二、霍夫變換直線檢測(cè)的原理

(1)圖像空間中的點(diǎn)與參數(shù)空間中的直線一一對(duì)應(yīng)

在圖像空間直角坐標(biāo)系x-y中,一條直線在直角坐標(biāo)系下可以表示為:y = k x + b;其中常數(shù)k和b是參數(shù),表示直線的斜率和截距。過(guò)某一點(diǎn)A ( x 0 , y 0 ) 的所有直線的參數(shù)均滿足方程:y 0 = k ∗x 0 + b ;即過(guò)圖像上的一點(diǎn)A ( x 0 , y 0 )可以確定N條直線。

如果我們將方程改寫(xiě)為:b=-kx0+y0;那么該方程在參數(shù)空間k-b中就對(duì)應(yīng)了一條直線。也就是說(shuō),圖像空間直角坐標(biāo)系x-y中的點(diǎn)( x 0 , y 0 ) ;對(duì)應(yīng)了參數(shù)空間k-b中的直線 b = − k ∗ x 0 + y 0 ;因此可以得到結(jié)論,圖像空間中的點(diǎn)與參數(shù)空間中的直線一一對(duì)應(yīng)。

直線y=kx+b上再增加一個(gè)點(diǎn) B(x1, y1),B點(diǎn)在圖像空間直角坐標(biāo)系可以確定N條直線,那么點(diǎn)B ( x 1 , y 1 ) ,但是在參數(shù)空間也有一條對(duì)應(yīng)的直線,與A ( x 0 , y 0 ) 確定的直線相較于M點(diǎn)。

(2)圖像空間中的直線與參數(shù)空間中的點(diǎn)一一對(duì)應(yīng)

圖像空間直角坐標(biāo)系x-y中的點(diǎn)A(x0,y0)和點(diǎn)B(x1,y1),在參數(shù)空間坐標(biāo)系k-b中對(duì)應(yīng)的直線相交于一點(diǎn),這也就是說(shuō)AB所確定的直線,在參數(shù)空間坐標(biāo)系中對(duì)應(yīng)著唯一一個(gè)點(diǎn),而這個(gè)點(diǎn)的坐標(biāo)值( k 0 , b 0 ) 也就是直線AB的參數(shù)。這就是直線檢測(cè)任務(wù)中的對(duì)偶性,這個(gè)性質(zhì)也為我們解決直線檢測(cè)任務(wù)提供了方法,也就是把圖像空間中的直線對(duì)應(yīng)到參數(shù)空間中的點(diǎn),最后通過(guò)統(tǒng)計(jì)特性來(lái)解決問(wèn)題。假如圖像空間中有兩條直線,那么最終在參數(shù)空間中就會(huì)對(duì)應(yīng)到兩個(gè)峰值點(diǎn),依此類推。

參數(shù)空間選擇了笛卡爾直角坐標(biāo)系是為了解釋偶性和霍夫變換的基本原理,但在實(shí)際應(yīng)用中,參數(shù)空間是不能選擇直角坐標(biāo)系的,原始圖像直角坐標(biāo)空間中的特殊直線x=c(c為常數(shù),垂直x軸,直線的斜率為無(wú)窮大)是沒(méi)辦法在基于直角坐標(biāo)系的參數(shù)空間中表示的,一般我們采用極坐標(biāo)方式作為參數(shù)空間。

空間直角坐標(biāo)系與極坐標(biāo)系的轉(zhuǎn)換

在下圖中可以看出,參數(shù)空間的每個(gè)點(diǎn)(r,θ)都對(duì)應(yīng)了圖像空間直角坐標(biāo)系的一條直線,或者說(shuō)圖像空間的一個(gè)點(diǎn)在參數(shù)空間中就對(duì)應(yīng)為一條曲線。參數(shù)空間采用極坐標(biāo)系,這樣就可以在參數(shù)空間表示圖像空間直角坐標(biāo)系中的所有直線了。此時(shí)圖像空間直角坐標(biāo)系x-y上的一個(gè)點(diǎn)對(duì)應(yīng)到參數(shù)空間(極坐標(biāo)系ρ-θ)上是一條曲線,確切的說(shuō)是一條正弦曲線。

經(jīng)過(guò)變換,圖像空間中的每個(gè)點(diǎn)(x,y)就被映射為一個(gè)(r,θ)極坐標(biāo)空間中的正弦曲線。而圖像空間直角坐標(biāo)系中共線的點(diǎn)所對(duì)應(yīng)的參數(shù)空間中正弦曲線相交于一點(diǎn)(r’,θ’)。這樣就把在圖像空間中檢測(cè)直線的問(wèn)題,轉(zhuǎn)化為在極坐標(biāo)參數(shù)空間中尋找通過(guò)點(diǎn)(r,θ)的最多正弦曲線數(shù)量的問(wèn)題?;舴蚩臻g中,曲線的交點(diǎn)次數(shù)越多,所代表的參數(shù)越確定(相交的曲線都是圖像空間直角坐標(biāo)系上的點(diǎn)),畫(huà)出的圖形越飽滿??臻g直角坐標(biāo)系上一條直線上的所有點(diǎn)都轉(zhuǎn)化為參數(shù)空間上的曲線,曲線一定會(huì)交于一個(gè)共同點(diǎn)。

三、霍夫變換直線檢測(cè) API函數(shù)接口

OpenCV支持三種霍夫直線檢測(cè)算法:

1)Standard Hough Transform(SHT,標(biāo)準(zhǔn)霍夫變換)

2)Multiscale Hough Transform(MSHT,多尺度霍夫變換)

3)Progressive Probability Houth Transform(PPHT,漸進(jìn)概率式霍夫變換)

(1)標(biāo)準(zhǔn)霍夫變換直線檢測(cè) cv::HoughLines從平面坐標(biāo)轉(zhuǎn)換到霍夫空間,最終輸出是 (θ,rθ) 表極坐標(biāo)空間。

霍夫直線變換API函數(shù)接口

cv::HoughLines( 
InputArray src, // 輸入圖像,必須8-bit的灰度圖像 
OutputArray lines, // 輸出的極坐標(biāo)來(lái)表示直線 ,經(jīng)過(guò)調(diào)用HoughLines函數(shù)后儲(chǔ)存了霍夫線變換檢測(cè)到線條 
                   //的輸出矢量(每一條線由具有兩個(gè)元素的矢量(rho,theta)表示)
double rho, // 生成極坐標(biāo)時(shí)候的像素掃描步長(zhǎng) 
double theta, //生成極坐標(biāo)時(shí)候的角度步長(zhǎng),一般取值CV_PI/180 
int threshold, // 閾值,只有獲得足夠交點(diǎn)的極坐標(biāo)點(diǎn)才被看成是直線 
double srn=0;// 是否應(yīng)用多尺度的霍夫變換,如果不是設(shè)置0表示經(jīng)典霍夫變換 
double stn=0;//是否應(yīng)用多尺度的霍夫變換,如果不是設(shè)置0表示經(jīng)典霍夫變換 
double min_theta=0; // 表示角度掃描范圍 0 ~180之間, 默認(rèn)即可 
double max_theta=CV_PI 
) // 一般情況是有經(jīng)驗(yàn)的開(kāi)發(fā)者使用,需要自己反變換到平面空間

HoughLines函數(shù)輸出檢測(cè)到直線的矢量表示集合,每一條直線由具有兩個(gè)元素的矢量(ρ, θ)表示,其中ρ表示直線距離原點(diǎn)(0, 0)的長(zhǎng)度,θ表示直線的角度(以弧度為單位)。HoughLines函數(shù)無(wú)法輸出圖像空間中線段的長(zhǎng)度。

(2)HoughLinesP:漸進(jìn)概率式霍夫變換

cv::HoughLinesP( 
InputArray src, // 輸入圖像,必須8-bit的灰度圖像 
OutputArray lines, // 輸出的極坐標(biāo)來(lái)表示直線 
double rho, // 生成極坐標(biāo)時(shí)候的像素掃描步長(zhǎng) 
double theta, //生成極坐標(biāo)時(shí)候的角度步長(zhǎng),一般取值CV_PI/180 
int threshold, // 閾值,只有獲得足夠交點(diǎn)的極坐標(biāo)點(diǎn)才被看成是直線 
double minLineLength=0;// 最小直線長(zhǎng)度 
double maxLineGap=0;// 最大間隔 
)

漸進(jìn)概率式霍夫變換直線檢測(cè) cv::HoughLinesP最終輸出是直線的兩個(gè)點(diǎn)。HoughLinesP能夠檢測(cè)出線端,即能夠檢測(cè)出圖像中直線的兩個(gè)端點(diǎn),確切地定位圖像中的直線。

四、霍夫直線變換實(shí)現(xiàn)車道線的檢測(cè)

(1)彩色圖像RBG轉(zhuǎn)化為灰度圖Gray,opencv上需要注意顏色空間是RGB還是BGR,CImg中RGB分別對(duì)應(yīng)0,1,2通道。

(2)因?yàn)榛舴驁A檢測(cè)對(duì)噪聲比較敏感,所以首先要對(duì)圖像做中值濾波(或者高斯濾波)去噪,平滑圖像,消除圖像噪聲。 

(3)圖像邊緣提?。ㄌ荻人阕?、拉普拉斯算子、canny邊緣檢測(cè)算法) 

(4)圖像二值化(判斷此處是否為邊緣點(diǎn),就看灰度值==255),在高斯去噪和邊界提取之后都需要二值化。

(5)映射到霍夫空間(此處準(zhǔn)備兩個(gè)容器,一個(gè)CImg用來(lái)展示hough-space概況,一個(gè)數(shù)組hough-space用來(lái)儲(chǔ)存voting的值,因?yàn)橥镀边^(guò)程往往有某個(gè)極大值超過(guò)255,多達(dá)幾千,不能直接用灰度圖來(lái)記錄投票信息)。

(6)取局部極大值,設(shè)定閾值,過(guò)濾低于閾值的像素,排除干擾直線

(7)繪制直線。

代碼實(shí)現(xiàn)

#include"stdafx.h"
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.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;
}

圖像處理效果 

到此這篇關(guān)于OpenCV利用霍夫變換實(shí)現(xiàn)交通車道線檢測(cè)的文章就介紹到這了,更多相關(guān)OpenCV車道線檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit詳解

    c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit詳解

    這篇文章主要介紹了c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • C++11新特性之列表初始化的具體使用

    C++11新特性之列表初始化的具體使用

    在我們實(shí)際編程中,我們經(jīng)常會(huì)碰到變量初始化的問(wèn)題,本文主要介紹了C++11新特性之列表初始化的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語(yǔ)言矩陣連乘 (動(dòng)態(tài)規(guī)劃)詳解

    C語(yǔ)言矩陣連乘 (動(dòng)態(tài)規(guī)劃)詳解

    這篇文章主要介紹了C語(yǔ)言矩陣連乘 (動(dòng)態(tài)規(guī)劃)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    C/C++是最能體現(xiàn)程序員能力的語(yǔ)言之一,其功能強(qiáng)大,在IT行業(yè)的各個(gè)方面都有大量的應(yīng)用。下面這篇文章主要介紹了總結(jié)了在C/C++面試中可能會(huì)碰到的字符串指針題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • C語(yǔ)言中炫酷的文件操作實(shí)例詳解

    C語(yǔ)言中炫酷的文件操作實(shí)例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時(shí)的,當(dāng)程序結(jié)束時(shí),它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語(yǔ)言提供了對(duì)文件的操作,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中文件操作的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • c++中的stack和dequeue解析

    c++中的stack和dequeue解析

    這篇文章主要介紹了c++中的stack和dequeue介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Visual Studio 2019修改編碼UTF-8的實(shí)現(xiàn)

    Visual Studio 2019修改編碼UTF-8的實(shí)現(xiàn)

    這篇文章主要介紹了Visual Studio 2019修改編碼UTF-8的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • c語(yǔ)言操作文本的基本使用方法

    c語(yǔ)言操作文本的基本使用方法

    這篇文章主要介紹了c語(yǔ)言操作文本的基本使用方法,需要的朋友可以參考下
    2014-04-04
  • C語(yǔ)言構(gòu)建連連看游戲(矩陣方式)

    C語(yǔ)言構(gòu)建連連看游戲(矩陣方式)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言構(gòu)建連連看游戲,采用矩陣方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 學(xué)習(xí)二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算的方法

    學(xué)習(xí)二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算的方法

    這片文章介紹了如何利用二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

太谷县| 旌德县| 清苑县| 大竹县| 桐庐县| 瓦房店市| 蓬安县| 孟村| 乌兰察布市| 洛阳市| 晋中市| 和静县| 江安县| 上杭县| 二连浩特市| 晋江市| 克拉玛依市| 石泉县| 山丹县| 新郑市| 肥城市| 平阳县| 永仁县| 辽源市| 海南省| 关岭| 克东县| 彰武县| 正阳县| 泾源县| 金湖县| 南川市| 永年县| 大安市| 潢川县| 房山区| 新余市| 永修县| 宜阳县| 安化县| 常宁市|