如何理解物體的6D位姿估計任務?

2021-10-11 01:51:53 字數 3839 閱讀 7273

如何「感性」地理解物體的6d姿態估計任務?

答:

三維世界中,比如我們開車行駛在道路上,我們不僅需要關注前方是否有車輛,而且更在意前方車輛的狀態,或者說姿態,

是正在轉彎,還是正在駛向自己,或是遠離自己。其實這就是乙個物體的6d姿態估計任務。物體就是前方車輛,其在當前時刻,

並在我方視角下,它的三維空間位置和三維朝向就是我們關注的任務。我們可以根據當前時刻下,前方車輛的實時狀態

(位置+朝向),來調整自己下一步的操作,是減速,還是轉彎,或是正常行駛等。

在計算機視覺中,我方視角就是相機的鏡頭,那麼在當前時刻下,如何正確地估計出相機中目標物體的6d姿態

(三維空間位置和三維朝向),將是乙個重要的問題,這就是物體的6d姿態估計任務。有了準確的物體6d姿態資訊,

會極大幫助我們解決其他後續任務。所以說,物體的6d姿態估計任務是計算機視覺中一項基本且重要的任務,其在自動駕駛,

虛擬實境、機械人抓取等領域都有著重大應用。

由於世界上的所有物體,我們都可以建立它的三維模型,即以物體中心點為座標原點,建立乙個三維座標系,那麼我們就能

得到物體所有部位點在自身座標系下的3d座標值。由於物體是剛體,所以物體在自身座標系下的3d座標值永遠是不會變的,

進而它在物體座標系下的三維位置和三維朝向也不會變。但物體在相機系下的三維位置和三維朝向時時刻刻都在發生變化,

因為相機的移動就表示相機座標系的移動變化,那麼物體在相機系下的3d座標值就會變化。比如我們開車行駛在道路上,

前方車輛在我們的視角下,三維位置和朝向時時刻刻發生變化,因為我方視角是移動變化的,

但其在它自身座標系下的三維位置和朝向是永遠不變的,這一點很重要。

(這裡面需要區別物體姿態和相機姿態:物體姿態是估計當前幀座標系,相對物體自身座標系,物體在這兩個座標系之間的變換關係。

而相機姿態是,當前幀座標系相對前一幀座標系,物體在這兩個座標系之間的變換。此時的物體姿態估計就是相機的姿態估計。)

由於在6d姿態估計任務中,我們知道物體在自身座標系下三維模型,就知道了它在自身座標系下的三維位置和朝向。

如果我們能知道物體從它自身座標系變換到相機系下,所發生的r和t為多大,我們就能準確知道物體當前時刻在相機系下的

三維位置和朝向是怎樣的了。比如物體在自身座標系下,朝向是正南方,我們通過r的值,可以估計出其在相機系下,

朝向應該是東北方。物體在自身座標系下的中心點位置為(0,0,0),通過t的值,我們能估計出它在相機系下的三維位置為

(1,2,3)。所以說,準確地估計出物體在相機系下的r和t,就能讓機器自己知道它眼前的物體所處的位置和朝向。

在自動駕駛中,對於我們行車前的前方車輛,我們只要估計出它從自身座標系變換到相機系下,發生的r和t為多大,

就能判斷出它的三維位置和朝向,從而解決我方車輛自動做接下來的操作。

(物體所有部位點,在自身座標系下,有一組座標值;在中間座標系下,有一組值;在相機系下,也有一組值。

中間座標系和相機座標系,基相同,但原點不同;中間座標系和物體自身座標系,原點相同,但基不同。因此,

兩組座標值在中間座標系和物體自身座標系之間發生的變換,就是旋轉r。

兩組座標值在中間座標系和相機座標系之間發生的變換,就是平移t。由於物體中心點在自身座標系下的座標為(0,0,0),

那麼其在相機系下的3d座標值就是平移t)。

(pnp的演算法原理是找到若干匹配的點對,一是知道這些關鍵點在物體3維模型下的3d座標值,

二是知道這些關鍵點在相機系下的2d畫素點,那麼便可以求得這些關鍵點在相機系下的3d座標值,

知道了點在不同座標系下的座標值,從而就能知道旋轉矩陣r和平移t,將物體從物體座標系變換到相機座標系。

後面可以再通過ransac優化演算法,使得**結果更加準確)

如何「理性」地理解物體的6d姿態估計任務?

答:

首先,以物體中心或者質心為座標原點,建立物體自身座標系,記作座標系1。由於是乙個物體,

那麼這個物體上所有的點在這個座標系下,都會有乙個座標。同理,我們用相機拍攝物體時,在拍攝當前時刻,

我們以相機光心為座標原點,建立了另乙個座標系,記作座標系2。 其次,我們將座標系2進行空間平移,

使得座標系2的原點平移到目標物體的中心處,記作乙個新的座標系q。我們知道,

座標系1和q差距在於繞物體中心處進行了旋轉,座標系q和2在於座標原點存在空間平移。

那麼我們如何描述目標物體在座標系2下的位姿呢?

我們通過中的物體,提取目標物體表面的一些特徵點,這些點和座標系1下物體表面的點存在匹配關係。

比如匹配了物體表面的三個點a,b,c。以a為例,我們知道,a在座標系1下會有乙個座標,a在座標系q下也有乙個座標,

這兩個座標存在什麼關係呢?或者說,是通過什麼來變換呢?此時,我們需要借助向量來形象化理解,將點a看成向量a,

對於座標系1和q來說,向量a都是從座標原點指向點a,那麼此時向量a在座標系1下的座標,

就是物體表面a點在座標系1下的座標,兩者值是相等的。而向量a在座標系q下的座標,就是物體表面a點在座標系q下的座標。

兩者的座標變換,是通過引入向量a在兩組不同基下的表示,進行轉換的。再通過等式變換,就引出了旋轉矩陣r。

(推導見高博第三講)

我們可以知道旋轉矩陣r的物理意義,就是將物體表面點a在座標系1下的座標,變換到點a在座標系q下的座標。

由點a擴充套件到整個物體上所有點,那麼旋轉矩陣r作用就是,將目標物體表面上的所有點的座標由座標系1變換到座標系q下了,

即將目標物體由座標系1變換到座標系q。

此時還沒有結束,因為我們需要求得是目標物體所有點在座標2下的座標,由於目標物體在座標系q下的座標,

我們已經全部求出來了,又由於座標系q和2只存在原點位置不同,構成的座標系的基都是相同的,所以,

在目標物體座標系2下的座標,和目標物體在座標系1下的座標相比,就只存在乙個空間平移t,

t就是座標系q和座標系2兩者原點的空間位移。

(我們在計算兩者距離時,應當將座標系2的原點看成(0,0,0),而此時座標系q的原點位置就是其在座標系2下的座標,

假設為(2,3,4),拿座標系q的原點座標(2,3,4)減去座標系2的原點座標(0,0,0),便得到空間平移量t,即為(2,3,4)。

注意,目標物體在座標系q下的座標,仍然是將座標系q的原點看成是(0,0,0),而不是看成(2,3,4)。)

那麼我們將目標物體所有點在座標系q下的座標,加上這個空間平移量,便得到目標物體所有點在座標系2下的座標了。

由於我們不方便用多個特徵點的形式,來共同描述目標物體在座標系2下的座標,我們就把目標物體從座標系1到座標系2下,

所發生的的空間旋轉矩陣r和空間平移t來作為描述目標物體在座標系2下的6d位姿。

原始物體所在世界系到相機系的rt變換:即求目標物體表面上所有3d點,這些點在自身座標系下的3d座標,變換到,

這些點在當前相機系下的3d座標,兩者所需要的的旋轉變換r和平移量t。

(座標變換公式:空間向量(剛體)在不同基下的座標,座標之間的變換,就是旋轉變換)

3d物體的位姿,也即相機系下,物體的空間位置(x,y,z)和姿態(可用與座標軸的3個角度a,b,c,或者3x3旋轉矩陣,

或者四元數表示)(是相對於自己定義的物體標準姿態的旋轉),是6自由度

學習思路:

1)首先了解基礎知識:了解物體6dpose的物理意義,多種表示李代數尤拉角四元數等,用pnp求解6dpose的原理等;

2)其次,閱讀綜述**,看業界為了求解6d姿態用了哪些方法,傳統的以及深度學習的,可以只看摘要和前沿;再次,挑選幾篇代表性、前沿、開源的**,實際復現測試,分析優缺點;

3)最後,結合自身專案,確定輸入資料是純rgb,還是rgb-d,還是lidar點雲,有沒有對應的3d模型,對於速度或者精度要求多高,是不是只針對例項級別物體等,選擇最接近的某個演算法,在其上面改進;

如何獲得物體的主要方向?

問題描述 對於這樣的影象 2副,採用了背投光 如何獲得上面工件的主要方向 主要思路 1 分別獲得每個工件的輪廓 2 處理每個輪廓,採用pca 主成分分析 方法,獲得所有輪廓點的集合的中點,主要方向等資訊 3 繪圖並返回結果。略解 1 讀入,尋找輪廓 讀入影象,轉換為灰度 閾值處理 threshold...

雜談(如何獲得物體的尺寸)(11)

獲得物體的尺寸有幾種,可以通過render元件 meshfiter元件或者是通過給物體新增碰撞器來獲取到物體的尺寸,具體方法是 一 gameobject.renderer.bound.x 這個方法的具體返回值是meshrenderer這個組建的模型尺寸 二 gameobject.getcompone...

如何給物體新增陰影效果

陰影在3d遊戲中是非常重要的乙個細節,所以這一章我們專門介紹如何給物體新增陰影效果。我們在執行前面的demo的時候會有一種感覺,就是經過大樹的時候會有陰影投射到方塊上。那麼下面就來介紹一下如何給方塊新增陰影。燈光是陰影產生的乙個非常重要的要素,預設的燈光的shadowtype是noshadows 將...