3D 空間での点平面のフィッティング法

1. 平面方程式、平面法線ベクトル、点から平面までの距離を求める
既知の 3 つの点 p1 (x1、y1、z1)、p2 (x2、y2、z2)、p3 (x3、y3、z3) )、

平面方程式を決定するには、平面の法線ベクトルを見つけることが重要です。

これを行うには、ベクトル p1p2 (x2-x1、y2-y1、z2-z1)、p1p3 (x3-x1、y3-y1、z3-z1) を作成します。平面法線はこれら 2 つのベクトルに垂直なので、法線ベクトルn:
ここに画像の説明を挿入
平面 式: a(x-x1)+b(y-y1)+ c(z-z1)=0;

d=-a x1-b y1-c*z1.
平面方程式は ax+by+cz+d=0 です。

//已知3点坐标,求平面ax+by+cz+d=0;
 
void get_panel(Point p1,Point p2,Point p3,double &a,double &b,double &c,double &d)
 
{
    
    
 
    a = (p2.y - p1.y)*(p3.z - p1.z) - (p2.z - p1.z)*(p3.y - p1.y);
 
    b = (p2.z - p1.z)*(p3.x - p1.x) - (p2.x - p1.x)*(p3.z - p1.z);
 
    c = (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x);
 
    d = 0 - (a * p1.x + b*p1.y + c*p1.z);
 
}
 
 
// 已知三点坐标,求法向量
 
Vec3 get_Normal(Point p1,Point p2,Point p3)
 
{
    
    
 
    a = (p2.y - p1.y)*(p3.z - p1.z) - (p2.z - p1.z)*(p3.y - p1.y);
 
    b = (p2.z - p1.z)*(p3.x - p1.x) - (p2.x - p1.x)*(p3.z - p1.z);
 
    c = (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x);
 
    return Vec3(a, b, c);
 
}
 
 
//点到平面距离
 
double dis_pt2panel(Point pt,double a,double b,double c,double d)
{
    
    
 
    return f_abs(a * pt.x + b*pt.y + c*pt.z + d) / sqrt(a * a + b * b + c * c);
 
}

空間にノイズがある特定の平面上の散乱点 (xi , yi , zi ) のグループを仮定します。i = 1 , 2 , ..., N , (x_{i},y_{i},z_{i } ),i=1,2,...,N,( ×y) =1 2 ... ,N 平面方程式の一般式A x + B y + C z + D = 0 Ax+By+Cz+D=0A ×+によって_+Cz _+D=0、原点を通過しない平面の場合、A x + B y + C z + 1 = 0 Ax+By+Cz+1=0A ×+によって_+Cz _+1=0であるため、散乱点ができるだけ平面上に収まるように係数 A、B、C を見つけることが問題になります。以下、2 つの観点から最小二乗法による最適解を導き出します。

誤差関数の最小点を見つける方法
A、B、C を平面の最適なパラメーターとすると、各点( xi 、 yi 、 zi ) について、 i = 1 、 2 、...、 N (x_ { i},y_{i},z_{i}),i=1,2,...,N( ×y) =1 2 ... ,N は、この平面式に誤りがあることを示していますei = A xi + B yi + C zi + 1 e_{i}=Ax_{i}+By_{i}+Cz_{i}+1e=A ×+によって_+Cz _+1、すべての誤差の 2 乗を合計します。A
、B、および C を平面の最適なパラメーターとすると、平面の式に誤差がある各点について、すべての誤差の 2 乗を合計します。合計の結果は次のとおりです。
ここに画像の説明を挿入
目に見える誤差の二乗和は A, B, C の関数です. この関数が 4 次元空間の凸超平面であり, 一意の最小値を持つことは簡単にわかります. これはグローバルな最小値でもあります. 次に、E から A、B、および C への一次偏導関数はすべて 0 です。つまり、
ここに画像の説明を挿入

ここに画像の説明を挿入
なります。x ˉ = 1 N ∑ i = 1 N xi , y ˉ = 1 N ∑ i = 1 N yi , z ˉ = 1 N ∑ i = 1 N zi , x 2 ˉ = 1 N ∑ i = 1 N xi 2 , y 2 ˉ = 1 N ∑ i = 1 N yi 2 , z 2 ˉ = 1 N ∑ i = 1 N zi 2 , xy ˉ = 1 N ∑ i = 1 N xiyi , xz ˉ = 1 N ∑ i = 1 N xizi , yz ˉ = 1 N ∑ i = 1 N yizi \bar{x}=\frac{1}{N}\sum_{i=1}^{N}x_{i},\bar{y}=\ frac{1}{N}\sum_{i=1}^{N}y_{i},\bar{z}=\frac{1}{N}\sum_{i=1}^{N}z_{ i},\bar{x^{2}}=\frac{1}{N}\sum_{i=1}^{N}x_{i}^{2},\bar{y^{2}} =\frac{1}{N}\sum_{i=1}^{N}y_{i}^{2},\bar{z^{2}}=\frac{1}{N}\sum_{ i=1}^{N}z_{i}^{2},\bar{xy}=\frac{1}{N}\sum_{i=1}^{N}x_{i}y_{i} ,\bar{xz}=\frac{1}{N}\sum_{i=1}^{N}x_{i}z_{i},\bar{yz}=\frac{1}{N}\ sum_{i=1}^{N}y_{i}z_{i}バツˉ=N1私は= 1Nバツyˉ=N1私は= 1Nyˉ=N1私は= 1Nバツ2ˉ=N1私は= 1Nバツ2y2ˉ=N1私は= 1Ny22ˉ=N1私は= 1N2xy _ˉ=N1私は= 1Nバツy× zˉ=N1私は= 1Nバツyzˉ=N1私は= 1Nyすると、(3) は次のように書ける。
ここに画像の説明を挿入
(4) は 3 次元の方程式系であり、この方程式系を解くことで A、B、C の値が得られることがわかる。

幾何学的方法
導出に幾何学的方法を使用する方法を紹介しましょう.
X = [ x 1 x 2 . . . x N ] , X ′ = [ − 1 − B y 1 − C z 1 − 1 − B y 2 とします。 − C z 2 . . − 1 − B y N − C z N ] X=\begin{bmatrix} x_{1}\\ x_{2}\\ ...\\ x_{N} \end{ bmatrix },{X}'=\begin{bmatrix}-1-By_{1}-Cz_{1}\\ -1-By_{2}-Cz_{2}\\ ...\\ -1-By_ { N}-Cz_{N} \end{bmatrix}バツ= バツ1バツ2...バツN X= 1によって_1Cz _11によって_2Cz _2...1によって_NCz _N

ここでの問題は、誤差ベクトル AX-{X}' が直交するときの幾何学的観点から、AX が {X}' に最も近く、それらの誤差ベクトルが AX-{X}' であるような適切なパラメーター A を見つけることです。 X 最適な係数があれば、式
ここに画像の説明を挿入
(5) を展開すると得られます。
ここに画像の説明を挿入
式 (6) は (3) の最初の項目であることがわかります。Y = [ y 1 y 2 . . y N ] , Y ′ = [ − 1 − A x 1 − C z 1 − 1 − A x 2 − C z 2 . . . − 1 − A x N − C とする

z N ] , Z = [ z 1 z 2 . . z N ] , Z ′ = [ − 1 − A x 1 − B y 1 − 1 − A x 2 − B y 2 . . − 1 − A x N − B y N ] 、同様に次のようになります。 ..\\ y_{N}\end{bmatrix},{Y}'=\begin{bmatrix}-1-Ax_{1}-Cz_{1}\\-1-Ax_{2}-Cz_ {2} \\ ...\\ -1-Ax_{N}-Cz_{N} \end{bmatrix}, Z=\begin{bmatrix} z​​_{1}\\ z_{2}\\ ... \\ z_ {N} \end{bmatrix},{Z}'=\begin{bmatrix}-1-Ax_{1}-By_{1}\\ -1-Ax_{2}-By_{2}\\ ... \\ -1-Ax_{N}-By_{N} \end{bmatrix}、同様に Y^{T}(BY-{Y}')=0, Z^{T}( CZ-{Z }')=0= y1y2...yN = 1A ×1Cz _11A ×2Cz _2...1A ×NCz _N Z= 12...N Z= 1A ×1によって_11A ×2によって_2...1A ×Nによって_N 、同様に: YT (BYY) _=0 ZT (CZZ) _=0、展開後、式 (3) の 2 番目と 3 番目の項目であることがわかります。

誤差関数の最小値を求める方法による最終的な最適最小二乗解の式は、幾何学的方法と同じであることがわかります。この方法を使用すると、空間内の 3 次元点群によって形成されたオブジェクトのローカル法線ベクトルを簡単に取得して、関連する計算を実行できます。たとえば、この点での音波の分布を計算したり、散乱を計算したりできます。この時点での光波。

おすすめ

転載: blog.csdn.net/qq_27353621/article/details/128674871