chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解自動泊車之AVM環(huán)視系統(tǒng)算法

新機器視覺 ? 來源:新機器視覺 ? 2023-01-16 15:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文的內(nèi)容為在上一篇avm的進(jìn)階版,主要講述AVM 3D算法pipeline,一種自研提取角點標(biāo)定方法,汽車輔助視角。每個部分都涵蓋了完整的算法理論以及部分代碼,適合有一些計算機視覺基礎(chǔ)的同學(xué),或許可以給相關(guān)方向的同學(xué)做些參考。

一. 一種更優(yōu)的聯(lián)合標(biāo)定方案

1.1 算法原理分析

在前面的工作中,我們調(diào)用opencv函數(shù)findChessboardCorners提取圖像上位于標(biāo)定布中間的棋盤格角點,然后計算投影矩陣H。在SLAM 14講中[1],計算H就是求解Ax=0這樣一個問題。其原理就是構(gòu)造一個最小二乘的形式,用奇異值分解的方式來計算一個誤差最小的解。而為了逼近這個最小誤差,可能造成除了棋盤格角點以外的其他像素值的投影誤差很大。換句話說,由于棋盤格角點集中于鳥瞰圖的中心很小的一部分區(qū)域,如果選擇棋盤格角點進(jìn)行H的計算,會導(dǎo)致只有棋盤格附近的區(qū)域能夠進(jìn)行準(zhǔn)確的投影,遠(yuǎn)離該區(qū)域會有較大誤差。類似于nn的訓(xùn)練數(shù)據(jù)過于局限,訓(xùn)練的模型過擬合了。這也就能夠解釋為什么在之前的工作中,我們的鳥瞰圖拼接區(qū)域總是拼不齊,就是因為我們選擇的角點遠(yuǎn)離拼接區(qū)域,計算出的投影矩陣H在拼接區(qū)域的投影誤差太大。

我們開發(fā)了一種基于自動提取角點算法的汽車標(biāo)定方法,該方法可以提取標(biāo)定布上拼接區(qū)域黑色方格的角點。如圖所示:

32ca0552-94dc-11ed-bfe3-dac502259ad0.png拼接區(qū)域角點提取

通過提取拼接區(qū)域的角點最終獲得的全景鳥瞰圖與前面工作的對比如下,左側(cè)為以前的工作中提取棋盤格角點的方法且沒有使用光流微調(diào),右側(cè)是我們提取拼接區(qū)域角點的拼接結(jié)果。差別就很大。

32f2250a-94dc-11ed-bfe3-dac502259ad0.png左:提取棋盤格角點 右:提取拼接區(qū)域角點

再仔細(xì)想想這樣做是很合理的,因為AVM產(chǎn)品中最影響駕駛體驗的就是拼接區(qū)域的偽影,其他一切都好說。標(biāo)定布的測量誤差會導(dǎo)致單應(yīng)矩陣計算不準(zhǔn)確,這一問題是無法避免的,我們選擇拼接區(qū)域的特征點計算單應(yīng)矩陣,使得拼接區(qū)域的拼接結(jié)果非常準(zhǔn)確。隨之而來的可能是其他區(qū)域的不準(zhǔn)確,例如貼近車身周圍的棋盤格區(qū)域,但是這些區(qū)域用戶并不care,雖然車身周圍會引入些許誤差,但只要車身與周圍環(huán)境的的相對位置呈現(xiàn)的正確,不會引起碰撞事故,對于駕駛員來講就是OK的。

以上就是為什么我們要開發(fā)一種基于自動提取角點算法的汽車標(biāo)定方法。

1.2 基于自動提取角點算法的汽車標(biāo)定方法

3329f7fa-94dc-11ed-bfe3-dac502259ad0.png標(biāo)定場景

對于標(biāo)定布上的棋盤格,我們可以使用opencv的角點檢測函數(shù)findChessboardCorners來提取,建議讀者自行閱讀該函數(shù)源碼,我們提出的方法的思路就來源于這個算法。下面我們來簡述我們提取大方格角點的方法:

算法流程:

  1. 雙峰自適應(yīng)閾值二值化
  2. 多邊形檢測
  3. 四邊形篩選
  4. 提取四邊形頂點
  • 雙峰自適應(yīng)閾值二值化

大體思路為:計算圖像的亮度直方圖。分別計算暗區(qū)局部極大值,亮區(qū)局部極大值,即“雙峰”。計算雙峰亮度的平均值,作為閾值,來對圖像做二值化。因此稱為“雙峰自適應(yīng)閾值”。

3352d148-94dc-11ed-bfe3-dac502259ad0.png

解釋下這樣做的理論基礎(chǔ):標(biāo)定布上的大塊黑色方格被白色布包圍在中間,我們的目的是將標(biāo)定布上的黑色方格與白色布通過某個閾值分割開。通常白色布的亮度值在直方圖亮部閾值附近,黑色方塊的亮度值在直方圖暗部閾值附近。因此取兩個亮度峰值取平均,一定可以將黑色方塊與白色標(biāo)定布分開。當(dāng)然,光照條件不能過于惡劣,對于這一點即便是opencv提取棋盤格的方法也要限定光照條件。

337cd5f6-94dc-11ed-bfe3-dac502259ad0.png基于自適應(yīng)閾值的二值化
  • 多邊形檢測以及四邊形篩選

約束條件

  1. 多邊形擬合結(jié)果必須為四邊形,即篩選出二值化圖中的四邊形
  2. 四邊形面積必須大于某閾值(opencv源碼中這個超參適用于篩選棋盤格的,我們要把這個閾值搞得大一些,用于篩選大方格)
  3. 相鄰邊長不可相差過多
  4. 選取黑色的四邊形,而不是白色的四邊形
  5. 限制四邊形分布范圍,即四邊形不能過于靠近圖像邊緣,具體情況與相機的位姿相關(guān)
  • 使用上述約束條件篩選出大方格的角點。

綜上,使用這種方法提取出的角點分布得更廣泛,且都在鳥瞰圖的分布區(qū)域,因此拼接融合得效果更佳。

二. AVM輔助視角——基于外參的視角變換

本章節(jié)主要講述單應(yīng)矩陣與PNP的原理,以及它們在AVM輔助視角中的實際應(yīng)用,附帶部分代碼。

關(guān)鍵詞:單應(yīng)矩陣、PNP、標(biāo)定、廣角、超廣角、車輪視角、越野模式

車載魚眼相機可以獲取到范圍非常大的內(nèi)容,但是魚眼圖像并不能夠在汽車行駛過程中給駕駛員提供符合人類視覺習(xí)慣的視頻圖像,這一章節(jié)主要來講述如何利用魚眼相機的圖像信息,來提供各種輔助視角。

例如:

(1)在進(jìn)出車位或經(jīng)過狹小空間時,駕駛員會更加關(guān)注車輪位置的內(nèi)容,那么我們需要使用某種算法對左側(cè)、右側(cè)的魚眼相機拍攝到的內(nèi)容進(jìn)行處理,得到“車輪視角”;

(2)對于正前方、正后方,我們提供了廣角、超廣角。超廣角由前方魚眼相機通過多次投影變換得到。

(3)左右視角根據(jù)不同的要求,我們提供三種不同的輔助視角

從以上的demo中不難看出,我們是通過投影變換的方法,將魚眼相機的圖像從本身相機部署的視角,轉(zhuǎn)換為我們想要的視角。例如:對于車輪視角的demo,不難看出這個輔助視角中全部都是左、右兩側(cè)的魚眼相機中的內(nèi)容。已知這兩個魚眼相機A和B的位姿為:朝向左右兩側(cè)的地面;而我們實際想獲取的車輪視角對應(yīng)的相機a和b擺放位姿應(yīng)該為朝向前方偏下,即朝向車輪的那個位置,這是兩個虛擬的相機。那么如果我們通過標(biāo)定+PNP的方法計算出右側(cè)鳥瞰相機A與右側(cè)虛擬相機a之間的位姿關(guān)系Rt,進(jìn)一步地計算出A、a這兩個不同位姿下拍攝某個平面(地面)時,他們之間的投影關(guān)系H,就可以將實際的魚眼相機視角A轉(zhuǎn)換為虛擬的車輪視角a。左側(cè)魚眼相機B視角與左側(cè)虛擬車輪視角b同理。

2.1 單應(yīng)矩陣H的原理

有CV基礎(chǔ)的同學(xué)們大多知道單應(yīng)矩陣表示“一個平面到另外一個平面的變換關(guān)系”。這樣的描述是不準(zhǔn)確的,或者如果對單應(yīng)矩陣僅能說出這些,說明對單應(yīng)矩陣的認(rèn)識是片面的。正確的理解應(yīng)該是:H描述的是在不同位姿下的兩個相機cam1,cam2拍攝同一個平面(例如標(biāo)定板),這個平面在兩個相機成像平面上的成像結(jié)果之間的變換關(guān)系。投影變換模型圖如下。以上這段話,被很多人簡單理解成了“H描述的是兩張圖象之間的變換關(guān)系”,這里有兩個點需要注意:(1)不要忽略掉了前面那部分和相機投影相關(guān)的物理模型(2)H描述的是空間中的某個平面分別在兩個相機圖像平面上的成像結(jié)果之間的變換,而不是兩個圖像之間的變換。

對于單應(yīng)矩陣,我們可以思考一個問題:我們拍攝到的內(nèi)容,大多數(shù)情況下不僅僅包含某一個平面。而我們在做投影變換的時候,H就是基于某個平面計算出來的,這會導(dǎo)致雖然圖像中的該平面部分的投影是合理的,但是因為平面以外的其他部分依然用相同的H做投影,這些部分的投影結(jié)果就會顯得非常的奇怪。

相信很多同學(xué)聽說過一個結(jié)論:基于H的圖像拼接方法,比較適用于視距較遠(yuǎn)的環(huán)境下。這是因為視距較遠(yuǎn)的環(huán)境下,拍攝到的景象我們可以近似認(rèn)為它們在同一個平面上,那么我們基于這個平面計算出來的H,就幾乎適用于整個圖像中的內(nèi)容。

我們從最基礎(chǔ)的相機物理模型來推導(dǎo)一遍單應(yīng)矩陣H的公式,這樣有利于我們更深入地理解。(本文僅推導(dǎo)這一個公式,通過物理模型對單應(yīng)矩陣進(jìn)行推導(dǎo)對后面的算法理解十分重要)

如圖所示,同一個相機在A,B兩個位置以不同的位姿拍攝同一個平面:

338a07da-94dc-11ed-bfe3-dac502259ad0.png投影變換模型

圖中n表示穿過相機A的光心垂直于平面π的單位向量,d為相機A與平面π之間的距離。π平面上的點X分別投影到A、B相機平面上的m和m'上。X在A相機坐標(biāo)系下坐標(biāo)為X1,在B坐標(biāo)系下坐標(biāo)為X2。

因此有:

33b3ade2-94dc-11ed-bfe3-dac502259ad0.png

假設(shè)相機A與B之間的相對位姿為R t,即旋轉(zhuǎn)和平移,那么有:

33c0c09a-94dc-11ed-bfe3-dac502259ad0.png

根據(jù)相機成像模型,其中K為相機內(nèi)參,s1為某像素的實際深度

33d6e08c-94dc-11ed-bfe3-dac502259ad0.png

因此推導(dǎo)到最后,H結(jié)果為:

33e30808-94dc-11ed-bfe3-dac502259ad0.png

由于H有尺度不變性,因此

34031fee-94dc-11ed-bfe3-dac502259ad0.png

經(jīng)過上述推導(dǎo)后我們可以得出結(jié)論:假設(shè)我們可以獲取到兩個相機之間的位姿關(guān)系R和t、相機的內(nèi)參、相機與π平面之間的向量n和距離d,那么我們就可以計算出π平面在兩個相機圖像平面上的投影關(guān)系H。以上即為單應(yīng)矩陣求解的一種方法(基于真實的物理模型),也是本章中AVM輔助視角所用到的方法。

那么,如何才能獲取到相機之間的位姿關(guān)系呢?我們用到了PNP的方法。

2.2 PNP的原理

用一句話概括PNP到底做了什么:已知相機A坐標(biāo)系下的一組三維點,以及這組三維點在另外一個相機的圖像坐標(biāo)系下的二維坐標(biāo),就可以通過數(shù)學(xué)方法計算出A、B兩個相機之間的位姿R,t。注意R,t是從A->B。

公式如下:

34254952-94dc-11ed-bfe3-dac502259ad0.png

其中(X,Y,Z,1)為某一個相機坐標(biāo)系下的三維點齊次坐標(biāo),(u,v)為另一個相機圖像平面的二維坐標(biāo)點。這兩組點在真實世界中應(yīng)該是一一對應(yīng)的關(guān)系。K為相機內(nèi)參,Rt為相機之間的外參。這個模型其實就是SLAM14講中的單目相機物理模型,世界坐標(biāo)系->相機坐標(biāo)系->圖像坐標(biāo)系的過程。求解方法有“直接線性法”、“最小化重投影誤差”等,我們就不展開來說了。

針對于我們的AVM算法:

先驗信息必然是由標(biāo)定布來提供的(即第一章中講到的標(biāo)定布上的大方格角點信息,包含圖像上的二維坐標(biāo)和標(biāo)定的三維坐標(biāo))。虛擬相機的位置、朝向由我們自己設(shè)定,換句話說虛擬相機坐標(biāo)系是根據(jù)不同功能(例如車輪視角、超廣角等)由算法工程師自行設(shè)計的,因此我們是可以獲取到標(biāo)定布上的角點的三維坐標(biāo)。

  • 二維點:圖像中提取(1.1 1.2中已經(jīng)講述了提取方法)
  • 三維點:標(biāo)定

2.3 車輪視角

34321e16-94dc-11ed-bfe3-dac502259ad0.png車輪視角算法坐標(biāo)系示意圖34402b96-94dc-11ed-bfe3-dac502259ad0.png車輪視角算法坐標(biāo)系示意圖
  • 2d圖像坐標(biāo)系沒什么可說的,就是真實相機拍攝到的圖像上黑色方格角點的坐標(biāo)
  • 3d相機坐標(biāo)系是一個虛擬的視角,模擬的是朝向正前方的一個視角,即y垂直地面,x垂直車身向右,z朝正前方由于我們已知標(biāo)定布的全部尺寸參數(shù),因此可獲取虛擬相機坐標(biāo)系下標(biāo)定布上黑色方格角點的3維坐標(biāo)。用PNP算法可以計算出實際相機與虛擬相機之間的位姿關(guān)系R,t。
**//函數(shù)定義**

voidsolveRtFromPnP(constvector&corners2D,constvector&obj3D,

constMat&intrinsic,Mat&R,Mat&t){

Matr=Mat::zeros(3,1,CV_32FC1);

solvePnP(obj3D,corners2D,intrinsic,cv::Mat(),r,t);

Rodrigues(r,R);

}

//函數(shù)調(diào)用

solveRtFromPnP(corners_2D,obj_3D,m_intrinsic_undis,R,t);

以上,我們獲取到了虛擬相機->真實部署相機之間的位姿R,t。至于R,t為什么不是從真實部署相機->虛擬相機,可以從PNP算法的公式推導(dǎo)中得知(前面已經(jīng)講過),或者見視覺SLAM第二版P180-P181。

再回到投影變換H模型圖中,圖中的A就是虛擬相機,B就是真實部署相機。我們已經(jīng)通過PNP計算出虛擬相機->真實部署相機的R,t。但是我們想要的是如何將真實相機拍攝到的某個平面(對于車輪視角而言是地面)通過H轉(zhuǎn)換到虛擬相機的視角下。因此我們需要對R,t做一些處理,將其轉(zhuǎn)化為真實部署相機->虛擬相機的位姿關(guān)系:

公式推導(dǎo):

344dcc1a-94dc-11ed-bfe3-dac502259ad0.pngRt位姿的轉(zhuǎn)換34766f3a-94dc-11ed-bfe3-dac502259ad0.png投影關(guān)系的建立

代碼:

求解單應(yīng)矩陣:

//基于Rt計算H

MatsolveHFromRt(constMat&R,constMat&t,constfloatd,constMat&n,constMat&intrinsic){

Matintrinsic_inverse;

invert(intrinsic,intrinsic_inverse,DECOMP_LU);

MatH=intrinsic*(R+t/d*n.t())*intrinsic_inverse;

returnH;

}

PNP求解外參:

/****************************************************************************************************************/

//Rt:PNP算出的結(jié)果,從虛擬相機->真實部署相機的位姿

//計算出真實部署相機->虛擬相機的位姿

MatR_Camera2Real;

invert(R,R_Real2Virtual,DECOMP_LU);

Matt_Real2Virtual=-R_Real2Virtual*t;

//虛擬相機到地面的垂直單位向量

Matn=(Mat_<float>(3,1)<floattheta_X=m_wheel_sight_angle/180.f*3.14f;

MatR_virtual=(Mat_<float>(3,3)<虛擬視角

MatH=solveHFromRt(R_Camera2Virtual,t_Camera2Virtual,d,n,intrinsic);

幾點說明:

  • n(0,1,0),說明單應(yīng)矩陣選取的平面為地面。不要忘了我們最開始強調(diào)的,H描述的是在不同位姿下的兩個相機cam1,cam2拍攝同一個平面(例如標(biāo)定板),這個平面在兩個相機成像平面上的成像結(jié)果之間的變換關(guān)系。因此這個平面的選擇,對最終的投影結(jié)果有很大的影響。車輪視角選取地面作為我們要進(jìn)行投影的平面,最終的效果非常nice。
  • 代碼中還包含rotation部分,這是因為我們在標(biāo)定的時候讓虛擬相機朝正前方,但顯然理想的車輪視角相機應(yīng)該朝向車輪,即應(yīng)加一個俯仰角pitch。

2.4 超級廣角

這部分我們是對標(biāo)現(xiàn)有某德系車載超廣角功能進(jìn)行實現(xiàn)的,相比于直接做去畸變的廣角效果,超廣角的優(yōu)勢在于

  • 糾正了相機翻滾角帶來的視覺不適
  • 糾正了左右兩側(cè)遠(yuǎn)離圖像中心的拉伸效果
  • 糾正了豎直方向由于透視畸變“近大遠(yuǎn)小”帶來的柱體傾斜效果
34907c90-94dc-11ed-bfe3-dac502259ad0.png

大部分車上的廣角功能是對魚眼圖直接做了去畸變,這種方法帶來的問題及產(chǎn)生原因如下:

  • 放大上表中普通廣角圖,不難發(fā)現(xiàn)標(biāo)定布前邊緣并不是平直的,它有一定的傾斜。這是因為相機有一個roll翻滾角,相當(dāng)于人眼沒有水平正視前方,而是歪著腦袋看前面。
  • 在遠(yuǎn)離圖像中心的位置,像素被嚴(yán)重拉伸,這是透視畸變的一種(見附錄),會導(dǎo)致即便是我們把去畸變圖的分辨率調(diào)整到非常大,在這張圖像上依然不能看到FOV范圍很大的內(nèi)容,如圖所示。
34a10cc2-94dc-11ed-bfe3-dac502259ad0.png遠(yuǎn)離圖像中心的區(qū)域被嚴(yán)重拉伸

這張圖的分辨率已經(jīng)很大,然而在圖像的邊緣像素跨度太大,圖中左側(cè)的黑色車輛被嚴(yán)重拉伸。也就是說同樣一輛車,在圖像的中心可能只需要100個像素來呈現(xiàn)(例如中間的白車),而在圖像的邊緣被拉伸的更長,可能需要1000個像素才能完全呈現(xiàn)出來,如果我們想要獲取更大范圍的視野,就需要超級大分辨率的圖像。

  • 垂直地面的柱子是斜的:這是因為另外一種透視畸變(見附錄),即”近大遠(yuǎn)小“。類似于平行的車道線在圖像中會交于一點的原理。我們可以記住一個理論:只有垂直于相機光軸的那個平面上的平行線,在相機圖像平面上的成像結(jié)果是平行的(類似于BEV視角);與光軸不垂直的平面上的平行線,在相機成像平面上肯定交于一點,即”近大遠(yuǎn)小”。對圖像做去畸變之后,圖中的柱子是斜的,因為我們的前置攝像頭有pitch俯仰角,它的光軸超前下方,并非垂直于柱子所在的平面,即不垂直于汽車正前方的平面。

解決方案:

我們的思路是:首先通過位姿變換的方法將相機擺正(依然是虛擬相機的思想),從而消除“近大遠(yuǎn)小”的透視畸變和相機roll角帶來的視覺不適,然后將圖像分為左、中、右三部分,中間這部分的“拉伸”透視畸變較??;對兩側(cè)透視畸變較大的部分強制進(jìn)行某種投影變換,減小拉伸效果。具體如下:

  • 相機位姿矯正
34af3a68-94dc-11ed-bfe3-dac502259ad0.png相機位姿矯正示意圖

相機位姿矯正算法流程的思路依然是將 真實相機視角->虛擬相機視角,以正前方的相機為例,算法流程如下表:

算法流程

  1. 假設(shè)虛擬相機的位姿為朝向正前方,光軸與正前方的那面墻垂直,坐標(biāo)系x、y、z如上表中“位姿校正的廣角”所示
  2. 標(biāo)定出地面上那些角點在虛擬相機坐標(biāo)系下的三維坐標(biāo)
  3. 在真實相機拍攝的圖像中提取角點的圖像坐標(biāo)(實際上在第一章的標(biāo)定過程中已經(jīng)完成)
  4. PNP計算虛擬相機->真實相機的位姿 RT
  5. 計算真實相機->虛擬相機的位姿rt
  6. 我們選定的是垂直于相機光軸的平面,計算這個平面從真實相機->虛擬相機的單應(yīng)矩陣H,在我們的算法中,這個平面距離相機的距離d=10m,這是一個經(jīng)驗值。

這個流程與上面的車輪視角的算法流程幾乎是相同的,所有的相機位姿變換導(dǎo)致的視角轉(zhuǎn)換都可以用這個流程來實現(xiàn)。在上面的相機位姿矯正示意圖中我們可以看到,垂直于地面的墻、柱子的傾斜問題都解決了。被我們用基于相機位姿矯正的單應(yīng)變換強行掰正了。

但是,這個圖在遠(yuǎn)離圖像中心的邊緣依然存在嚴(yán)重的拉伸。導(dǎo)致即使圖像的分辨率很大,我們可以看到的實際FOV范圍依然很小。針對這個問題,再一次進(jìn)行平面的單應(yīng)變換。

平面單應(yīng)變換

34bd4482-94dc-11ed-bfe3-dac502259ad0.png平面單應(yīng)變換示意圖34dfe7d0-94dc-11ed-bfe3-dac502259ad0.png廣角與超廣角

實際的實現(xiàn)方法如下圖所示,在廣角圖像上選取4個點(即遠(yuǎn)離圖像中心在圖像左右兩邊的兩個小長方形),并設(shè)置這四個點做投影變換的結(jié)果(這4個點是通過大量實驗調(diào)試出的一組最優(yōu)超參數(shù)),使用這四對匹配點計算單應(yīng)矩陣H。即計算將小長方形壓縮成梯形的單應(yīng)矩陣H。

34eb2316-94dc-11ed-bfe3-dac502259ad0.png圖像兩側(cè)的單應(yīng)變換

在圖像兩側(cè)所進(jìn)行的單應(yīng)變換有將像素在x,y方向做壓縮的效果,從一定程度上減小了透視畸變帶來的拉伸問題。做了投影變換后,在相同幅面的圖像中,我們可以看到更大范圍的內(nèi)容,即FOV更大,因此稱為超廣角。

MatH_left=getPerspectiveTransform(p_src_left,p_dst_left);

MatH_right=getPerspectiveTransform(p_src_right,p_dst_right);

三. 基于外參的3D 紋理映射方法

單目相機是丟失了深度信息的,計算機圖形學(xué)中經(jīng)常會使用將紋理圖映射到某個3D模型上的方法,呈現(xiàn)出一種偽3D的效果,即紋理映射。在AVM中,通常使用將相機捕捉到的圖像當(dāng)作紋理,以某種方式映射到 3D 碗狀模型上以呈現(xiàn)出一種3D 環(huán)視的效果。下面詳細(xì)講述下算法實現(xiàn):

3.1 3D模型

350a4886-94dc-11ed-bfe3-dac502259ad0.png前、后、左、右

3.2 紋理映射

以前置相機為例,詳細(xì)描述3D模型與相機圖像之間的紋理映射關(guān)系:

353e700c-94dc-11ed-bfe3-dac502259ad0.png紋理映射示意圖

注意:世界坐標(biāo)系、3dsmax坐標(biāo)系、車身統(tǒng)一坐標(biāo)系,這三個表達(dá)的是同一個意思。坐標(biāo)原點在汽車中心,右手X,汽車前方Y(jié),垂直地面向上Z。黃色坐標(biāo)軸為前置相機坐標(biāo)系。

如圖所示,3dsmax中的小長方體代表現(xiàn)實世界中在汽車正前方的柱子。該立柱上的一點(第二張圖上長方體上的圓圈)通過相機成像模型穿過相機光心映射到成像平面上(即第一張圖中柱子上的圓圈位置)。在成像過程中,同時也要穿越我們的3D碗模型。我們通過相機成像模型,可以想象這條光線的路徑:現(xiàn)實世界中的物體->3D碗模型頂點->相機拍攝到的圖像(去畸變后),也就是通過相機成像模型我們建立起了3D碗模型頂點與圖像紋理之間的映射關(guān)系。

我們通過3dsmax制作的 3D碗模型是一個OBJ文件,解析出來的是3dsmax坐標(biāo)系下的坐標(biāo)。我們需要將其轉(zhuǎn)換到相機坐標(biāo)系下,才可以進(jìn)行上面說的紋理映射。3dsmax是以汽車的中心為原點,右手為X,前向為Y,垂直地平面向上為Z的,在標(biāo)定過程中,我們可以獲取上圖中角點在3dsmax坐標(biāo)系下的3維坐標(biāo);且可以在前置相機圖像中通過算法提取角點的圖像坐標(biāo),因此3dsmax與相機之間的位姿關(guān)系,同樣可以通過PNP計算。代碼如下:

//calculatepose

solveRtFromPnP(img_corners,obj_corners,intrinsic_undis,R,t);

//3dsmax->camera

Matpts_3DsMax=

(Mat_<float>(3,1)<imgcoordinate

Matcoor=intrinsic_undis*camera_points/camera_points.at<float>(2,0);

上述代碼將解析出來的3dsmax坐標(biāo)系下的 3d碗模型的頂點三維坐標(biāo)轉(zhuǎn)換到相機坐標(biāo)系下,然后通過相機內(nèi)參轉(zhuǎn)換到圖像坐標(biāo)系。最終建立起3d碗模型與圖像紋理之間的映射關(guān)系。算法流程如下:

算法流程

  1. 標(biāo)定3dsmax坐標(biāo)系下 標(biāo)定布上角點的三維坐標(biāo)。(即車身中心為原點的車身坐標(biāo)系)
  2. 檢測相機拍攝到圖像中標(biāo)定布上角點的圖像坐標(biāo)。(第一章中已標(biāo)定)
  3. 利用1、2的坐標(biāo)信息,通過PNP計算出 3dsmax坐標(biāo)系與相機坐標(biāo)系之間的位姿關(guān)系 R,t
  4. 解析3d碗狀模型的obj文件
  5. 將解析出來的3d碗狀模型的頂點三維坐標(biāo),通過R,t轉(zhuǎn)換到相機坐標(biāo)系下
  6. 通過內(nèi)參將相機坐標(biāo)系的坐標(biāo)轉(zhuǎn)換到圖像坐標(biāo)系,建立起3d模型與相機圖像之間的紋理映射關(guān)系

3.3 融合

3556ff46-94dc-11ed-bfe3-dac502259ad0.png融合區(qū)

相鄰兩個3D 碗模型上存在重疊區(qū),由于標(biāo)定誤差和avm 3d算法固有的誤差,這部分重疊區(qū)域會有較嚴(yán)重的重影(下一節(jié)中會講到)。因此需要用融合算法進(jìn)行平滑過渡。具體算法可以參考文章[2]

35a78326-94dc-11ed-bfe3-dac502259ad0.png融合算法示意圖

大體思路就是計算3d模型上的頂點與縫合線之間的角度,然后求一個比值,沒什么太大難度。

3.4 3D AVM算法存在的問題

在討論這個問題之前,我們首先要理解相機坐標(biāo)系。相機坐標(biāo)系一般x為朝右,y為朝下,z為朝向正前方。圖中標(biāo)記的兩個坐標(biāo)系分別為汽車前置攝像頭、左側(cè)攝像頭的位姿。一個安裝在汽車前方朝向前下方,一個安裝在汽車左側(cè)后視鏡朝向左下方。

35b5fd34-94dc-11ed-bfe3-dac502259ad0.pngAVM 3D病態(tài)問題

現(xiàn)實世界中立柱上的一個點通過相機模型分別映射到前置相機、左側(cè)相機的成像平面上從而生成圖像img1,img2。在這個過程中會穿過重疊區(qū)的前3D碗模型的A點以及左3D碗模型的B點,AB顯然不是同一個點。換句話說,img1和img2上相同的紋理(例如現(xiàn)實世界中的柱子)在紋理映射的過程中并沒有映射到3d碗模型的同一個位置上,不能夠準(zhǔn)確地重合,且通常會在模型重疊區(qū)有較大的錯位。

因此,我們可以得出結(jié)論:AVM的3D是一種偽3D,是計算機圖形學(xué)中使用將紋理圖映射到3D模型上呈現(xiàn)3D效果的手段,但它不是真正的3D。根本原因是:單目相機模型丟失了深度信息。

針對這種問題,通常的優(yōu)化方法為:

  • 將拼接縫位置設(shè)置在較不明顯的位置上,例如靠近左右兩側(cè)。因為駕駛員開車的視覺習(xí)慣通常是正前方,左右兩側(cè)的內(nèi)容不會過分關(guān)注。且在切換到其他視角的時候,拼接錯位會被汽車模型擋住。
  • 適當(dāng)縮小拼接區(qū)范圍
  • 盡量讓碗底大一些,讓車身附近的地面有較好的拼接效果。
  • 3d碗的優(yōu)化問題屬于經(jīng)驗性的問題,需要通過實驗慢慢調(diào)整適合自己的碗模型。

四 附錄

透視畸變

  • “近大遠(yuǎn)小”

“近大遠(yuǎn)小”表達(dá)的是:同一個物體,在遠(yuǎn)處的位置投影到相機平面上的大小要小于在近處的位置。例如,車道線投影到圖像上并不是平行線,會交于一點。下圖中O為相機原點,Image plane為相機成像平面,parallel lines為現(xiàn)實世界中兩條平行線。這兩條平行線投影到image plane上,距離相機越遠(yuǎn)的位置,其間距投影到image plane上的長度越短,最后匯聚到一點,即“消失點”。這個現(xiàn)象就類似于我們對圖像做去畸變后,汽車前方兩個垂直的柱子在圖像中是斜的,最終會交于一點。但是如果相機光軸垂直于地面,車道線在圖像上的成像結(jié)果就是平行的,類似于BEV。所以,我們在做超廣角功能的時候,要對相機做位姿矯正,使相機的光軸朝向正前方,這樣得到的圖像結(jié)果中柱子就不會傾斜。

35c8a984-94dc-11ed-bfe3-dac502259ad0.png近大遠(yuǎn)小
  • “拉伸”

一張圖,言簡意賅:

36176b78-94dc-11ed-bfe3-dac502259ad0.png邊緣拉伸

五 總結(jié)

本篇本章為avm系列的第二篇,至此AVM主要的算法原理已經(jīng)講述完畢,包含有:相機模型、相機內(nèi)外參標(biāo)定、相機聯(lián)合標(biāo)定方法、魚眼去畸變、投影變換、光流、拼接融合、PNP、3D紋理映射、上帝視角、3d視角、廣角、超廣角、車輪視角等。

后續(xù)還要做一些其他工作,例如:亮度一致調(diào)整、基于車道線的道路自標(biāo)定、動態(tài)拼接線、相機模型優(yōu)化等。希望以后還有機會和同學(xué)們交流,共同進(jìn)步!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4761

    瀏覽量

    97167
  • 角點
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    6004
  • 自動泊車
    +關(guān)注

    關(guān)注

    0

    文章

    106

    瀏覽量

    14302

原文標(biāo)題:詳解自動泊車之AVM環(huán)視系統(tǒng)算法(聯(lián)合標(biāo)定/視角變換/紋理映射)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    光庭信息與為旌科技自動泊車PoC項目通過主機廠驗收

    近日,光庭信息與戰(zhàn)略合作伙伴為旌科技,基于為旌御行車載芯片平臺VS919共同開發(fā)的全自動泊車(APA)與全景環(huán)視AVM)融合系統(tǒng)的PoC項
    的頭像 發(fā)表于 12-05 11:39 ?426次閱讀

    基于米爾RK3576的環(huán)視實時性方案解析

    一、項目背景與測試平臺本次360環(huán)視系統(tǒng)原型基于米爾電子MYD-LR3576開發(fā)板進(jìn)行構(gòu)建與評估。該開發(fā)板所搭載的瑞芯微RK3576芯片,集成了4核Cortex-A72、4核Cortex-A53
    發(fā)表于 11-28 16:57

    看似簡單的自動泊車需要哪些技術(shù)支撐?

    [首發(fā)于智駕最前沿微信公眾號]要實現(xiàn)自動泊車,背后需要哪些技術(shù)作為支撐?自動泊車作為現(xiàn)在很多車主應(yīng)用非常多的一項功能,看似只是簡單的入庫操作,但想要完美入庫,其實需要非常多的技術(shù)支持。
    的頭像 發(fā)表于 10-30 09:09 ?480次閱讀
    看似簡單的<b class='flag-5'>自動</b><b class='flag-5'>泊車</b>需要哪些技術(shù)支撐?

    新能源汽車自動泊車超聲波傳感器鋁電解電容供電穩(wěn)定

    新能源汽車的自動泊車系統(tǒng)作為智能化駕駛的重要功能,其穩(wěn)定性和可靠性直接影響用戶體驗。而超聲波傳感器作為自動泊車
    的頭像 發(fā)表于 10-28 16:25 ?399次閱讀
    新能源汽車<b class='flag-5'>自動</b><b class='flag-5'>泊車</b>超聲波傳感器鋁電解電容供電穩(wěn)定

    車載360環(huán)視平臺:米爾RK3576開發(fā)板支持12路低延遲推流

    在汽車智能化、網(wǎng)聯(lián)化快速發(fā)展的今天,360環(huán)視系統(tǒng) 已成為智能駕駛和自動泊車的標(biāo)配技術(shù)。無論是泊車入位、低速行車還是復(fù)雜路口的安全輔助,36
    發(fā)表于 10-11 17:55

    雙目環(huán)視立體視覺系統(tǒng)在智能駕駛行業(yè)的應(yīng)用

    在智能駕駛技術(shù)飛速發(fā)展的當(dāng)下,雙目立體視覺憑借其獨特的感知優(yōu)勢,在 360 環(huán)視產(chǎn)品方案以及各類輔助駕駛功能中發(fā)揮著關(guān)鍵作用,在最新法規(guī)要求與復(fù)雜場景下表現(xiàn)突出,為汽車在AEB、NOA、自動泊車等核心場景中重構(gòu)了安全與效率的邊界
    的頭像 發(fā)表于 09-23 11:35 ?871次閱讀

    360環(huán)視硬件平臺為什么推薦使用米爾RK3576開發(fā)板?

    在汽車智能化和智慧安防快速發(fā)展的今天,360環(huán)視系統(tǒng) 已成為保障行車與場景安全、提升體驗的重要技術(shù)。無論是自動泊車、駕駛輔助,還是智慧社區(qū)監(jiān)控,核心訴求都是能夠接入 多路攝像頭,并通過
    發(fā)表于 09-19 17:38

    米爾RK3576核心板,讓360環(huán)視技術(shù)開發(fā)更簡單

    解決方案目前,基于RK3576核心板,已有多個項目成功落地:· 智能自動泊車系統(tǒng):4路攝像頭無縫拼接車身四周視野,AI識別停車位與障礙物,車輛精準(zhǔn)入位;· 無人配送機器人:實時識別行人、道路情況并將視頻
    發(fā)表于 08-06 18:13

    360環(huán)視技術(shù)推薦的硬件平臺:支持多攝像頭與三屏異顯的理想選擇

    。它對硬件平臺的要求極高,必須同時兼顧視頻處理、AI識別、多路輸出與系統(tǒng)穩(wěn)定性。米爾RK3576開發(fā)板憑借多攝接入、三屏異顯、強AI算力與系統(tǒng)兼容性,成為360環(huán)視應(yīng)用場景下的理想選擇。無論是
    發(fā)表于 07-30 17:32

    【資料獲取】ADAS自動泊車輔助系統(tǒng)測試方法詳解

    本次測試由德國 MdynamiX AG 組織完成,該機構(gòu)長期致力于自動駕駛、NVH及駕駛行為建模評估,與慕尼黑工業(yè)大學(xué)、肯普滕應(yīng)用科技大學(xué)等機構(gòu)保持密切合作。 MXeval 是一套支持 ADAS
    的頭像 發(fā)表于 07-23 11:21 ?929次閱讀
    【資料獲取】ADAS<b class='flag-5'>自動</b><b class='flag-5'>泊車</b>輔助<b class='flag-5'>系統(tǒng)</b>測試方法<b class='flag-5'>詳解</b>

    比亞迪推L4級智能泊車!企業(yè)兜底,技術(shù)碾壓競對?

    、雷達(dá)等硬件設(shè)備感知周圍環(huán)境,結(jié)合算法自動控制方向盤、油門、剎車等部件,完成停車入位的智能化功能。其核心是通過技術(shù)替代人工操作,降低停車難度,提升停車效率與安全性。 ? 統(tǒng)計數(shù)據(jù)顯示,2024 年 1-10 月,中國自動
    的頭像 發(fā)表于 07-11 00:27 ?5824次閱讀

    技術(shù)分享 | AVM合成數(shù)據(jù)仿真驗證方案

    AVM 合成數(shù)據(jù)仿真驗證技術(shù)為自動駕駛環(huán)境感知發(fā)展帶來助力,可借助仿真軟件配置傳感器、搭建環(huán)境、處理圖像,生成 AVM 合成數(shù)據(jù),有效加速算法驗證。然而,如何利用仿真軟件優(yōu)化傳感器外參
    的頭像 發(fā)表于 03-19 09:40 ?3500次閱讀
    技術(shù)分享 | <b class='flag-5'>AVM</b>合成數(shù)據(jù)仿真驗證方案

    SVPWM的原理及法則推導(dǎo)和控制算法詳解

    ,而且使直流母線電壓的利用率有了很大提高,且更易于實現(xiàn)數(shù)字化。下面將對該算法進(jìn)行詳細(xì)分析闡述。 文章過長,請點擊下方可查閱*附件:SVPWM的原理及法則推導(dǎo)和控制算法詳解.pdf
    發(fā)表于 03-14 14:51

    智能泊車輔助系統(tǒng)中的AK2超聲波雷達(dá)與elmos芯片

    Elmos芯片在AK2超聲波雷達(dá)中應(yīng)用,可見其在智能泊車輔助系統(tǒng)中發(fā)揮著重要的作用,它們不僅提供了精確的距離測量功能,還通過軟件可配置參數(shù)提高了系統(tǒng)的靈活性和適應(yīng)性。這些芯片的高集成度、抗干擾性
    的頭像 發(fā)表于 12-27 00:00 ?1831次閱讀
    智能<b class='flag-5'>泊車</b>輔助<b class='flag-5'>系統(tǒng)</b>中的AK2超聲波雷達(dá)與elmos芯片

    端到端在自動泊車的應(yīng)用

    與城市環(huán)境的復(fù)雜性和高速公路駕駛的風(fēng)險相比,停車場景的特點是低速、空間有限和高可控性。這些特點為在車輛中逐步部署端到端自動駕駛能力提供了可行的途徑。最重要的是自動泊車對時間不敏感,而自動
    的頭像 發(fā)表于 12-18 11:38 ?1494次閱讀
    端到端在<b class='flag-5'>自動</b><b class='flag-5'>泊車</b>的應(yīng)用