三維數據分析、線激光切片數據分析——VTK顯示

1.項目介紹

利用三維點雲對線激光采集的數據進行分析,並對其中凹陷部分進行測量。如下爲單線分析。主要目標是測量凹槽到下端平面的距離。
在這裏插入圖片描述

2.運用到的知識點

2.1.最小二乘三維平面擬合

數據點雲是通過雙目相機對打在目標上的線激光匹配得到的結果,也就是說激光的切面不在XOZ或XOY平面內,爲了方便數據分析,將三維點雲投影到線激光平面。
通過最小二乘擬合,可以通過採樣數據點得到平面方程:z=Ax+By+C z = Ax + By + C
公式推導參考:最小二乘解

//m爲採樣數據數,大於等於3
Matrix<double> A = new DenseMatrix(m, 3);
Matrix<double> b = new DenseMatrix(m, 1);
int row = 0;
for (int i = 0; i < points.Count; i++)
{
	List<float3> line = points[i];
	//將每個點錄入矩陣
	for (int j = 0; j < line.Count; j++)
	{
		float3 value = line[j];
		A[row, 0] = value.x;
		A[row, 1] = value.y;
		A[row, 2] = 1;
		b[row, 0] = value.z;
		row++;
	}
}
Matrix<double> AT = A.Transpose();
m_planeMatrix = (AT * A).Inverse() * AT * b;

2.2.直線方程

已知直線上兩點求直線的一般式方程(一般式支持所有情況,計算機圖形處理最常用)。
兩點:P1(x1,y1),P2(x2,y2)P_1(x_1,y_1) ,P_2(x_2,y_2),則直線方程式爲:Ax+By+C=0Ax+By+C=0
其中:A=y2y1A=y_2-y_1B=x1x2B=x_1-x_2C=x2y1x1y2C=x_2*y_1-x_1*y_2
P(x0,y0)P(x_0,y_0)到直線的距離爲:d=Ax0+By0+CA2+B2d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}}
垂足P(xi,yi)P(x_i,y_i)爲:xi=B2x0ABy0ACA2+B2x_i=\frac{B^2x_0-ABy_0-AC}{A^2+B^2}
yi=A2y0ABx0BCA2+B2y_i=\frac{A^2y_0-ABx_0-BC}{A^2+B^2}

最終結果

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章