單目測(cè)距(目標(biāo)檢測(cè)+標(biāo)定+測(cè)距)
實(shí)時(shí)感知本車周圍物體的距離對(duì)高級(jí)駕駛輔助系統(tǒng)具有重要意義,當(dāng)判定物體與本車距離小于安全距離時(shí)便采取主動(dòng)剎車等安全輔助功能,這將進(jìn)一步提升汽車的安全性能并減少碰撞的發(fā)生。上一章本文完成了目標(biāo)檢測(cè)任務(wù),接下來需要對(duì)檢測(cè)出來的物體進(jìn)行距離測(cè)量。首先描述并分析了相機(jī)成像模型,推導(dǎo)了圖像的像素坐標(biāo)系與世界坐標(biāo)系之間的關(guān)系。其次,利用軟件標(biāo)定來獲取相機(jī)內(nèi)外參數(shù)并改進(jìn)了測(cè)距目標(biāo)點(diǎn)的選取。最后利用測(cè)距模型完成距離的測(cè)量并對(duì)采集到的圖像進(jìn)行仿真分析和方法驗(yàn)證。
5.1 單目視覺測(cè)距與雙目視覺測(cè)距對(duì)比
測(cè)距在智能駕駛的應(yīng)用中發(fā)揮著重要作用。測(cè)距方法主要包含兩類:主動(dòng)測(cè)距與被動(dòng)測(cè)距,主動(dòng)測(cè)距是當(dāng)前研究的熱點(diǎn)內(nèi)容之一。主動(dòng)測(cè)距方法包括采用傳感器、攝像機(jī)、激光雷達(dá)等車載設(shè)備進(jìn)行測(cè)距。攝像頭由于價(jià)格相對(duì)低廉且性能穩(wěn)定應(yīng)用較為廣泛,本文采用攝像頭進(jìn)行距離測(cè)量。
單目測(cè)距主要運(yùn)用測(cè)距模型結(jié)合目標(biāo)矩形框來進(jìn)行測(cè)距任務(wù),通過目標(biāo)在圖像中的大小位置信息去估算距離。單目測(cè)距算法具有計(jì)算量小、成本低廉的優(yōu)點(diǎn),并且測(cè)距誤差也可以通過后續(xù)的調(diào)校來消除,很多算法都在采用基于單目視覺傳感器來開發(fā)產(chǎn)品。因此相對(duì)其他測(cè)距方法,單目視覺有更成熟的算法,本文亦采用單目視覺測(cè)距。
利用雙目視覺可以獲取同一物體在成像平面上的像素偏移量。然后可以使用相機(jī)焦距、像素偏移以及兩個(gè)相機(jī)之間的實(shí)際距離從數(shù)學(xué)上得出對(duì)象之間的距離。與單目測(cè)距相比,雙目測(cè)距雖然更加精確,不需要數(shù)據(jù)集,但計(jì)算量大,速度相對(duì)較慢,而且由于使用了兩個(gè)攝像頭,成本也變得更高。
5.2 相機(jī)成像模型**
想要得到距離信息需要獲得三維真實(shí)世界里的點(diǎn),而由于處理的對(duì)像是攝像頭捕捉后的二維平面圖像,因此如何將二維圖像上的某個(gè)點(diǎn)轉(zhuǎn)換為三維世界里的點(diǎn)是值得考慮的問題。進(jìn)一步的,把圖像上的點(diǎn)轉(zhuǎn)換到真實(shí)世界的點(diǎn),就需要進(jìn)行像素坐標(biāo)系、圖像坐標(biāo)系、相機(jī)坐標(biāo)系以及世界坐標(biāo)系之間的相互轉(zhuǎn)換。四種坐標(biāo)系之間的相互關(guān)系如圖5-1所示。坐標(biāo)系描述如下: ****
(1)像素坐標(biāo)系。數(shù)字圖像一般是三維圖像并且由眾多像素點(diǎn)組合而成的,像素坐標(biāo)系的原點(diǎn)為O2,以寬度方向?yàn)閡軸,以高度方向?yàn)関軸。
(2)圖像坐標(biāo)系。圖像坐標(biāo)原點(diǎn)為O1,并且像素坐標(biāo)系和圖像坐標(biāo)系是平行的,以圖像寬度方向?yàn)閤軸,以高度方向?yàn)閥軸,長(zhǎng)度單位為mm。
(3)相機(jī)坐標(biāo)系。相機(jī)坐標(biāo)系原點(diǎn)Oc,Xc軸、Yc軸分別是與圖像坐標(biāo)系下的x軸、y軸相互平行,相機(jī)Zc軸和攝像頭光軸重合。
(4)世界坐標(biāo)系。我們所處的環(huán)境即是在世界坐標(biāo)系之下,也就是圖5-1中Xw-Yw-Zw平面。Pw通過真實(shí)世界上的一點(diǎn)至圖像上的P點(diǎn),完成從世界坐標(biāo)到圖像上坐標(biāo)的轉(zhuǎn)換。
5.3 坐標(biāo)系轉(zhuǎn)換
(1)像素坐標(biāo)系轉(zhuǎn)換到圖像坐標(biāo)系
像素坐標(biāo)系是以像素來表示各個(gè)像素位置信息的,但是它不能夠表達(dá)出圖像中物體的物理大小,因此需要進(jìn)行坐標(biāo)系之間的轉(zhuǎn)換。
圖5-2 圖像坐標(biāo)系
在圖5-2中,圖像坐標(biāo)系的坐標(biāo)(x,y)與像素坐標(biāo)系的坐標(biāo)(u,v)之間的關(guān)系可以表示為:
(5.1)
式(5.1)中,(u0,v0)是圖像中心的像素坐標(biāo),dx、dy分別是橫向和縱向像素在感光板上的單位物理長(zhǎng)度。
寫成齊次坐標(biāo)矩陣的形式為:
(5.2)
# (2)圖像坐標(biāo)系變換到相機(jī)坐標(biāo)系
**圖5-3 相機(jī)坐標(biāo)系**
在圖5-3中,OcO1之間的距離為焦距f。圖5-4表示了物體成像到圖像坐標(biāo)系的過程,P點(diǎn)、 P'點(diǎn)分別為相機(jī)坐標(biāo)系和圖像坐標(biāo)系下的坐標(biāo)。
圖5-4 相似三角形模型
由上圖易知,三角形OcO1B和三角形OcCA相似,三角形OcBP'和三角形OcAP相似,根據(jù)相似三角形原理有:
(5.3)
并且OcO1的距離為焦距f,結(jié)合P(Xc,Yc,Zc),P'(x,y)點(diǎn)坐標(biāo),上式可寫為:
(5.4)
進(jìn)一步推倒可得:
將其寫成齊次坐標(biāo)矩陣的形式為:
(5.5)
(3)相機(jī)坐標(biāo)系變換到世界坐標(biāo)系
**圖5-5相機(jī)坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換**
相機(jī)坐標(biāo)系變換到世界坐標(biāo)系可以描述為一個(gè)旋轉(zhuǎn)平移的過程,分別將旋轉(zhuǎn)和平移的分量加起來就是整個(gè)坐標(biāo)系轉(zhuǎn)換的全過程了。對(duì)于旋轉(zhuǎn)過程,假設(shè)相機(jī)坐標(biāo)系的Z軸與世界坐標(biāo)系重合,那么有:
(5.6)
同理,繞X軸旋轉(zhuǎn)會(huì)得到如下關(guān)系:
(5.7)
繞Y軸旋轉(zhuǎn)會(huì)得到如下關(guān)系:
(5.8)
對(duì)于平移分量來說,可以表達(dá)為:
(5.9)
得到平移向量和旋轉(zhuǎn)矩陣后,從相機(jī)坐標(biāo)系變換到世界坐標(biāo)系的公式可以完整的寫為:
(5.10)
其中旋轉(zhuǎn)矩陣R為:
,平移矩陣T表示為:。結(jié)合式(5.2),式(5.5),式(5.10),就完成了從像素坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換,整合起來為:
(5.11)
這樣針對(duì)圖像上的一個(gè)點(diǎn),就可以利用上述公式結(jié)合相機(jī)內(nèi)外參數(shù)求解出具體的距離值。
5.4 相機(jī)內(nèi)外參數(shù)與畸變系數(shù)
相機(jī)內(nèi)外參數(shù)對(duì)圖像矯正和測(cè)距具有重要意義。內(nèi)外參數(shù)以及畸變系數(shù)可以通過相機(jī)標(biāo)定得到機(jī)。并且相機(jī)都會(huì)發(fā)生畸變,這對(duì)于測(cè)量來說顯然是不能容忍的,因此消除畸變是十分有必要的
5.4.1相機(jī)內(nèi)外參數(shù)
在公式(5.11)中,等號(hào)右端第一項(xiàng)為相機(jī)的外參數(shù),等號(hào)右端第二項(xiàng)表示為相機(jī)內(nèi)參數(shù),內(nèi)參屬于相機(jī)內(nèi)在屬性。式中未知參數(shù)Zc表示物體到光學(xué)中心的距離。同時(shí)也說明了,在相機(jī)標(biāo)定的過程中,如果物體相對(duì)于相機(jī)的位置不同,那么需要對(duì)于每一個(gè)位置都需要去進(jìn)行相機(jī)標(biāo)定。
5.4.2相機(jī)畸變系數(shù)
相機(jī)畸變?cè)斐闪藞D像平面上某一像素點(diǎn)的真實(shí)位置與理想位置不完全重合的現(xiàn)象,因此了解相機(jī)畸變現(xiàn)象并對(duì)相機(jī)進(jìn)行矯正十分有必要。相機(jī)畸變主要包括徑向畸變和切向畸變二類。圖5-6展示了畸變模型,對(duì)于平面上任意理論點(diǎn)P,由與畸變的存在,會(huì)使得P點(diǎn)偏移到P'點(diǎn)。圖中dr表示相機(jī)的徑向畸變,dt表示相機(jī)的切向畸變。
圖5-6 相機(jī)畸變模型
(1)徑向畸變
徑向畸變與透鏡的形狀密切相關(guān),而且離透鏡中心越遠(yuǎn)的地方畸變?cè)矫黠@。徑向畸變大都表現(xiàn)為桶形畸變和枕型畸變兩種方式?;兊亩囗?xiàng)調(diào)節(jié)公式為:
(5.12)
其中(xi,yi)是圖像平面上的理想點(diǎn)。(x0,y0)是畸變矯正后實(shí)際位置點(diǎn)。理想點(diǎn)與成像中心的距離,k1,k2,k3表示為相機(jī)徑向畸變系數(shù)。如果這三個(gè)系數(shù)都小于零,那么將造成桶型畸變;如果三個(gè)系數(shù)均都大于零,則將造成枕型畸變。
(2)切向畸變
切向畸變的產(chǎn)生大都由于整個(gè)攝像機(jī)的組裝和制造過程。對(duì)于切向畸變來說,可以使用兩個(gè)切向畸變系數(shù)p1和p2進(jìn)行糾正。
得到上述矯正公式后就可以完成對(duì)圖像良好的修正。將切向矯正函數(shù)與徑向矯正函數(shù)聯(lián)合起來后,可以用如下公式表示:
(5.14)
由于本文測(cè)距是面向自動(dòng)駕駛領(lǐng)域,其對(duì)精度要求很高,畸變會(huì)對(duì)智能駕駛性能造成深遠(yuǎn)的負(fù)面影響。所以在這些應(yīng)用中,系統(tǒng)必須使用相機(jī)標(biāo)定法求取 p1和p2以及k1、k2和k3,并且這些參數(shù)后續(xù)測(cè)距模型也將應(yīng)用到。
5.5 相機(jī)標(biāo)定流程
相機(jī)標(biāo)定可以獲得畸變參數(shù)和相機(jī)內(nèi)外參數(shù),相機(jī)的標(biāo)定可以分為依賴于標(biāo)定參照物的標(biāo)定方法和相機(jī)自標(biāo)定方法兩種。前者適用于對(duì)精度要求高的應(yīng)用場(chǎng)合。后者由于標(biāo)定后的計(jì)算結(jié)果會(huì)產(chǎn)生較大的誤差,因此不適用于對(duì)精確度要求很高的應(yīng)用場(chǎng)景。為了追求計(jì)算精度,本文采取第一種方法進(jìn)行標(biāo)定。
采用matlab進(jìn)行標(biāo)定:
上圖為引用圖片。
通過采集標(biāo)定板的圖片,然后喂入matlab 獲取相機(jī)內(nèi)參。外參。
5.6 單目測(cè)距模型
在完成了相機(jī)畸變矯正和相機(jī)內(nèi)外參數(shù)的求取之后,建立了如下的單目測(cè)距模型,再結(jié)合第四章目標(biāo)檢測(cè)獲取的矩形框就可以進(jìn)行距離的求取。
圖5-10 測(cè)距模型
測(cè)距模型可以看作是一個(gè)凸透鏡成像的過程。上圖中,Xc-Yc-Zc是相機(jī)坐標(biāo)系,xO1y是圖像坐標(biāo)系,O1O為焦距f,x1O2y1是地面坐標(biāo)系,OO2為攝像頭安裝高度h。圖中有一輛車在地面上,那么其接地點(diǎn)Q必定在地面上。在單目測(cè)距過程中,實(shí)際物體上的Q點(diǎn)在成像的圖片上對(duì)應(yīng)Q'點(diǎn),Q'點(diǎn)在y軸上的投影為P'點(diǎn)。水平線與Zc軸的夾角為α,Zc光軸與PP'的夾角為β,直線OP與地面x1軸的夾角為γ。
5.6.1目標(biāo)點(diǎn)的選取
根據(jù)第四章的運(yùn)行結(jié)果將獲得圖5-11中的目標(biāo)檢測(cè)框,并且已知相機(jī)內(nèi)外參數(shù),將其聯(lián)合起來就可以得到測(cè)距值。具體的本文首先要選取參考點(diǎn)(目標(biāo)點(diǎn)),擬選取目標(biāo)框底部中點(diǎn)位置作為參考點(diǎn),并根據(jù)大量目標(biāo)框的獲取結(jié)果。觀察到目標(biāo)矩形框比目標(biāo)物實(shí)際尺寸略大,因此采取偏移的方式對(duì)目標(biāo)參考點(diǎn)進(jìn)行矯正以保證測(cè)距精確度。本文采取讓參考點(diǎn)向上偏移d個(gè)像素點(diǎn),并且獲取的是目標(biāo)框的左上角和右下角坐標(biāo),因此參考點(diǎn)坐標(biāo)可以表示為:
(5.15)
其中xL、xR、yR表示紅色框的左上角x坐標(biāo)、右下角x坐標(biāo)、右下角y坐標(biāo)。
圖5-11 目標(biāo)點(diǎn)的選取
然而上述目標(biāo)點(diǎn)適合前方物體在本車正前方的場(chǎng)景,當(dāng)面對(duì)場(chǎng)景如圖5-12時(shí),目標(biāo)物會(huì)出現(xiàn)在本車側(cè)方位置。如果再把目標(biāo)框下部中點(diǎn)作為測(cè)距目標(biāo)點(diǎn),會(huì)出現(xiàn)目標(biāo)點(diǎn)嚴(yán)重偏離車輛正下方的問題,存在目標(biāo)點(diǎn)出現(xiàn)在汽車中心位置左側(cè)或中心右側(cè)的現(xiàn)象,這會(huì)造成測(cè)距精度不高的缺點(diǎn)。因此,進(jìn)一步的對(duì)其進(jìn)行改進(jìn),當(dāng)目標(biāo)點(diǎn)(xp,yp)與圖像下部中點(diǎn)斜率k滿足閾值δ時(shí),就會(huì)更新xp'的值,新的xp'可以表示為:
(5.16)
其中λ為偏移權(quán)重系數(shù),當(dāng)k值為負(fù)時(shí),λ為負(fù);當(dāng)k值為正時(shí),λ也為正文章來源:http://www.zghlxwxcb.cn/news/detail-415885.html
測(cè)量結(jié)果
實(shí)測(cè)6.01米文章來源地址http://www.zghlxwxcb.cn/news/detail-415885.html
代碼
for path, img, im0s, vid_cap in dataset:
img = torch.from_numpy(img).to(device)
img = img.half() if half else img.float() # uint8 to fp16/32
img /= 255.0 # 0 - 255 to 0.0 - 1.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
# Warmup
if device.type != 'cpu' and (old_img_b != img.shape[0] or old_img_h != img.shape[2] or old_img_w != img.shape[3]):
old_img_b = img.shape[0]
old_img_h = img.shape[2]
old_img_w = img.shape[3]
for i in range(3):
model(img, augment=opt.augment)[0]
# Inference
t1 = time_synchronized()
with torch.no_grad(): # Calculating gradients would cause a GPU memory leak
pred = model(img, augment=opt.augment)[0]
t2 = time_synchronized()
distance=object_point_world_position(u, v, h, w, out_mat, in_mat):
代碼獲?。赫?qǐng)私信
到了這里,關(guān)于單目測(cè)距(yolo目標(biāo)檢測(cè)+標(biāo)定+測(cè)距代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!