2012-05-03 11 views
4

私は3D点のセットを持っています。2D平面フィッティング、ransac、matlab、リンク

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

飛行機(床)に合わせて飛行機の高さを確認したい。私はそれが二次元の問題だと思う。

z=bo+b1x+b2y; 

私はをフィッティング2D RANSACプレーンのリンクを見つけることができません。誰かがこのリンクやファイルを教えてください。

第2に、いくつかのソフトウェア(商用)が平面の高さ値を与える。それは平均的なものでも、複雑なものでもあります。

よろしく、

+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項です。あなたは、ある点以上の高さについて話すことができます(原点のように)。あなたがサンプリングされたポイントの質量の中心に高さが必要な場合は今、あなたは、おそらくmean(Points_Z(:))とちょうど同じです

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

を行うだろう。この定義を意味のあるものにするには、関心領域上に均一に間隔を置いたグリッドがあることを確認する必要があります。

アプリケーションによっては、他の定義もあります。たとえば、部屋の中心で高さを見つけようとしていて、壁と内部に沿ってサンプリングされたポイントを持つ場合、平均値を中央値に置き換える方が適切かもしれません。

関連する問題