Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合

  • 对于三维测量的套路,都是将图像转成二维进行测量和处理
    Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第1张图片
  • 我仍然以这个开关检测项目为例,开关点云有x,y,z,三个空间坐标
  • 如果对这个三维点云直接处理,有一个思路我提供给大家,将点云模型完全调平,然后针对x,y,z其中一个坐标进行测量,其实这种思路也是将三维图转为平面。

一.点云图转深度图+点云滤波

  • 本篇着重讲解如何将点云模型转为深度图的思路。
    1.将点云模型拆分成x,y,z三个数组,这里的数据可以自动清空,具体请补充一下数据存储,堆和栈的内容。Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第2张图片
    2.这里提出一个手法,将点云数据拆分成三个数组之后,有很多点事有小数位的,这里为了提高精度,会把数组中的坐标乘以10或100,视情况而定,如此图像的细节会更加清晰,可以理解为拉伸图像。
        x:=point_coord_x1*10
        y:=point_coord_y1*10

3.之后观察调平的点云,以x,y为Row和Column,z为灰度值,建立深度图。此时可以将图像当成二维图像处理。
Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第3张图片
4.细心地朋友可能会发现,这个生成的深度图是有孔洞的。这与物料的反光或者遮挡有关,如下是缺失点云数据的点云模型。
Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第4张图片
如下是缺失点的深度图
Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第5张图片
5.刚说到,可以对深度图运用二维的处理,这里分别运用中值滤波,高斯滤波,均值滤波对图像进行处理,填充孔洞。
Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第6张图片

二.断线拟合

  • 这里讲的是二维的处理手法

  • 有时候直接调用提取边缘的算子呢,提取出的边缘线存在断线,或交叉线,对于边缘拟合造成了很大的麻烦,这里点出断线拟合的思路。
    在这里插入图片描述
    1.将线段打散成点
    2.对点基于行或列排序

  • 注意这里排序很重要,不排序拟合直线时会出现交叉点
    在这里插入图片描述

  • 排序后效果图
    Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合_第7张图片

3.拟合线

       edges_sub_pix (ImageReduced1, Edges1, 'canny', 1,5, 25)
        count_obj (Edges1, Number1)
          for Idle:=1 to  Number1  by 1
           select_obj (Edges1, EdgeContour, Idle)
           *把线变为点
           
           get_contour_xld(EdgeContour, RowS,ColumnS)
            Row1:=[Row1,RowS]
            Column1:=[Column1,ColumnS]
        endfor
        tuple_sort_index (Row1, Indices)
        tuple_length(Row1,Length)
        NewRow:=[]
        NewColumn:=[]
        if(Length>=1)
          *方法1
          NewRow:=subset(Row1,Indices)
          NewColumn:=subset(Column1,Indices)

你可能感兴趣的:(Halcon,机器视觉,三维重建,点云)