文章目录

  • CloudCompare基本介绍
  • CloudCompare基本技巧
  • 点云数据读入
  • 点云对象的颜色设置
  • 点云对象的拖动,旋转
  • CloudCompare点云配准流程
  • 粗配准
  • 精配准



CloudCompare基本技巧

点云数据读入

由于本人主要从事图像处理方面的工作,平时一般使用tif格式的数据。但CloudCompare软件对于tif格式的不能直接读入,因此暂且使用txt格式文件对数据进行转换写入。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_人工智能


转换的代码也很简单,这里贴上本人的python代码:

import os
import numpy as np
import SimpleITK as sitk
from skimage import io

if __name__ =="__main__":
	# file name
    name = "tif_file"
    # resolution setting
    resolution = [1, 1, 4]

    path = name + ".tif"
    # read file
    label_volum = io.imread(path)
    # find meshes
    label_pts = np.argwhere(label_volum == 1)
    with open(name + ".txt","w") as f:
        for pt_index in range(label_pts.shape[0]):
            # x, y, z
            f.write("%d %d %d\r\n"%(label_pts[pt_index, 2] * resolution[-3], 
            label_pts[pt_index, 1] * resolution[-2], 
            label_pts[pt_index, 0] * resolution[-1]))
    print("OK")

转换后会有同名的txt文件出现,将其拖入CloudCompare中,即可完成读入工作。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_点云_02

点云对象的颜色设置

上一步骤我们将两个点云文件拖入软件中,两个点云文件是microCT图像的血管分割图,一个是全局分割,一个是局部分割。由于软件默认点云对象是白色,且两者坐标一致,因此难以区分。这里可以采用不同的颜色设置,进行区分

颜色设置首先选择其中一个对象

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_图像处理_03


选择Edit->Color->set unique对单一对象设置颜色。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_迭代_04


对两个对象分别设置红色与绿色

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_图像处理_05

点云对象的拖动,旋转

左键:整体点云对象的旋转

右键:整体点云对象的平移

滚轮:整体点云对象的缩放

单一对象的操作需要先选中对象

选择Edit->Translate/Rotate

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_图像处理_06


出现右上角小窗口后即可对单一目标使用左右键进行平移旋转操作

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_python_07


变换完成后,点击右上角的小勾即可。

CloudCompare点云配准流程

粗配准

Registration > Align (point pairs picking)

用户手册p102

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_点云_08


这里根据手册上进行简要说明一下

选中两个对象,选择Align

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_python_09


选择被匹配对象

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_python_10


在两个点云对象之间选择对应的三个及以上的点,可以放大视图进行选择,点最好分散一点。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_点云_11


选择完成后点击图片中的“Align”按钮,即可进行手动粗配。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_迭代_12


点击小勾即可输出变换矩阵。可以看出,效果尚可。

高级参数adjust scale可以确定两个点集之间的最佳比例因子。要允许优化比例参数,只需取消选中固定比例复选框。如果两个云具有不同的比例,而你不知道它们之间的比例因子,则这非常有用。警告:如果比例系数不同,完成此工具后得到的是4x4的仿射矩阵。这样的话使用该矩阵的逆就无法将点云恢复到未配准之前的状态。

参考链接:

精配准

点击ICP

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_python_13


注意局部与整体配准时,一定要选好to-be-aligned与reference对象,两者互换可以点击swap按钮。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_人工智能_14


Number of iterations/RMS difference:ICP是一个迭代过程。在此过程中,配准误差(缓慢)减少。我们可以告诉CC在最大迭代次数后停止此过程,或者在两次迭代之间的误差(RMS)差低于给定阈值时停止此过程。该阈值越小,收敛所需的时间越长,但结果应该越精细(注意:由于CC使用32位浮点值,1e-8阈值已经接近计算精度极限,因此不必再降低)。

Final overlap:设置待配准点云之间的重叠度。

Adjust scale:如果待配准的两个点云尺寸不一致,可以选上该选项。

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_图像处理_15


Random sampling limit:为了大幅度提高计算速度,CC使用了一种优化方案。它包括在每次迭代时对数据云进行随机子采样。此参数是子采样点的最大数量。默认值(50000)通常是一个很好的猜测,其对结果的影响是不可感知的。然而,对于数据量非常大的点云来说,它可能是不够的。因此,如果您对结果有疑问,或者如果您想进一步精细化配准,并且不害怕等待很长时间,请毫不犹豫地增加此值(要完全停用此优化方案,只需输入一个大于点云点数的数字即可)。

Rotation:增加指定轴(X、Y或Z)旋转约束。

Translation:增加平移方向的约束。

Enable farthest point removal:剔除距离较远的点,对于噪声点有一定的抑制性。

Use displayed model/data scalar field as weights:此选项应允许用户使用标量值作为权重(主要用于点云与模型的配准,不建议用于两个点云的配准。)点击OK,得到最终精配结果

python icp 点云配准 pcl 点云配准 cloudcompare点云配准_点云_16