日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉

發(fā)布時(shí)間:2025/3/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

激光雷達(dá)成本高,用廉價(jià)的立體視覺(jué)替代它可行嗎?

作者:Jeremy Cohen
編譯:McGL
公眾號(hào):PyVision(歡迎關(guān)注,專注CV,偶爾CS)

Pseudo-LiDAR — Stereo Vision for Self-Driving Cars

https://medium.com/think-autonomous/pseudo-lidar-stereo-vision-for-self-driving-cars-41fa1ac42fc9


深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)在自主系統(tǒng)中已經(jīng)瘋狂地流行起來(lái),現(xiàn)在到處都在使用。計(jì)算機(jī)視覺(jué),尤其是目標(biāo)檢測(cè),在過(guò)去的十年中發(fā)展迅速。
像 YOLO 或 RetinaNet 這樣的障礙物檢測(cè)算法提供了2D的邊界框,邊界框給出了障礙物在圖像中的位置。今天,大多數(shù)的目標(biāo)檢測(cè)算法都是基于單目 RGB 攝像頭,不能返回每個(gè)障礙物的距離。
為了返回每個(gè)障礙物的距離,工程師們將攝像頭與激光雷達(dá)(LiDAR)傳感器融合,激光雷達(dá)可以返回深度信息。利用傳感器融合技術(shù)將計(jì)算機(jī)視覺(jué)和激光雷達(dá)的輸出信息進(jìn)行融合。
這種方法的問(wèn)題是激光雷達(dá)很貴。工程師們使用的一個(gè)有用的技巧是對(duì)齊兩個(gè)攝像頭,并使用幾何學(xué)來(lái)確定每個(gè)障礙物的距離: 我們稱之為偽激光雷達(dá)(Pseudo-LiDAR)。

單目視覺(jué) vs 立體視覺(jué)


偽激光雷達(dá)利用幾何構(gòu)建了一個(gè)深度圖,并將其與目標(biāo)檢測(cè)圖結(jié)合起來(lái)得到3D距離。


如何利用立體視覺(jué)實(shí)現(xiàn)距離估計(jì)?


為了得到距離,下面是5步偽代碼:

  • 校準(zhǔn)兩個(gè)攝像頭(內(nèi)部和外部校準(zhǔn))
  • 創(chuàng)建極線模式(epipolar scheme)
  • 建立一個(gè)視差圖(disparity map),然后一個(gè)深度圖
  • 然后將深度圖與障礙物檢測(cè)算法相結(jié)合,我們將估計(jì)邊界框像素的深度。關(guān)于這一點(diǎn)的更多信息,請(qǐng)見文章末尾。

    我們開始吧!



    1. 內(nèi)部和外部校準(zhǔn)


    每個(gè)攝像頭都需要校準(zhǔn)。校準(zhǔn)意味著將一個(gè)具有[X,Y,Z] 坐標(biāo)的(現(xiàn)實(shí)世界)3D點(diǎn)轉(zhuǎn)換為具有[ X, Y]坐標(biāo)的2D像素。


    攝像頭模型


    今天的攝像頭使用的是小孔成像模型。

    這個(gè)想法是使用一個(gè)針孔,讓少量的光線通過(guò)攝像頭,從而得到一個(gè)清晰的圖像。


    如果圖像中間沒(méi)有這個(gè)屏障,每一道光線都會(huì)通過(guò),圖像就會(huì)變得模糊。它還允許我們確定焦距 f 用于縮放和更好的清晰度。

    為了校準(zhǔn)攝像頭,我們需要將世界坐標(biāo)通過(guò)攝像頭坐標(biāo)轉(zhuǎn)換為像素坐標(biāo)。

    攝像頭校準(zhǔn)過(guò)程
    • 從世界坐標(biāo)到攝像頭坐標(biāo)的轉(zhuǎn)換稱為外部校準(zhǔn)。外部參數(shù)稱為 R(旋轉(zhuǎn)矩陣)和 T(平移矩陣)。
    • 從攝像頭坐標(biāo)到像素坐標(biāo)的轉(zhuǎn)換稱為內(nèi)部校準(zhǔn)。它要求攝像頭的內(nèi)部值,如焦距,光學(xué)中心,...... 內(nèi)參數(shù)是一個(gè)矩陣,我們稱為 K。

    校準(zhǔn)

    通過(guò)攝像頭校準(zhǔn)得到矩陣 K。

    通常,我們使用跳棋盤和自動(dòng)算法來(lái)執(zhí)行它。當(dāng)我們這樣做時(shí),我們告訴算法棋盤中的一個(gè)點(diǎn)(如: 0,0,0)對(duì)應(yīng)于圖像中的一個(gè)像素(如: 545,343)。

    校準(zhǔn)示例


    為此,我們必須用攝像頭拍攝棋盤的圖像,比較一些圖像和一些點(diǎn)之后,校準(zhǔn)算法將通過(guò)最小化最小平方損失來(lái)確定攝像頭的校準(zhǔn)矩陣。
    一般來(lái)說(shuō),校準(zhǔn)是必要的,以消除畸變。針孔攝像頭模型包括一個(gè)失真:“ GoPro 效應(yīng)”。為了得到一個(gè)矯正圖像,校準(zhǔn)是必要的。畸變可以是徑向的,也可以是切向的。校準(zhǔn)有助于消除圖像失真。

    圖像校準(zhǔn)下面是攝像頭校準(zhǔn)返回的矩陣:

    • f 是焦距ー(u0,v0)是光學(xué)中心: 這些是內(nèi)參數(shù)。


    每個(gè)計(jì)算機(jī)視覺(jué)工程師必須了解和掌握攝像頭的校準(zhǔn)。這是最基本、最重要的要求。我們已經(jīng)習(xí)慣了在線處理圖像,從來(lái)不碰硬件,這是一個(gè)錯(cuò)誤。

    ——嘗試使用 OpenCV 進(jìn)行攝影頭校正。


    齊次坐標(biāo)(Homogeneous Coordinates)


    在攝像頭校準(zhǔn)過(guò)程中,我們有兩個(gè)公式來(lái)得到從世界到像素空間的一個(gè)點(diǎn) O:

    • 世界到攝像頭的轉(zhuǎn)換

    外部校準(zhǔn)公式
    • 攝像頭到圖像的轉(zhuǎn)換

    內(nèi)部校準(zhǔn)公式


    通過(guò)計(jì)算,你得到了這個(gè)等式:

    • 從世界到圖像的轉(zhuǎn)換

    完整的方程式


    如果你看一下矩陣的大小,它們并不匹配。

    因此,我們需要將 O_world 從[X Y Z]修改為[X Y Z 1] 。這個(gè)“1”叫做齊次坐標(biāo)。


    2. 對(duì)極幾何學(xué)(Epipolar Geometry)——立體視覺(jué)

    立體視覺(jué)是基于兩幅圖像尋找深度。


    我們的眼睛類似于兩個(gè)攝像頭。由于他們從不同的角度看一幅圖像,他們可以計(jì)算出兩個(gè)視點(diǎn)之間的差異,并建立一個(gè)距離估計(jì)。這里有一個(gè)雙目立體攝像頭設(shè)置的例子。你可以在大多數(shù)無(wú)人駕駛汽車中找到類似的東西。


    立體相機(jī)如何估計(jì)深度?


    假設(shè)你有兩個(gè)攝像頭,一個(gè)左,一個(gè)右。這兩臺(tái)攝像頭在同一個(gè) Y 軸和 Z 軸上對(duì)齊。基本上,唯一的區(qū)別就是它們的 X 值。現(xiàn)在,看看下面的計(jì)劃。

    雙目立體設(shè)置

    我們的目標(biāo)是估計(jì) O 點(diǎn)(表示圖像中的任意像素)的 Z 值,即距離。

    • X 是對(duì)齊軸
    • Y 是高度
    • Z 代表深度
    • 兩個(gè)藍(lán)色的平面對(duì)應(yīng)著每個(gè)相機(jī)拍攝的圖像

    現(xiàn)在從鳥瞰的角度來(lái)考慮這個(gè)問(wèn)題。

    立體設(shè)置的鳥瞰圖
    • xL 對(duì)應(yīng)左攝像頭圖像中的點(diǎn),類似的xR 對(duì)應(yīng)右攝像頭。
    • b 是基線,是兩個(gè)攝像頭之間的距離。
    如果你運(yùn)用泰勒斯定理,你會(huì)發(fā)現(xiàn)我們可以得到兩個(gè)等式:
    • 對(duì)于左邊的攝像頭:

    左攝像頭等式

    我們得到 Z = X*f / xL

    • 對(duì)于右邊的攝像頭:

    右攝像頭等式

    我們得到 Z = (X - b)*f/xR.
    綜合起來(lái),我們可以找到正確的視差 d = xL - xR 和一個(gè)物體的正確 XYZ 位置。



    3. 視差和深度圖

    什么是視差?

    視差是同一個(gè)三維點(diǎn)從兩個(gè)不同的攝像頭角度拍攝的圖像位置的差異。

    立體視覺(jué)方程式

    由于立體視覺(jué),我們可以估計(jì)任何物體的深度(假設(shè)我們已經(jīng)做了正確的矩陣校準(zhǔn))。

    它甚至可以計(jì)算一個(gè)深度圖或視差圖

    為什么是“對(duì)極幾何” ?

    為了計(jì)算視差,我們必須找到左側(cè)圖像中的每個(gè)像素,并將其與右側(cè)圖像中的每個(gè)像素匹配。這就是所謂的立體對(duì)應(yīng)問(wèn)題(Stereo Correspondance Problem)。
    為了解決這個(gè)問(wèn)題——

    • 取左圖中的一個(gè)像素
    • 現(xiàn)在,要在右邊的圖像中找到這個(gè)像素,只需在極線上搜索它。沒(méi)有必要進(jìn)行二維搜索,點(diǎn)應(yīng)該位于這條線上,搜索范圍縮小到一維

    極線


    這是因?yàn)閿z像頭是沿著同一軸線排列的。
    以下是極線搜索的工作原理:

    極線搜索


    應(yīng)用: 構(gòu)建偽激光雷達(dá)(Pseudo-LiDAR)


    現(xiàn)在,是時(shí)候把這些應(yīng)用到現(xiàn)實(shí)世界的場(chǎng)景中,看看我們?nèi)绾问褂昧Ⅲw視覺(jué)來(lái)估計(jì)物體的深度。如下兩張圖片——

    立體視覺(jué)


    這些圖像中的每一個(gè)都有外部參數(shù) R 和 t,事先由校準(zhǔn)確定(步驟1)。

    視差


    對(duì)于每個(gè)圖像,我們可以計(jì)算出相對(duì)于其他圖像的視差圖。我們將:

  • 確定兩幅圖像之間的視差
  • 將投影矩陣分解為相機(jī)內(nèi)部矩陣 K,外部參數(shù) R,t
  • 使用我們?cè)谇皟蓚€(gè)步驟中收集到的信息來(lái)估計(jì)深度

  • 我們將得到左側(cè)和右側(cè)圖像的視差圖。
    為了幫助你更好地理解視差的含義,我找到了這個(gè) Stack Overflow 解釋:

    視差圖是指一對(duì)立體圖像之間的視像素差或運(yùn)動(dòng)。要體驗(yàn)這種感覺(jué),試著閉上一只眼睛。迅速閉上一個(gè)眼睛同時(shí)睜開另一只。距離你很近的物體會(huì)跳得很遠(yuǎn),而距離更遠(yuǎn)的物體幾乎不會(huì)移動(dòng)。這個(gè)動(dòng)作就是視差。在一對(duì)由立體攝像頭拍攝的圖像中,你可以測(cè)量每一個(gè)點(diǎn)的視運(yùn)動(dòng),并根據(jù)測(cè)量結(jié)果生成亮度圖像。


    從視差到深度圖


    我們有兩個(gè)視差圖,它告訴我們兩張圖像之間像素的位移。
    對(duì)于每個(gè)攝像頭,我們有一個(gè)投影矩陣—— P_left 和 P_right。
    為了估計(jì)深度,我們需要估計(jì) K,R 和 t。

    • 每個(gè)攝像頭用OpenCV 函數(shù) cv2.decomposeProjectionMatrix () 可以從 P 中得到 K、 R 和 t


    深度圖


    現(xiàn)在是生成深度圖的時(shí)候了。
    利用另一張圖像和視差圖,深度圖可以告訴我們圖像中每個(gè)像素的距離。整個(gè)過(guò)程如下:

    • 從 K 矩陣得到焦距 f
    • 使用平移向量 t 中的對(duì)應(yīng)值計(jì)算基線 b
    • 使用之前的公式和計(jì)算出的視差圖 d 計(jì)算圖像的深度圖:

    立體視覺(jué)公式


    我們對(duì)每個(gè)像素進(jìn)行計(jì)算。


    估計(jì)障礙物的深度


    每個(gè)攝像頭我們都有了一個(gè)深度圖!現(xiàn)在,假設(shè)我們把這個(gè)和一個(gè)障礙物檢測(cè)算法結(jié)合起來(lái),比如 YOLO。對(duì)于每個(gè)障礙物,這樣的算法將返回一個(gè)包含4個(gè)數(shù)字的邊界框: [x1; y1; x2; y2]。這些數(shù)字表示框的左上角和右下角的坐標(biāo)。
    例如,我們可以在左邊的圖像上運(yùn)行這個(gè)算法,然后使用左邊的深度圖。
    現(xiàn)在,在那個(gè)邊界框里,我們可以得到最近的點(diǎn)。我們知道它,因?yàn)槲覀冎缊D像中每一個(gè)點(diǎn)的距離,這要?dú)w功于深度圖。邊界框的第一點(diǎn)將是我們到障礙的距離。


    Wow! 我們剛剛建立了一個(gè)偽激光雷達(dá)!
    由于立體視覺(jué),我們不僅知道圖像中的障礙物,還知道它們與我們的距離!這個(gè)障礙物離我們有28.927米遠(yuǎn)!
    立體視覺(jué)是使用簡(jiǎn)單的幾何學(xué)和一個(gè)額外的攝像頭將二維障礙物檢測(cè)轉(zhuǎn)化為三維障礙物檢測(cè)的方法。今天,大多數(shù)新興的“邊緣”平臺(tái)支持立體視覺(jué),如新的OpenCV AI Kit或樹莓派和英偉達(dá)Jetson。
    在成本方面,與使用激光雷達(dá)相比,它相對(duì)便宜,并且仍然提供了很好的性能。我們稱之為“偽激光雷達(dá)” ,因?yàn)樗梢匀〈す饫走_(dá)的功能: 檢測(cè)障礙物,對(duì)障礙物進(jìn)行分類,并對(duì)障礙物進(jìn)行三維定位。


    References:

    • Course Visual Perception for Self-Driving Cars by University of Toronto

    總結(jié)

    以上是生活随笔為你收集整理的残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。