13. OpenCV--直線&圓檢測

》》點(diǎn)贊肥隆,收藏+關(guān)注,理財(cái)&技術(shù)不迷路《《

目錄:

13.1 直線檢測

13.1.1 霍夫直線變換

定義:

霍夫變換(Hough Transform)是圖像處理中的一種特征提取技術(shù)鸥鹉,可以識(shí)別圖像中的幾何形狀撑帖。它將圖像空間中的特征點(diǎn)映射到參數(shù)空間進(jìn)行投票筐眷,通過檢測累計(jì)結(jié)果的局部極值點(diǎn)得到一個(gè)符合某特定形狀的點(diǎn)的集合。經(jīng)典霍夫變換用來檢測圖像中的直線垒手,后來霍夫變換擴(kuò)展到任意形狀物體的識(shí)別蒜焊,多為圓和橢圓。它的抗噪聲科贬、抗形變能力較強(qiáng)泳梆。另一種直線提取的方法是對圖像邊緣點(diǎn)進(jìn)行鏈碼追蹤,在得到的鏈碼串中提取直線榜掌。

霍夫變換將在一個(gè)空間中具有相同形狀的曲線或直線映射到另一個(gè)坐標(biāo)空間的一個(gè)點(diǎn)上形成峰值优妙,從而把檢測任意形狀的問題轉(zhuǎn)化為統(tǒng)計(jì)峰值問題。

標(biāo)準(zhǔn)霍夫變換:

考慮點(diǎn)和線的對應(yīng)關(guān)系憎账,過一點(diǎn)(x1,y1)的直線可表示為:y1=kx1+b套硼,將變量和參數(shù)互換,已知一個(gè)點(diǎn)(x1,y1),經(jīng)過這一點(diǎn)的直線簇可以表示為b=(-x1)k+y1胞皱。位于同一條直線上的點(diǎn)具有相同的斜率和截距邪意,反映到參數(shù)空間上就是這些直線會(huì)交于同一點(diǎn)(k,b)。

舉個(gè)例子:圖像空間有三個(gè)點(diǎn)(1反砌,1)抄罕,(2,2)于颖,(3,3)嚷兔,他們在直線y=1*x+0上森渐,如下圖所示

互換參數(shù)做入,在參數(shù)空間里這三個(gè)點(diǎn)對應(yīng)三條直線:1=k+b,2=2*k+b,3=3*k+b,交于同一點(diǎn)(1同衣,0)竟块,這一點(diǎn)即圖像空間中直線的斜率和截距,如果我們能得到這些點(diǎn)耐齐,也就得到了圖像空間的直線:

由于上面的變換不能表示斜率為無窮大的情況浪秘,因此,采用極坐標(biāo)的方式:Rho = X * Cos(Theta) + Y * Sin(Theta):

在實(shí)際操作時(shí)埠况,步驟如下:

1耸携、得到圖像的邊緣信息;

2辕翰、對邊緣圖像中的每一個(gè)點(diǎn)夺衍,在k-b空間中畫出一條直線;

3喜命、對各直線上的點(diǎn)沟沙,我們采取“投票”(vote)的方法,即累加:有直線經(jīng)過這一點(diǎn)壁榕,這一點(diǎn)的值加1矛紫;

4、遍歷k-b空間牌里,找出局部極大值點(diǎn)颊咬,這些點(diǎn)的坐標(biāo)(k,b)就是原圖像中可能的直線的斜率和截距二庵。

霍夫變換的計(jì)算量和存儲(chǔ)都是很大的贪染。

同樣的原理,我們可以用來檢測圓催享,等式變?yōu)椋?x –a ) ^2 + (y-b) ^ 2 = r^2杭隙,這樣霍夫的參數(shù)空間就變成一個(gè)三維參數(shù)空間。若給定圓的半徑則簡化為二維霍夫參數(shù)空間因妙。

實(shí)例:


13.1.2 API介紹

霍夫line直線檢測痰憎,是基于canny邊緣檢測基礎(chǔ)上的。

opencv這個(gè)API只封裝了兩步攀涵。第一步就是翻遍環(huán)(R和theta到直線)

void HoughLines( InputArray image, OutputArray lines,

  double rho, double theta, int threshold,

  double srn = 0, double stn = 0,

  double min_theta = 0, double max_theta = CV_PI );

參數(shù)說明:

InputArray image:輸入圖像铣耘,必須是8位單通道圖像,推薦使用canny邊緣檢測的結(jié)果圖像以故。

OutputArray lines:檢測到的線條參數(shù)集合蜗细。

double rho:以像素為單位的距離步長,推薦用1.0 。

double theta:以弧度為單位的角度步長炉媒,推薦用CV_PI/180踪区。

int threshold:累加計(jì)數(shù)值的閾值參數(shù),當(dāng)參數(shù)空間某個(gè)交點(diǎn)的累加計(jì)數(shù)的值超過該閾值吊骤,則認(rèn)為該交點(diǎn)對應(yīng)了圖像空間的一條直線缎岗。

double srn:默認(rèn)值為0,用于在多尺度霍夫變換中作為參數(shù)rho的除數(shù)白粉,rho=rho/srn传泊。

double stn:默認(rèn)值為0,用于在多尺度霍夫變換中作為參數(shù)theta的除數(shù)鸭巴,theta=theta/stn眷细。

如果srn和stn同時(shí)為0,就表示HoughLines函數(shù)執(zhí)行標(biāo)準(zhǔn)霍夫變換奕扣,否則就是執(zhí)行多尺度霍夫變換薪鹦。


13.2 圓檢測

13.2.1 霍夫圓檢測原理

霍夫圓變換:的基本原理和上個(gè)教程中提到的霍夫線變換類似, 只是點(diǎn)對應(yīng)的二維極徑極角空間被三維的圓心點(diǎn)x, y還有半徑r空間取代。

霍夫圓變換和霍夫線變換的原理類似惯豆〕卮牛霍夫線變換是兩個(gè)參數(shù)(r,θ),霍夫圓需要三個(gè)參數(shù)楷兽,圓心的x,y坐標(biāo)和圓的半徑,他的方程表達(dá)式(x?a)2+(y?b)2=c2,按照標(biāo)準(zhǔn)霍夫線變換思想地熄,在xy平面,三個(gè)點(diǎn)在同一個(gè)圓上芯杀,則它們對應(yīng)的空間曲面相交于一點(diǎn)(即點(diǎn)(a,b,c))端考。故我們?nèi)绻酪粋€(gè)邊界上的點(diǎn)的數(shù)目,足夠多揭厚,且這些點(diǎn)與之對應(yīng)的空間曲面相交于一點(diǎn)却特。則這些點(diǎn)構(gòu)成的邊界,就接近一個(gè)圓形筛圆。上述描述的是標(biāo)準(zhǔn)霍夫圓變換的原理裂明,由于三維空間的計(jì)算量大大增大的原因, 標(biāo)準(zhǔn)霍夫圓變化很難被應(yīng)用到實(shí)際中。

具體可以參考下圖:

以左圖三個(gè)點(diǎn)為圓心太援,做三個(gè)虛線圓闽晦,虛線圓焦點(diǎn)交于紅色點(diǎn),那么紅色點(diǎn)就是最亮的點(diǎn)(因?yàn)橹底畲筇岵恚奂悠飨沈龋恿巳慰隙ㄊ亲畲笠沧盍?。


13.2.2 API 與實(shí)例

C++: void HoughCircles(InputArray image,OutputArray circles, int method, double dp, double minDist, double param1=100,double param2=100, int minRadius=0, int maxRadius=0 )

第一個(gè)參數(shù)碱蒙,InputArray類型的image荠瘪,輸入圖像,即源圖像,需為8位的灰度單通道圖像哀墓。

第二個(gè)參數(shù)鞭莽,InputArray類型的circles,經(jīng)過調(diào)用HoughCircles函數(shù)后此參數(shù)存儲(chǔ)了檢測到的圓的輸出矢量麸祷,每個(gè)矢量由包含了3個(gè)元素的浮點(diǎn)矢量(x, y, radius)表示。

第三個(gè)參數(shù)褒搔,int類型的method阶牍,即使用的檢測方法,目前OpenCV中就霍夫梯度法一種可以使用星瘾,它的標(biāo)識(shí)符為CV_HOUGH_GRADIENT走孽,在此參數(shù)處填這個(gè)標(biāo)識(shí)符即可。

第四個(gè)參數(shù)琳状,double類型的dp磕瓷,用來檢測圓心的累加器圖像的分辨率于輸入圖像之比的倒數(shù),且此參數(shù)允許創(chuàng)建一個(gè)比輸入圖像分辨率低的累加器念逞。上述文字不好理解的話困食,來看例子吧。例如翎承,如果dp= 1時(shí)硕盹,累加器和輸入圖像具有相同的分辨率。如果dp=2叨咖,累加器便有輸入圖像一半那么大的寬度和高度瘩例。

第五個(gè)參數(shù),double類型的minDist甸各,為霍夫變換檢測到的圓的圓心之間的最小距離垛贤,即讓我們的算法能明顯區(qū)分的兩個(gè)不同圓之間的最小距離。這個(gè)參數(shù)如果太小的話趣倾,多個(gè)相鄰的圓可能被錯(cuò)誤地檢測成了一個(gè)重合的圓聘惦。反之,這個(gè)參數(shù)設(shè)置太大的話誊酌,某些圓就不能被檢測出來了部凑。

第六個(gè)參數(shù),double類型的param1碧浊,有默認(rèn)值100涂邀。它是第三個(gè)參數(shù)method設(shè)置的檢測方法的對應(yīng)的參數(shù)。對當(dāng)前唯一的方法霍夫梯度法CV_HOUGH_GRADIENT箱锐,它表示傳遞給canny邊緣檢測算子的高閾值比勉,而低閾值為高閾值的一半。

第七個(gè)參數(shù),double類型的param2浩聋,也有默認(rèn)值100观蜗。它是第三個(gè)參數(shù)method設(shè)置的檢測方法的對應(yīng)的參數(shù)。對當(dāng)前唯一的方法霍夫梯度法CV_HOUGH_GRADIENT衣洁,它表示在檢測階段圓心的累加器閾值墓捻。它越小的話,就可以檢測到更多根本不存在的圓坊夫,而它越大的話砖第,能通過檢測的圓就更加接近完美的圓形了。

第八個(gè)參數(shù)环凿,int類型的minRadius,有默認(rèn)值0梧兼,表示圓半徑的最小值。

第九個(gè)參數(shù)智听,int類型的maxRadius,也有默認(rèn)值0羽杰,表示圓半徑的最大值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末到推,一起剝皮案震驚了整個(gè)濱河市考赛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌环肘,老刑警劉巖欲虚,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悔雹,居然都是意外死亡复哆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門腌零,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梯找,“玉大人,你說我怎么就攤上這事益涧⌒獯福” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵闲询,是天一觀的道長久免。 經(jīng)常有香客問我,道長扭弧,這世上最難降的妖魔是什么阎姥? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮鸽捻,結(jié)果婚禮上呼巴,老公的妹妹穿的比我還像新娘泽腮。我一直安慰自己,他們只是感情好衣赶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布诊赊。 她就那樣靜靜地躺著,像睡著了一般府瞄。 火紅的嫁衣襯著肌膚如雪碧磅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天遵馆,我揣著相機(jī)與錄音续崖,去河邊找鬼。 笑死团搞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的多艇。 我是一名探鬼主播逻恐,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼峻黍!你這毒婦竟也來了复隆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姆涩,失蹤者是張志新(化名)和其女友劉穎挽拂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骨饿,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亏栈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏赘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绒北。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖察署,靈堂內(nèi)的尸體忽然破棺而出闷游,到底是詐尸還是另有隱情,我是刑警寧澤贴汪,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布脐往,位于F島的核電站,受9級(jí)特大地震影響扳埂,放射性物質(zhì)發(fā)生泄漏业簿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一聂喇、第九天 我趴在偏房一處隱蔽的房頂上張望辖源。 院中可真熱鬧蔚携,春花似錦、人聲如沸克饶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾湃。三九已至亡脑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邀跃,已是汗流浹背霉咨。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拍屑,地道東北人途戒。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像僵驰,于是被迫代替她去往敵國和親喷斋。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359