(:)
はあなたに列ベクトルを与えることですどこには、以下の「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
を行うだろう。この定義を意味のあるものにするには、関心領域上に均一に間隔を置いたグリッドがあることを確認する必要があります。
アプリケーションによっては、他の定義もあります。たとえば、部屋の中心で高さを見つけようとしていて、壁と内部に沿ってサンプリングされたポイントを持つ場合、平均値を中央値に置き換える方が適切かもしれません。
あなたが求めていることは私には分かりません。平面は無限の幅と長さを持ちますが、高さはありません。しかし、ここに2D RANSACの実装があります:http://www.visual-experiments.com/demo/ransac.js/ –
RANSACは、多くの悪い測定を期待していない限り、過剰なもののようです。 Trusy古い線形最小二乗はうまくいくはずです。 – JonB