2012-05-03 66 views
4

我有一組3D點。2D平面擬合,ransac,matlab,鏈接

Points_[x,y,z]% n*3 where n is number of points 

我想適合飛機(它是地板)並檢查飛機的高度。我認爲這是2D問題。

z=bo+b1x+b2y; 

我無法找到一個鏈接,2D RANSAC平面擬合。有人可以給這個鏈接或文件。其次,有些軟件(商業版)給出了飛機的高度值。這意味着一些複雜的價值。

問候,

+0

我不清楚你在問什麼。一架飛機有無限的寬度和長度,但沒有高度。但是,下面是一個2D RANSAC實現:http://www.visual-experiments.com/demo/ransac.js/ –

+0

除非他預計會有很多不好的測量結果,否則RANSAC似乎是過度殺傷性的。 Trusy老線性最小平方應該工作得很好。 – JonB

回答

1

如果形成下面「A」矩陣

A = [ones(numel(Points_X),1), Points_X(:), Points_Y(:)]; 

其中(:)是給你列向量(如果它們沒有以開始)

然後你可以寫出你的方程作爲經典的線性方程組:

A*b = Points_Z(:); 

其中b = [b0; B1; b2] - 您嘗試確定的參數的列向量。 這具有典型的解決方案

b=A\Points_Z(:) 

b=pinv(A)*Points_Z(:)

查看mldivide和PINV幫助。

你必須有3個或更多的點並不都在一條線上。對於這樣的超定系統,pinv和\基本上會產生相同的結果。如果它們幾乎共線,則可能有一些優勢。

b中的3個參數基本上是平面上的平面的高度,x斜率和y平面的斜率。如果你仔細想想,一架飛機的「高度」就是你的z字。你可以談論某個點以上的高度(如原點)。現在,如果你想在高採樣點的質心,你會然後做

z_mean = [1 mean(Points_X(:)) mean(Points_Y(:))] * b 

這可能只是相當於mean(Points_Z(:))。爲了使這個定義有意義,你必須確保你在感興趣的區域上有一個均勻間隔的網格。

可能存在其他定義,例如,如果您試圖找到房間中心的高度,並沿着牆壁和內部採樣點,則用平均值替換平均值可能更合適。