文章目录
- CloudCompare基本介绍
- CloudCompare基本技巧
- 点云数据读入
- 点云对象的颜色设置
- 点云对象的拖动,旋转
- CloudCompare点云配准流程
- 粗配准
- 精配准
CloudCompare基本技巧
点云数据读入
由于本人主要从事图像处理方面的工作,平时一般使用tif格式的数据。但CloudCompare软件对于tif格式的不能直接读入,因此暂且使用txt格式文件对数据进行转换写入。
转换的代码也很简单,这里贴上本人的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中,即可完成读入工作。
点云对象的颜色设置
上一步骤我们将两个点云文件拖入软件中,两个点云文件是microCT图像的血管分割图,一个是全局分割,一个是局部分割。由于软件默认点云对象是白色,且两者坐标一致,因此难以区分。这里可以采用不同的颜色设置,进行区分
颜色设置首先选择其中一个对象
选择Edit->Color->set unique对单一对象设置颜色。
对两个对象分别设置红色与绿色
点云对象的拖动,旋转
左键:整体点云对象的旋转
右键:整体点云对象的平移
滚轮:整体点云对象的缩放
单一对象的操作需要先选中对象
选择Edit->Translate/Rotate
出现右上角小窗口后即可对单一目标使用左右键进行平移旋转操作
变换完成后,点击右上角的小勾即可。
CloudCompare点云配准流程
粗配准
Registration > Align (point pairs picking)
用户手册p102
这里根据手册上进行简要说明一下
选中两个对象,选择Align
选择被匹配对象
在两个点云对象之间选择对应的三个及以上的点,可以放大视图进行选择,点最好分散一点。
选择完成后点击图片中的“Align”按钮,即可进行手动粗配。
点击小勾即可输出变换矩阵。可以看出,效果尚可。
高级参数adjust scale可以确定两个点集之间的最佳比例因子。要允许优化比例参数,只需取消选中固定比例复选框。如果两个云具有不同的比例,而你不知道它们之间的比例因子,则这非常有用。警告:如果比例系数不同,完成此工具后得到的是4x4的仿射矩阵。这样的话使用该矩阵的逆就无法将点云恢复到未配准之前的状态。
参考链接:
精配准
点击ICP
注意局部与整体配准时,一定要选好to-be-aligned与reference对象,两者互换可以点击swap按钮。
Number of iterations/RMS difference:
ICP是一个迭代过程。在此过程中,配准误差(缓慢)减少。我们可以告诉CC在最大迭代次数后停止此过程,或者在两次迭代之间的误差(RMS)差低于给定阈值时停止此过程。该阈值越小,收敛所需的时间越长,但结果应该越精细(注意:由于CC使用32位浮点值,1e-8阈值已经接近计算精度极限,因此不必再降低)。
Final overlap:
设置待配准点云之间的重叠度。
Adjust scale:
如果待配准的两个点云尺寸不一致,可以选上该选项。
Random sampling limit:
为了大幅度提高计算速度,CC使用了一种优化方案。它包括在每次迭代时对数据云进行随机子采样。此参数是子采样点的最大数量。默认值(50000)通常是一个很好的猜测,其对结果的影响是不可感知的。然而,对于数据量非常大的点云来说,它可能是不够的。因此,如果您对结果有疑问,或者如果您想进一步精细化配准,并且不害怕等待很长时间,请毫不犹豫地增加此值(要完全停用此优化方案,只需输入一个大于点云点数的数字即可)。
Rotation:
增加指定轴(X、Y或Z)旋转约束。
Translation:
增加平移方向的约束。
Enable farthest point removal:
剔除距离较远的点,对于噪声点有一定的抑制性。
Use displayed model/data scalar field as weights:
此选项应允许用户使用标量值作为权重(主要用于点云与模型的配准,不建议用于两个点云的配准。)点击OK,得到最终精配结果