重新ICP,在没有Matlab的日子里
沒時間寫文字,先貼幾張圖:(Google spreadsheets鏈接,可能需FQ)
=======================================
沒想到在我沒有加任何文字說明的情況下,這個帖子竟然在閱讀數(shù)上列第一。 這也能看懂?我還是解釋一下好了。這里所要探討的是不同范數(shù)下的點(diǎn)云對齊問題。
ICP是Iterative Closest Point的縮寫,更一般地也可以作為Iterative Corresponding Point的縮寫,是處理點(diǎn)云對齊(或稱點(diǎn)云匹配、配準(zhǔn),英語Pointcloud Registration)問題的方法。關(guān)于點(diǎn)云對齊和ICP,先上一些參考文獻(xiàn):?
[1] Paul J. Besl and Neil D. Mckay. A method for registration of 3-d shapes. IEEE Transactions on Pattern Analysis and Machine Intelligence, 14(2):239–256, 1992.
[2] Yang Chen and Gérard Medioni. Object modelling by registration of multiple range images. Image Vision Comput., 10(3):145–155, 1992.
[3] Szymon Rusinkiewicz and Marc Levoy. Ef?cient variants of the ICP algorithm. In Third International Conference on 3D Digital Imaging and Modeling (3DIM), 2001.
[4] Timothée Jost. Fast Geometric Matching for Shape Registration. PhD thesis, Université de Neuchatel, 2002.?
[5] Helmut Pottmann, Qi-Xing Huang, Yong-Liang Yang, and Shi-Min Hu. Geometry and convergence analysis of algorithms for registration of 3D shapes. Int. J. Computer Vision, 67(3):277–296, 2006.
再上一篇最新的,其中探討了1范數(shù)在曲面擬合和點(diǎn)云對齊中的應(yīng)用。我就是看了這篇,有了寫這個帖子的想法。
[6] S. Fl?ry and M. Hofer. Surface Fitting and Registration of Point Clouds using Approximations of the Unsigned Distance Function. Computer Aided Geometric Design (CAGD), 27(1): 60-77, 2010.?
這些文章在谷歌上就可以搜到并下載,不需要任何商業(yè)數(shù)據(jù)庫。
在點(diǎn)云對齊中,每個點(diǎn)到對齊目標(biāo)都存在偏差,所有的偏差可組成一向量,不妨稱作偏差向量。最常規(guī)的想法就是使偏差的平方和最小,如使用最小二乘法解回歸問題,以前對點(diǎn)云對齊問題就是如此處理。用向量范數(shù)的語言來講,這也就是令偏差向量的2范數(shù)最小。那么探討其它范數(shù)的意義何在呢?基于1范數(shù)的優(yōu)化有更好的穩(wěn)健性,可以參看維基中的“Least absolute deviations”詞條和文獻(xiàn)[6]。而無窮大范數(shù)指示的是最大偏差絕對值,有重要的意義,例如在形位公差的評價中。
點(diǎn)到對齊目標(biāo)的偏差有兩種常用的評價方法:點(diǎn)到對應(yīng)點(diǎn)的距離和點(diǎn)到對應(yīng)點(diǎn)的切平面的距離。后一種通常有更快的收斂速度,但需要切平面的信息。在以點(diǎn)到點(diǎn)的距離為偏差評價的情形,基于1范數(shù)和無窮大范數(shù)的優(yōu)化可轉(zhuǎn)化為二次錐規(guī)劃(Second-Order Cone Programming,SOCP)問題。而在以點(diǎn)到點(diǎn)的距離為偏差評價的情形,基于1范數(shù)和無窮大范數(shù)的優(yōu)化可轉(zhuǎn)化為線性規(guī)劃(Linear Programming,LP)問題。文獻(xiàn)[6]中有將基于1范數(shù)的優(yōu)化進(jìn)行轉(zhuǎn)化的方法,而這方法很容易應(yīng)用到無窮大范數(shù)的情況。之所以要這樣轉(zhuǎn)化,將無約束優(yōu)化問題轉(zhuǎn)為約束優(yōu)化問題,我理解這是為了光滑性。原本基于1范數(shù)和無窮大范數(shù)的優(yōu)化是非光滑的,轉(zhuǎn)化后則成為光滑的約束優(yōu)化問題。盡管增加了變量數(shù),又加上了約束,但這都是值得的,可見光滑性在優(yōu)化中有多重要。此外,我還實(shí)現(xiàn)了另兩種方法:基于1范數(shù)的優(yōu)化還有一種近似的解法,就是使用Huber函數(shù)來作1范數(shù)的近似,然后用LBFGS來求解這一優(yōu)化問題;而對于更一般的基于p范數(shù)優(yōu)化,可以用IRLS方法來近似求解。
我的開發(fā)環(huán)境是gVim+TDM-MinGW。各種工具包的選取如下,矩陣處理用的是Eigen,最近點(diǎn)搜索使用ANN,LP求解使用Glpk for Windows。SOCP求解似乎只有商業(yè)化工具,我試了一下Mosek,不過它給出的解真是詭異,可能是我的能力還不夠吧。試了幾種方法之后,還是用了一種笨辦法:將SOCP轉(zhuǎn)為SDP(Semi-Definite Programming,半正定規(guī)劃),將相關(guān)數(shù)據(jù)寫出為sparse SDPA格式的文件,再調(diào)用CSDP來求解。基于Huber函數(shù)的優(yōu)化中用的LBFGS方法采用的是libLBFGS。是如果在Matlab下,問題就會簡單些(推斷,我也沒實(shí)際驗(yàn)證),矩陣處理自不必說。最近點(diǎn)搜索方面,ANN依然可用(ANN MATLAB Wrapper),我還用過這個。優(yōu)化方面,Matlab本身就可解LP,而SOCP可用SeDuMi。
用一個小點(diǎn)云(約1400點(diǎn))做了下測試,談不上驗(yàn)證了什么。考慮了三種范數(shù),所以有三張收斂圖。作為縱座標(biāo)的指標(biāo),1范數(shù)用的是平均絕對誤差,2范數(shù)用的是均方根誤差,無窮大范數(shù)用的是最大絕對誤差(也就是無窮大范數(shù)本身)。圖中各種方法名稱的意義如下:
分為兩大類,以P 開頭的表示以點(diǎn)到點(diǎn)的距離為偏差評價方法,而以PL 開頭的表示以點(diǎn)到平面的距離為偏差評價方法。后面的符號中,1表示1范數(shù),2表示2范數(shù),i表示無窮大范數(shù),1H表示使用Huber函數(shù)近似的1范數(shù),RW(Re-Weighted)表示用IRLS計(jì)算p范數(shù)優(yōu)化,RW后跟的數(shù)字就是p的值。此外,以P 開頭的方法中還有2T和RWT兩種變體,它們在求解最優(yōu)變換時不是采用的閉合解方法,而是像以點(diǎn)到平面的距離為目標(biāo)時使用的無窮小變換(也就是用切空間,所以用T來標(biāo)明這類變體)。其實(shí)倒不如說P2和PRW兩個是另類,因?yàn)橹挥兴鼈冇虚]合解方法。
然后是看圖說話。基于1范數(shù)的優(yōu)化是為了穩(wěn)健性而提出的,但是計(jì)算量是個大問題。如果只是為了穩(wěn)健性,使用加權(quán)的最小二乘法可能更好,因?yàn)椴粌H更快也更靈活。而使用Huber函數(shù)來近似1范數(shù)正是為了減少計(jì)算量。在以點(diǎn)到點(diǎn)的距離為偏差評價的情況下,實(shí)驗(yàn)顯示這一方法很成功,兩者的收斂曲線是重合的(在圖上找不到P1的曲線,因?yàn)樗帽籔1H的給蓋住)。但在以點(diǎn)到平面的距離為偏差評價的情況下,兩者的收斂曲線不一致,而且PL1H的收斂比較糟糕,LBFGS搜索幾乎都不成功。具體的原因我不清楚,不過我推測還是光滑性不夠。基于無窮大范數(shù)的優(yōu)化收斂速度則實(shí)在太慢。它對于對應(yīng)性的要求應(yīng)是很高的。在點(diǎn)云和目標(biāo)距離還比較大時可以考慮先采用2范數(shù)進(jìn)行迭代,后面再使用窮大范數(shù)。最后,很有趣的一點(diǎn),在基于IRLS的p范數(shù)優(yōu)化中,使用高于2的p值常能獲得比2范數(shù)優(yōu)化更快的收斂速度。PRW3就明顯快于P2,而PLRW5更是在前幾個迭代步一騎絕塵,遠(yuǎn)超其它方法。不過PLRW5穩(wěn)定性不夠,最后沒能收斂到0,而且之所以用5而不是3或4,正是這兩種穩(wěn)定性太糟。采用加權(quán)的ICP,以前的文獻(xiàn),如[3,4]中也介紹過了,但其中的加權(quán)方法大抵是對匹配性更好的點(diǎn)對以較高的權(quán)值。可在基于IRLS的p范數(shù)(p>2)優(yōu)化中則相反,對匹配性較差的點(diǎn)對(點(diǎn)之間距離更大者)以較高的權(quán)值。而實(shí)驗(yàn)顯示這樣可以加速收斂,但會減少穩(wěn)定性。其中的原理我覺得可以這樣解釋:匹配性較差的點(diǎn)更需要改善其匹配性,使用較高的權(quán)值可以令這些點(diǎn)更快地接近目標(biāo)曲面,從而更快地改善匹配性;另一方面,利用匹配性較差的點(diǎn)對計(jì)算的最優(yōu)變換可能是不“正確”的,進(jìn)而使整個算法的結(jié)果不能正確地收斂。這說明在權(quán)值的選取上其實(shí)是存在著一個速度與穩(wěn)定性的權(quán)衡,而這一點(diǎn)似乎前人并未提到。
?
源代碼
轉(zhuǎn)載于:https://www.cnblogs.com/wildabc/archive/2009/11/22/1608065.html
總結(jié)
以上是生活随笔為你收集整理的重新ICP,在没有Matlab的日子里的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight 4 Beta正式
- 下一篇: opera9.6 的一个顽固的bug