三维数据分析、线激光切片数据分析——VTK显示

1.项目介绍

利用三维点云对线激光采集的数据进行分析,并对其中凹陷部分进行测量。如下为单线分析。主要目标是测量凹槽到下端平面的距离。
在这里插入图片描述

2.运用到的知识点

2.1.最小二乘三维平面拟合

数据点云是通过双目相机对打在目标上的线激光匹配得到的结果,也就是说激光的切面不在XOZ或XOY平面内,为了方便数据分析,将三维点云投影到线激光平面。
通过最小二乘拟合,可以通过采样数据点得到平面方程: z = A x + B y + C 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.直线方程

已知直线上两点求直线的一般式方程(一般式支持所有情况,计算机图形处理最常用)。
两点: P 1 ( x 1 , y 1 ) , P 2 ( x 2 , y 2 ) P_1(x_1,y_1) ,P_2(x_2,y_2) P1(x1,y1),P2(x2,y2),则直线方程式为: A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0
其中: A = y 2 − y 1 A=y_2-y_1 A=y2y1 B = x 1 − x 2 B=x_1-x_2 B=x1x2 C = x 2 ∗ y 1 − x 1 ∗ y 2 C=x_2*y_1-x_1*y_2 C=x2y1x1y2
P ( x 0 , y 0 ) P(x_0,y_0) P(x0,y0)到直线的距离为: d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} d=A2+B2 Ax0+By0+C
垂足 P ( x i , y i ) P(x_i,y_i) P(xi,yi)为: x i = B 2 x 0 − A B y 0 − A C A 2 + B 2 x_i=\frac{B^2x_0-ABy_0-AC}{A^2+B^2} xi=A2+B2B2x0ABy0AC
y i = A 2 y 0 − A B x 0 − B C A 2 + B 2 y_i=\frac{A^2y_0-ABx_0-BC}{A^2+B^2} yi=A2+B2A2y0ABx0BC

最终结果

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值