0%

3D轮眉相机软件解读

3D轮眉测试说明, 后续整理

轮眉

WBH3DAlgorithm_WBH

  1. 从点云中读取原始数据通过标定架矩阵转换为实际坐标系
  2. GetMiddleX()获取X中心坐标 CenterX = 标定点坐标X + X向偏移 = Calibration.MasterGaugeExParam.Point.X + OffsetMiddle
  3. 筛选点云中X坐标在CenterX ± AutoROISize * 2范围内的所有点(绿色区域)
  4. GetCentroid通过点云中心筛选有效点
  5. 根据点中最小Y + AutoROISize排除一部分下面的点
  6. FindALlTopPositions筛选聚类后X宽度大的点集合, 排除X向点数少的簇,找到满足条件的各簇的最高点topPositions
  7. 筛选出大于最小topPosition - 150的点(取出下方无效点)作为绿色区域
  8. FindJumpPoints-从上往下寻找Z向距离差较大点的前一个点及其周边点的集合
  9. Dictionary<int, List> LineMaps, 从上述点云中以X为key存储相同X±2坐标点的集合
  10. LineMaps所有value找到连续点Z向差值大于dropDepth的点, 即断点处, 添加断点附近点的集合(红色区域)
  11. 拟合曲线找到曲线最高点(若配置强制轮眉中心则从曲线中取出X为CenterX处的Y值作为最高点)
  12. 取点云中最外侧的Z作为最高点的Z
  13. 判断最高点X是否在ROI内合理范围

轮毂

WBH3DAlgorithm_Wheel_Hub_Curve

Calculate

FindTop

WhitePointsGetHandle分离提取轮眉下方点集合
FindTop所有距离最高点Y向小于4mm点的集合
FindTopPosition根据最高点的集合拟合曲线求出轮胎最高点TopPosition并估算轮胎半径TireRadiusFit
根据轮胎半径和最高点估算轮心Center,取轮胎半径+20mm范围内的所有点

FindPoint

FindHubPosition

FindXOrYFit
findDatas为计算的轮心XY±20mm的矩形边上的点
找到轮胎最高点后Y-轮胎半径+轮毂半径后的点估算轮毂最高点坐标HubPosition
在计算的轮胎中心点基础上XY坐标左右上下范围放大±20mm
_FindHubPosition筛选所有点中Z向深度差值最大的小范围集合及最大Z向差值

GreenPointsToMid轮胎半径+20mm内所有点到轮心附近的距离满足轮毂半径±40mm切角度在±AutoROISize / 10内的环形内的所有点
将上述点全部集中在center相同XY下, Z向深度不同, 所有点沿圆心压缩到同一Y轴上
FindMidFeaturePoint以oneRange为范围筛选所有点中Z向深度差值最大的范围

取出所有点中Z向差值最大的部分
GetHubPosition向深度差值最大的点集合中区Z为平均值处的点作为轮毂最高点HubPosition
通过TopPosition和轮胎半径计算出轮胎中心点以轮胎半径画圆
通过HubPosition和轮毂半径计算出轮毂中心点以轮毂半径画圆

1
2
3
4
5
6
7
//FindLine
//Dictionary<int, List<Vector3>> LineMaps:ROI内从左上角相同X坐标组成List<Vector3> v3,结果为<X, v3>即ROI竖线上点的集合
//PlanePoints:ROI内标定架平面点集合
//Dictionary<int, List<Vector3>> CurvePointsMap:ROI内标定架孔中心点, int=0为最上面孔中心的点集合v3
//CurvePointsMap[0]为最上面孔中心点集合,CurvePointsMap[1]为第二个孔中心点集合
var mat = CalculateMatrix(PlanePoints, CurvePointsMap[0], CurvePointsMap[1],
CurvePointsMap.Count > 2 ? CurvePointsMap[2] : null, CurvePointsMap.Count > 3 ? CurvePointsMap[3] : null, true);