提及機器人視覺(jué),不免會(huì )想到計算機視覺(jué)和機器視覺(jué),很多人會(huì )把這三者弄混。
計算機視覺(jué)是以圖片認知為基礎的科學(xué),只通過(guò)圖片識別輸出結果,代表企業(yè)是谷歌。機器視覺(jué)多用于生產(chǎn)線(xiàn)上的質(zhì)量檢測,普遍基于2D識別,被廣泛應用于3C電子行業(yè),代表企業(yè)是康耐視。機器人視覺(jué)是指不僅要把視覺(jué)信息作為輸入,而且還要對這些信息進(jìn)行處理,進(jìn)而提取出有用的信息提供給機器人。是為了讓機器人真正變成“機器人”,而不是機器臂。傳統的機器臂只是自動(dòng)化設備,是通過(guò)編程處理固定的動(dòng)作,是不能處理具有變動(dòng)性事物的能力。機器人視覺(jué)這要求機器人要擁有3D視覺(jué),能處理三維空間里的三維物體問(wèn)題,并且具有復雜算法,支撐機器人對位置、動(dòng)作、軌跡等復雜信息的捕捉,這必須要依賴(lài)人工智能和深度學(xué)習來(lái)完成。機器人視覺(jué)是為認知機器人服務(wù),具備不斷學(xué)習的功能尤為關(guān)鍵,無(wú)論是做檢測還是定位引導,當機器人做的次數越多,伴隨著(zhù)數據的增長(cháng)變化,機器人的準確性也會(huì )越高,這跟人的學(xué)習成長(cháng)能力是類(lèi)似的。機器人視覺(jué)是一種處理問(wèn)題的研究手段。經(jīng)過(guò)長(cháng)時(shí)間的發(fā)展,機器人視覺(jué)在定位,識別,檢測等多個(gè)方面發(fā)展出來(lái)各種方法。其以常見(jiàn)的相機作為工具,以圖像作為處理媒介,獲取環(huán)境信息。
相機是機器人視覺(jué)的主要武器,也是機器人視覺(jué)和環(huán)境進(jìn)行通信的媒介。相機的數學(xué)模型為小孔模型,其核心在于相似三角形的求解。其中有三個(gè)值得關(guān)注的地方:焦距等于物距加上像距。此為成像定理,滿(mǎn)足此條件時(shí)才能成清晰的像。如果連續改變焦距f ,并同時(shí)移動(dòng)相機改變Z,則可以使得物體x在圖像上所占像素數目不變(X)。此為DollyZoom原理。如果某個(gè)物體在該物體后方(更大的Z),可利用此原理任意調整兩個(gè)物體在相片上的比例。焦距越長(cháng),則視場(chǎng)越小,可以將遠處的物體拍清晰。同時(shí)相片會(huì )有更大的景深。
消失點(diǎn)是相片中特有的。此點(diǎn)在相片中不直接存在,在現實(shí)中直接不存在。由于射影變換,相片中原本平行的線(xiàn)會(huì )有相交的趨勢。如果求的平行直線(xiàn)在圖像中的交點(diǎn),則該點(diǎn)對應現實(shí)中無(wú)窮遠處的一點(diǎn)。該點(diǎn)的圖像坐標為[X1 X1 1]。此點(diǎn)成為消失點(diǎn)。相機光心與消失點(diǎn)的連線(xiàn)指向消失點(diǎn)在攝像機坐標系中的方向。
此外,同一平面上各個(gè)方向的消失點(diǎn),會(huì )在圖像中組成一條直線(xiàn),稱(chēng)為水平線(xiàn)。該原理可以用于測量站在地上的人的高度。值得注意的是只有相機水平時(shí),horizen的高度才是camera Height.2.1 位姿估計
如果我們能獲得一幅圖中的2個(gè)消失點(diǎn)。且這2個(gè)消失點(diǎn)所對應的方向是相互垂直的(網(wǎng)格),那么我們就可以估計出相機相對于此圖像的姿態(tài)(靶標位姿估計)。 在獲得相機相對于靶標的旋轉向量后,如果相機內部參數已知,且已知射影變換矩陣,則可計算相機相對于靶標的距離,那么可以估計機器人的位置。H = K^-1*(H射影矩陣) 2.2 點(diǎn)線(xiàn)對偶
射影變化是空間中平面--->平面的一種變換。對齊次坐標,任意可逆矩陣H均表達了射影變換。簡(jiǎn)而言之,可以表達為A = HB ,其中AB是[X Y 1]形式的其次坐標。射影變換的一大作用就是將某一形狀投射成其他形狀。比如,制作相片中的廣告牌,或者比賽轉播中的廣告牌,或者游泳比賽運動(dòng)員到達后那個(gè)biu的一下出現的國旗。射影變換也是增強現實(shí)技術(shù)的基礎。
射影變換的核心在于H的求取。普通的求解方法見(jiàn)機器視覺(jué)教材。假設平面相片的四個(gè)點(diǎn)分別是A(0,0,1),B(0,1,1),C(1,1,1),D(1,0,1)。顯然,這四個(gè)點(diǎn)需要投射到四個(gè)我們已知像素位坐標的圖像區域中。此外,我們還可以依據像素位置計算兩個(gè)有趣的點(diǎn),V1(x1, y1, z1),V2(x2,y2,z2),這兩個(gè)點(diǎn)都是圖像點(diǎn)。他們對應的實(shí)際坐標假設是(0,1,0),(1,0,0)。那么我們就有三個(gè)很有趣的實(shí)際點(diǎn)了。分別是(1,0,0),(0,1,0),(0,0,1),恰好是一個(gè)Identity Matrix。這三個(gè)實(shí)際坐標經(jīng)過(guò)射影變換會(huì )得到像素坐標。像素坐標又是已知的。那么H的第一列就應該對應beta*V2,第二列應該對應alpha*V1。第三列應該對應gama*【A的像素坐標】。alpha beta gama是常數?!旧溆白兓蟮淖鴺藨獮槌党艘云浯巫鴺恕?。如果能解得alpha beta gama,那么我們就獲得了射影變換矩陣。顯然把C點(diǎn)的像素坐標帶入方程,我們則有3個(gè)方程,4個(gè)未知數(引入了一個(gè)lamda)。但是lamda并不影響,除過(guò)去后我們只要alpha/lamda,beta/lamda,gama/lamda當作未知數即可解除射影矩陣。所以,射影變換矩陣的第一列代表消失點(diǎn)V1,第二列代表消失點(diǎn)V2,第一列與第二列的叉乘,代表水平線(xiàn)方程(點(diǎn)線(xiàn)對偶)。上回介紹了機器人視覺(jué)的一些基礎信息,說(shuō)到機器人視覺(jué)的核心任務(wù)是estimation,理論框架是射影幾何理論。然而,整個(gè)estimation的首要條件是已知像素點(diǎn)坐標,尤其是多幅圖中對應點(diǎn)的像素坐標。單幅圖像的處理方法不贅述,想講講不變點(diǎn)檢測與不變特征。由于機器人在不斷運動(dòng),所以可能從不同方向對同一物體進(jìn)行拍攝。而拍攝的距離有遠近,角度有titled. 由于射影變換本身的性質(zhì),無(wú)法保證兩幅圖中的物體看上去一樣。所以我們需要一種特征提取方法(特征點(diǎn)檢測),能夠保證檢測是旋轉,縮放不變的。除此之外還要一種特征描述方法,同樣對旋轉和縮放不變。
SIFT特征提取可以分為以下幾個(gè)步驟:(1)多尺度卷積;(2)構造金字塔;(3)3D非極大值抑制。
多尺度卷積的作用是構造一個(gè)由近及遠的圖像。金字塔則由下采樣進(jìn)行構造。對于不同尺度的圖像同一個(gè)像素,我們可以跟蹤它“灰度”的變化。我們發(fā)現,如果某一點(diǎn)對不同 sigma 的模版響應是不同的,最大響應(卷積后的灰度)所對應的scale 成為該點(diǎn)本征scale。這有點(diǎn)像對一個(gè)機械結構給不同頻率的激勵,某一頻率下會(huì )發(fā)生共振,我們可以記錄此頻率一定程度上代表了此結構(單擺頻率只和ml有關(guān),有了f就可以重現系統)。所以,我們只要找到一個(gè)合適的模版(激勵方式),再找到最大響應,就可以獲取圖片中各個(gè)點(diǎn)的 Intrinsic Scale(本征尺度)。同一物體在不同距離拍攝后,都會(huì )統一在Intrinsic Scale下進(jìn)行響應。由此解決了尺度不變的問(wèn)題。3D非極大值抑制是指在某點(diǎn)的3*3*3鄰域內,僅取最大響應,作為特征點(diǎn)。由于該點(diǎn)是空間鄰域中響應最強的,所以該點(diǎn)也是旋轉不變的。從各個(gè)方向看,該點(diǎn)響應最強。
特征提取和特征描述實(shí)際上是兩碼事。在上一節中特征提取已經(jīng)結束了。假如有兩幅圖片,那么相同的特征點(diǎn)肯定會(huì )被找到。特征描述的作用是為匹配做準備,其以特征點(diǎn)局部區域信息為標準,將兩幅圖中相同的特征點(diǎn)聯(lián)系起來(lái)。特征的本質(zhì)是一個(gè)高維向量。要求尺度不變,旋轉不變。
這里所使用的是HOG特征。特征描述可以分為兩步:(1)局部主方向確定;(2)計算梯度直方圖。以sigma作為特征描述選擇范圍是一個(gè)合理的想法,因為sigma描述了尺度,特征點(diǎn)位置+尺度 = 特征點(diǎn)所代局部信息。在此基礎上,統計其領(lǐng)域內所有像素的梯度方向,以方向統計直方圖作為特征向量,至此完成HOG特征構造。重要的是,在統計方向之前,需要把圖像主方向和X軸方向對齊。示意圖如下:圖中黃色的有點(diǎn)像時(shí)鐘的東西是特征點(diǎn)+scale,指針代表該片小圖像的主方向(PCA)。綠色的是直方圖的bin,用于計算特征向量。最后,我們只要匹配特征向量就可以得到 圖像1 --- 圖像2 的對應點(diǎn)對,通過(guò)單應矩陣的計算就可以將兩幅圖拼接在一起。如果已知標定信息則可進(jìn)行3D reconstruction。上篇文章說(shuō)到從場(chǎng)景中提取特征點(diǎn),并且對不同角度中的特征點(diǎn)進(jìn)行匹配。這次要先介紹一個(gè)工具 —— 擬合。擬合本質(zhì)上是一個(gè)優(yōu)化問(wèn)題,對于優(yōu)化問(wèn)題,最基本的是線(xiàn)性最小二乘法。換言之,我們需要保證擬合誤差最小。
基本的最小二乘法擬合解決的是 點(diǎn) --- 模型 的擬合問(wèn)題。以點(diǎn)到直線(xiàn)的擬合為例,按照擬合誤差的建模,該問(wèn)題可以分為兩類(lèi)?!?/span>
第一類(lèi)以 因變量 誤差作為優(yōu)化目標,該類(lèi)問(wèn)題往往是自變量---因變量模式,xy的單位不同。第二類(lèi)以 距離 作為優(yōu)化目標,該類(lèi)問(wèn)題xy的單位往往相同,直線(xiàn)不代表趨勢,而是一種幾何模型。由于優(yōu)化目標不同,故建模方式與解均不同,但是解法思路是一樣的,都是講求和化作向量的模。而向量又是矩陣的運算結果,最終化為奇異值分解問(wèn)題。
RanSaC算法(隨機采樣一致)原本是用于數據處理的一種經(jīng)典算法,其作用是在大量噪聲情況下,提取物體中特定的成分。下圖是對RanSaC算法效果的說(shuō)明。圖中有一些點(diǎn)顯然是滿(mǎn)足某條直線(xiàn)的,另外有一團點(diǎn)是純噪聲。目的是在大量噪聲的情況下找到直線(xiàn)方程,此時(shí)噪聲數據量是直線(xiàn)的3倍。
如果用最小二乘法是無(wú)法得到這樣的效果的,直線(xiàn)大約會(huì )在圖中直線(xiàn)偏上一點(diǎn)。關(guān)于隨機采樣一致性算法的原理,在wiki百科上講的很清楚,甚至給出了偽代碼和matlab,C代碼,想換一個(gè)不那么嚴肅或者說(shuō)不那么學(xué)術(shù)的方式來(lái)解釋這個(gè)算法。實(shí)際上這個(gè)算法就是從一堆數據里挑出自己最心儀的數據。所謂心儀當然是有個(gè)標準(目標的形式:滿(mǎn)足直線(xiàn)方程?滿(mǎn)足圓方程?以及能容忍的誤差e)。平面中確定一條直線(xiàn)需要2點(diǎn),確定一個(gè)圓則需要3點(diǎn)。隨機采樣算法,其實(shí)就和小女生找男朋友差不多。- 從人群中隨便找個(gè)男生,看看他條件怎么樣,然后和他談戀愛(ài),(平面中隨機找兩個(gè)點(diǎn),擬合一條直線(xiàn),并計算在容忍誤差e中有多少點(diǎn)滿(mǎn)足這條直線(xiàn))
- 第二天,再重新找個(gè)男生,看看他條件怎么樣,和男朋友比比,如果更好就換新的(重新隨機選兩點(diǎn),擬合直線(xiàn),看看這條直線(xiàn)是不是能容忍更多的點(diǎn),如果是則記此直線(xiàn)為結果)
- 終于到了某個(gè)年齡,和現在的男朋友結婚(迭代結束,記錄當前結果)
顯然,如果一個(gè)女生按照上面的方法找男朋友,最后一定會(huì )嫁一個(gè)好的(我們會(huì )得到心儀的分割結果)。只要這個(gè)模型在直觀(guān)上存在,該算法就一定有機會(huì )把它找到。優(yōu)點(diǎn)是噪聲可以分布的任意廣,噪聲可以遠大于模型信息。這個(gè)算法有兩個(gè)缺點(diǎn),第一,必須先指定一個(gè)合適的容忍誤差e。第二,必須指定迭代次數作為收斂條件。綜合以上特性,本算法非常適合從雜亂點(diǎn)云中檢測某些具有特殊外形的物體。
線(xiàn)性最小二乘法已經(jīng)有了很好的解釋。但是生活總是如此不易,能化成上述標準矩陣形式的問(wèn)題畢竟還是少數,大部分情況下,我們面對的不是min(||Ax - b||),而是 min(||f(x)-b||) !!!
在三維重建中,如果我們有2個(gè)以上視角,那么三條線(xiàn)很可能是不交于一點(diǎn)的。原因是我們選擇的旋轉矩陣有精度表達問(wèn)題,位姿估計也存在誤差。使用奇異值分解的方法是求得到三條線(xiàn)距離最小的點(diǎn),還有一種合適的估計,是使得該點(diǎn)在三個(gè)相機上的重復投影誤差最小。同時(shí),R,T,P(X,Y,Z)進(jìn)行估計,最終保證Reprojection err 最小的方法————the state of the art BUNDLE ADJUST.先回到最原始的問(wèn)題,如何求解非線(xiàn)性最小二乘法。由線(xiàn)性最小二乘法,我們可以得到非線(xiàn)性最小二乘法矩陣表達形式。如果要求得其局部最小值,則對 x 求導后,導數應為 0。然而,這個(gè)東西并不好解,我們考慮使用梯度下降迭代的方式。這里使用的是單純的梯度。這里有個(gè)非常不好理解的地方,其假設detaX非常小,故表示成上述形式,以保證 f(x + deta_X)<f(x) , 只要依次迭代 x 就能保證每次都向著(zhù)f(x)減小的方向移動(dòng)。實(shí)際上,這個(gè)解應該由HESSIAN矩陣給出。以信標定位為例。講道理,兩個(gè)信標為圓心畫(huà)圓應該給出位置的兩個(gè)解析解。但是如果有很多信標,那么信標就會(huì )畫(huà)出一塊區域........這是SLAM里的經(jīng)典問(wèn)題了,后面會(huì )有博客專(zhuān)門(mén)講BUNDLE ADJUST.
極幾何是機器人視覺(jué)分支——雙目視覺(jué)中,最為重要的概念。與結構光視覺(jué)不同,雙目視覺(jué)是“主動(dòng)測量”方法。
極幾何的研究對象是兩幅有重疊區域圖像。研究目標是提取相機拍攝位姿之間的關(guān)系。一旦得到兩次拍攝位姿之間的關(guān)系,我們就可以對場(chǎng)景點(diǎn)進(jìn)行三維重建。
極幾何定義的物理量包括4個(gè):1、極點(diǎn);2、極線(xiàn);3、基本矩陣;4、本征矩陣;定義如左圖。極幾何研究的物理量包括4個(gè):C1坐標,C2坐標,R,T,定義如右圖。極點(diǎn)的本質(zhì)是另一臺相機光心在本圖像上的映射點(diǎn)。極線(xiàn)的本質(zhì)是另一臺相機光線(xiàn)在本圖像上的映射線(xiàn)。(極點(diǎn)和極線(xiàn)都是在圖像上的)1.1、本征矩陣
在相機2的坐標系中,場(chǎng)景點(diǎn)坐標:X2 = RX1+ t極線(xiàn)在空間中的映射 :X2 - t = RX1此時(shí),三個(gè)向量在同一個(gè)平面上,則有:X2 T tx RX1 = 0其中,tx 代表 t 的叉乘矩陣。tx R 稱(chēng)為本征矩陣E. 兩幅圖片一旦拍攝完成R與T都是確定的??臻g中任何一組對應點(diǎn)都必須滿(mǎn)足本征矩陣!1.2、基本矩陣
空間中的點(diǎn)滿(mǎn)足E矩陣,則該點(diǎn)坐標Zoom后,仍然必須滿(mǎn)足E矩陣。坐標的Zoom顯然和相機內部矩陣有關(guān)。其中,x1 ,x2 是齊次像素坐標。那么,X1 = K-1x1 ;X2 = K-1x2x2 T K-Ttx RK-1 x1 = 0 ======> K-TEK-1 = 0 =========> x2 T F x1 = 0 F = K-TEK-1 稱(chēng)為基本矩陣。基本矩陣的秩是2,因為它有0空間。同時(shí),其自由度是8,因為它接受的是齊次坐標。每組圖像點(diǎn)可以提供1個(gè)方程,所以由8組點(diǎn)就可以線(xiàn)性解出F矩陣。當然,解法是化成Ax = 0,然后使用奇異值分解取v的最后一列。然后2次奇異值分解去掉最小奇異值正則化。1.3、極點(diǎn)與極線(xiàn)
顯然這里有熟悉的身影,由點(diǎn)線(xiàn)對偶可知,x2 在直線(xiàn) F x1 上。該直線(xiàn)是極線(xiàn)在圖像2上的方程。x1 在直線(xiàn) x2 T F 。該直線(xiàn)是極線(xiàn)在圖像1上的方程。極點(diǎn)是多條極線(xiàn)的交點(diǎn)(最少兩條)
E = tx R = [ tx r1 tx r2 tx r3 ]
E的秩為2,因為其有0空間。同時(shí),由于r1 r2 r3 是正交的,所以其叉乘之后必然也是正交的。所以不妨假設其叉乘完之后依然滿(mǎn)足旋轉矩陣的某些性質(zhì)。比如:每一列,模相等。由 tT E = 0 可知,對E奇異值分解之后,t 為最小奇異值所對應的 u(:,end). 如下:這里假設了 R = UYVT .因為U,V和R是同族的。所以必然由矩陣Y使得上式成立。V是相互垂直的,R的作用是旋轉,U則必然是相互垂直的。所以這里R一定有解,不妨設一個(gè)中間變量Y。并很容易解得:綜合來(lái)看,由4組可能的解,對應以下四種情況,其中只有第一種是可能的。故det(R) = 1 則猜z中了正確的解,如果det(R) = -13、由空間位置關(guān)系恢復三維坐標
在已知標定信息,兩相機位置關(guān)系的情況下,就已知了兩個(gè)相機的投影矩陣P,對于空間中一點(diǎn)X1,有以下關(guān)系:顯然,我們又有了Ax = 0的神奇形式。奇異值分解搞定之。4、由RANSAC求 F 矩陣
有了8個(gè)對應點(diǎn),我們就可以求得F矩陣,再加上K,我們就可以對兩幅圖片進(jìn)行三維重建。然而想要自動(dòng)的求取8個(gè)對應點(diǎn)還是有一定難度。SIFT算法提供了一種自動(dòng)匹配的可能性,然而,匹配結果還有很多誤匹配的點(diǎn)。本節的目標是利用RANSAC作為算法基礎,基礎矩陣作為方法,來(lái)對匹配結果進(jìn)行判斷。首先,由于檢測誤差等因素,像素點(diǎn)不可能恰好滿(mǎn)足基本方程。所以點(diǎn)到極線(xiàn)會(huì )有一定的距離。我們采用垂直距離來(lái)建模,有以下表達式: F1表示F的第一列。只要誤差小于閾值,都認為該點(diǎn)符合 F 方程。算法流程如下:1、隨機取8個(gè)點(diǎn);2、估計F;3、計算所有點(diǎn)的e,并求#inlier;4、回到1,2,3,如果#inlier變多則更新F_candidate;5、迭代很多次結束,F_candidate 為F的估計值。RANSAC算法又一次證明了其對噪聲超級好的控制能力。
之前說(shuō)到,機器人視覺(jué)的核心是Estimation,求取特征并配準,也是為了Estimation做準備。一旦配準完成,我們就可以從圖像中估計機器人的位置,姿態(tài)。有了位置,姿態(tài),我們可以把三維重建的東西進(jìn)行拼接。從視覺(jué)信息估計機器人位姿的問(wèn)題可以分為三個(gè)大類(lèi):1、場(chǎng)景點(diǎn)在同一平面上。2、場(chǎng)景點(diǎn)在三維空間中。3、兩幅點(diǎn)云的配準。所有問(wèn)題有一個(gè)大前提就是知道相機內部矩陣K。
單應矩陣原指從 R2--R2 的映射關(guān)系。
但在估計問(wèn)題中,如果我們能獲得這種映射關(guān)系,就可以恢復從世界坐標系 x_w 到相機坐標系 x_c 的變換矩陣。此變換矩陣表達了相機相對于x_w 的位姿。H = s*K*[r1 r2 t] —— 假設平面上z坐標為0s*[r1 r2 t] = k-1*H —— 利用單應矩陣求取旋轉與平移向量s 并不重要,只需要對k-1*h1 進(jìn)行歸一化就能求出來(lái)。所以,最重要的就是如何求取兩個(gè)場(chǎng)景中的單應。在前面我提過(guò)從消失點(diǎn)來(lái)求取單應關(guān)系,但是如果不是從長(cháng)方形 --- 四邊形的映射,我們并沒(méi)有消失點(diǎn)可以找。這里要介紹的是一種優(yōu)雅到爆棚的方法?;诰仃囎儞Q與奇異值分解。JB SHI真不愧大牛。三兩句就把這個(gè)問(wèn)題講的如此簡(jiǎn)單?! ?/span>由于H矩陣一共有8個(gè)自由度,每一對單應點(diǎn)可以提供兩個(gè)方程,所以4個(gè)單應點(diǎn)就可以唯一確定單應矩陣H。Ax = 0,我們在擬合一章中已經(jīng)了解過(guò)了。x 是最小奇異值對于的V矩陣的列。這里是奇異值分解的第一次出現。至此,我們恢復了H矩陣。按照正常的思路就可以解除[r1 r2 t]了。但是,我們的H矩陣是用奇異值分解優(yōu)化出來(lái)的,反解的r1 r2 并不一定滿(mǎn)足正交條件,也不一定滿(mǎn)足等長(cháng)條件。所以,我們還要擬合一次RT矩陣。其中R' = [k-1H(:,1:2) x ]. 方法依舊是奇異值分解,R = UV'. 這是奇異值分解的第二次出現。
由單應矩陣進(jìn)行位姿估計的前提是所有點(diǎn)都在一個(gè)平面上。而由射影變換進(jìn)行位姿估計則舍棄了此前提,故上一節是本節的一個(gè)特例。此問(wèn)題學(xué)名為PnP問(wèn)題:perspective-n-point。
仿造上面的思路,我們依舊可以寫(xiě)成以下形式: 此處射影矩陣一共有12個(gè)未知數,9來(lái)自旋轉矩陣,3來(lái)自平移向量。每個(gè)點(diǎn)可以提供2個(gè)方程。故只要6個(gè)場(chǎng)景點(diǎn),我們就可以用奇異值分解獲得P矩陣的值。同樣,在獲得P矩陣后求T = k-1*P,最后利用奇異值分解修正T.不過(guò)按照常理,此問(wèn)題只有6個(gè)自由度(3平移,3旋轉)。我們使用6個(gè)點(diǎn)其實(shí)是一種dirty method。
對于現在很火的RGBD相機而言,可能這種情況會(huì )比較多。從不同角度獲得了同一物體的三維圖像,如何求取兩個(gè)位姿之間的變換關(guān)系。這個(gè)問(wèn)題有解析解的前提是點(diǎn)能夠一一對應上。如果點(diǎn)不能一一對應,那就是ICP算法問(wèn)題了。
此問(wèn)題學(xué)名為:Procrustes Problem。來(lái)自希臘神話(huà)。用中文來(lái)比喻的話(huà)可以叫穿鞋問(wèn)題。如何對腳進(jìn)行旋轉平移,最后塞進(jìn)鞋里。其數學(xué)描述如下:通過(guò)選擇合適的R,T,減小AB之間的差別?! ?/span>T 其實(shí)很好猜,如果兩個(gè)點(diǎn)團能重合,那么其重心肯定是重合的。所以T代表兩個(gè)點(diǎn)團重心之間的向量。此問(wèn)題則有如下變形: 由矩陣分析可知,最后兩項實(shí)際上是相等的(跡的循環(huán)不變性與轉置不變性)
跡是和奇異值相關(guān)的量(相似變換跡不變)顯然,如果Z的跡盡可能大,那么只有一種情況,Z是單位陣,單位陣的跡是旋轉矩陣里最大的。所以R的解析解如下: 最后一個(gè)話(huà)題是Bundle Adjustment. 機器人視覺(jué)學(xué)中,最頂尖的方法。1、基于非線(xiàn)性?xún)?yōu)化的相機位姿估計
之前已經(jīng)在擬合一篇中,已經(jīng)補完了非線(xiàn)性最小二乘擬合問(wèn)題。Bundle Adjustment,中文是光束平差法,就是利用非線(xiàn)性最小二乘法來(lái)求取相機位姿,三維點(diǎn)坐標。在僅給定相機內部矩陣的條件下,對四周物體進(jìn)行高精度重建。Bundle Adjustment的優(yōu)化目標依舊是最小重復投影誤差?! ?/span>與利用non-linear mean square 解三角同,bundle adjustment 中所有的參數,RCX均為變量。N幅圖則有N個(gè)位姿,X個(gè)點(diǎn),我們會(huì )得到非常大的jacobbian Matrix.本質(zhì)上,需要使用雅克比矩陣進(jìn)行梯度下降搜索。詳細見(jiàn)之前介紹過(guò)的“擬合”篇。
每一行是一個(gè)點(diǎn)在該位姿下的誤差,每一列代表f對x分量的偏導數。q x c 均為變量,q是旋轉四元素,x 是三維點(diǎn)空間坐標,c 是相機光心在世界坐標系下的坐標。J 可以分為三部分,前4列代表對旋轉求導,中間三列代表對c求導,最后三列代表對x求導。其中,對旋轉求導又可以分解為對旋轉矩陣求導X旋轉矩陣對四元素q求導。一旦獲得J的表達式,我們就可以使用Newton-Gaussian 迭代對x尋優(yōu)了。求導后的數學(xué)表達式如下:通過(guò)同時(shí)迭代所有的q C X ,最終可以同時(shí)得到世界點(diǎn)坐標,相機位姿 ——SLAM!
—版權聲明—
僅用于學(xué)術(shù)分享,版權屬于原作者。
若有侵權,請聯(lián)系微亞刪除或修改!