本文來(lái)源公眾號(hào)“OpenCV與AI深度學(xué)習(xí)”,僅用于學(xué)術(shù)分享,侵權(quán)刪,干貨滿滿。
原文鏈接:使用單相機(jī)對(duì)已知物體進(jìn)行3D位置估計(jì)
0 導(dǎo)? 讀
????????本文主要介紹如何使用單個(gè)相機(jī)對(duì)已知物體進(jìn)行3D位置估計(jì),并給出實(shí)現(xiàn)步驟。??
1 前 言
????????在計(jì)算機(jī)視覺(jué)中,有很多方法可以找到物體的3D位置,例如使用立體攝像頭、激光雷達(dá)、雷達(dá)等。但有時(shí)僅用單個(gè)攝像頭就可以實(shí)現(xiàn)3D感知。使用單相機(jī)找到3D位置的一個(gè)條件是,需要知道圖片中需要估計(jì)位置的物體的大小。請(qǐng)記住,當(dāng)對(duì)象的方向發(fā)生變化時(shí),圖片中的對(duì)象可能會(huì)具有不同的大小。在本文中,為了避免這種需要我們了解對(duì)象方向的復(fù)雜性,我們將嘗試估計(jì)球的 3D 位置。因?yàn)橐粋€(gè)球,無(wú)論從任何方向看,都具有相同的大小。
下面是它的工作原理:
- 我們計(jì)算Camera坐標(biāo)系中的3D世界與圖像中的2D像素坐標(biāo)之間的關(guān)系。此步驟稱為相機(jī)標(biāo)定,更具體地說(shuō)是內(nèi)參計(jì)算。
- 然后我們使用對(duì)象分割算法來(lái)找到感興趣的對(duì)象。
- 接下來(lái)測(cè)量物體的大小。
- 我們使用步驟 1 中獲得的內(nèi)部參數(shù),使用對(duì)象的大小和對(duì)象中心的像素位置來(lái)估計(jì)3D位置。
本文將涵蓋理解該算法所需的基本背景知識(shí)并解釋該算法。? ? ??
2 原理與步驟
2.1?相機(jī)坐標(biāo)系
????????相機(jī)坐標(biāo)系是一個(gè)3D笛卡爾坐標(biāo)系,原點(diǎn)位于相機(jī)的焦點(diǎn)處,Z軸是相機(jī)的光軸。這用于了解3D中對(duì)象相對(duì)于相機(jī)位置的位置。
2.2?像素坐標(biāo)系
像素坐標(biāo)就是圖像中每個(gè)像素從左上角開(kāi)始的位置。
2.3?相機(jī)標(biāo)定
????????相機(jī)標(biāo)定是理解相機(jī)的內(nèi)部參數(shù)和外部參數(shù)的過(guò)程。簡(jiǎn)單地說(shuō),外部參數(shù)告訴我們世界上給定的3D坐標(biāo)系與相機(jī)位置之間的關(guān)系,而內(nèi)部參數(shù)告訴我們物體的3D坐標(biāo)與相機(jī)捕獲的圖像的2D像素坐標(biāo)之間的關(guān)系。
????????我們將只關(guān)注相機(jī)的內(nèi)部參數(shù)。下面的方程將幫助您從數(shù)學(xué)上理解內(nèi)在參數(shù)。
??? X、Y、Z 值是現(xiàn)實(shí)世界中一點(diǎn)的笛卡爾坐標(biāo),相機(jī)位于原點(diǎn),Z 軸與相機(jī)光軸共線。
2.4?對(duì)焦參數(shù)
????????fx 和 fy 是 x 軸和 y 軸上的焦點(diǎn)(以像素為單位)。在針孔相機(jī)模型中,焦點(diǎn)以距離為單位,并且 x 軸和 y 軸上的焦點(diǎn)相同。但在數(shù)碼相機(jī)中,由于相機(jī)傳感器的尺寸和鏡頭引起的畸變等因素,x 軸和 y 軸的焦點(diǎn)并不總是相同。
????這是一個(gè)理解“像素焦點(diǎn)”概念的方程式,??fx = F * W/w,其中參數(shù)解釋如下:
- fx 是 x 軸的焦點(diǎn)(以像素為單位)
- F 是相機(jī)的焦點(diǎn),單位為毫米
- W 是相機(jī)傳感器的寬度,單位為毫米
- w 是圖像的寬度(以像素為單位)
內(nèi)參矩陣通過(guò)使用像素值的焦點(diǎn),將現(xiàn)實(shí)世界從距離(毫米)測(cè)量單位映射到圖像中的像素單位。
2.5?主點(diǎn)參數(shù)
????????主點(diǎn)表示兩個(gè)坐標(biāo)系(像素坐標(biāo)和相機(jī)坐標(biāo)系)之間的像素偏移。
????????相機(jī)坐標(biāo)系的原點(diǎn)通常位于圖像的中心,而像素坐標(biāo)系的原點(diǎn)通常位于圖像的左上角。因此,cx 的值通常是圖像寬度的一半,cy 的值通常是圖像高度的一半。
2.6?如何得到內(nèi)參矩陣
????????OpenCV提供了進(jìn)行相機(jī)標(biāo)定的工具和步驟。您可以從下面鏈接學(xué)習(xí)如何校準(zhǔn)相機(jī)并獲取內(nèi)部參數(shù)。
OpenCV: Camera Calibration
2.7 對(duì)象分割
????????我們需要進(jìn)行對(duì)象分割而不僅僅是對(duì)象檢測(cè),因?yàn)槲覀儾粌H需要知道圖像中對(duì)象的位置,還需要知道圖像中對(duì)象的寬度,以便我們可以將其與對(duì)象的真實(shí)寬度進(jìn)行比較。
????????使用 Masked R-CNN 等神經(jīng)網(wǎng)絡(luò)進(jìn)行對(duì)象分割有多種方法?;蛘邔?duì)于類似的情況,例如檢測(cè)彩色球,我們可以對(duì)圖像進(jìn)行顏色分割,然后進(jìn)行形狀分析。
2.8 尺寸估計(jì)
? ??一旦我們從對(duì)象分割中知道了屬于該對(duì)象的像素,我們就可以計(jì)算圖像中屬于該對(duì)象的像素的數(shù)量。這將為我們提供圖像中物體的大小。
2.9 計(jì)算3D位置
現(xiàn)在我們以查找圖像中已知大小的彩球的 3D 位置為例。我們假設(shè)球的直徑為 8 厘米。
????Z = (fx * 0.08) / (d_pix)
????X = ((x-cx)*Z)/fx
????Y= ((y-cy)*Z)/fy
- d_pix - 直徑(以像素?cái)?shù)為單位)
- x,y - 圖像中球的中心
- 物體在相機(jī)坐標(biāo)系中的X,Y,Z -3D位置
- cx,cy - 要點(diǎn)。
這種尋找 3D 位置的方法可能并不總是可行,但當(dāng)滿足條件時(shí),它可以為您節(jié)省很多成本。
THE END!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-840094.html
文章結(jié)束,感謝閱讀。您的點(diǎn)贊,收藏,評(píng)論是我繼續(xù)更新的動(dòng)力。大家有推薦的公眾號(hào)可以評(píng)論區(qū)留言,共同學(xué)習(xí),一起進(jìn)步。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-840094.html
到了這里,關(guān)于OpenCV與AI深度學(xué)習(xí) | 使用單相機(jī)對(duì)已知物體進(jìn)行3D位置估計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!