一、常用算子
gen_image_surface_first_order( : ImageSurface : Type, Alpha, Beta, Gamma, Row, Column, Width, Height : )
作用:用于创建XY方法图像
ImageSurface :输出图像
Type:输出像素类型
Alpha:垂直方向的一阶系数。(线激光发射一条光线,线上每两个点的距离)
Beta:水平方向的一阶系数。(线激光两次触发的距离间隔)
Gamma:零阶系数。(Z轴分辨率)
Row:曲面参考点的行坐标。
Column:曲面参考点的纵坐标。
Width:图片的宽度
Height:图片的高度
xyz_to_object_model_3d(X, Y, Z : : : ObjectModel3D)
作用:将图像中的3D点转换为3D对象模型z。
X:用三维点的x坐标和三维点ROI区域。
Y:用三维点的y坐标和三维点ROI区y域。
Z:用三维点的z坐标和三维点ROI区域。
ObjectModel3D:3D对象模型句柄
write_object_model_3d( : : ObjectModel3D, FileType, FileName, GenParamName, GenParamValue : )
作用:保存一个3D模型
ObjectModel3D:3D对象模型句柄。
FileType:保存的类型。支持’dxf’, ‘obj’, ‘off’, ‘om3’, ‘ply’, ‘ply_binary’, ‘stl’, ‘stl_ascii’, ‘stl_binary’
FileName:保存文件的名称。
GenParamName:输入通用参数的名称。
GenParamValue :输入通用参数的值。
visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut)
作用:可视化3D对象模型
WindowHandle:窗口句柄
ObjectModel3D:3D对象模型句柄
CamParam:相机内参
PoseIn:3D姿态
GenParamName:参数名
GenParamValue:参数值
Label:在每个3d模型位置显示的文本
Information:窗口左下角显示的信息
PoseOut:输出点云的当前位姿
注意
GenParamName参数名中有很多设置,比较常见的是当GenParamName:=[‘color’,‘lut’]时,GenParamValue:=[‘color1’,‘coord_z’]时,意思时在color为第一种颜色,在Z轴设置渐变。
案例:
** 深度图转换为点云图
* 从文件 './pcb.tif' 中读取深度图像并存储在变量 ImageZ 中。
read_image (ImageZ, './pcb.tif')
**
* 设置 x、y、z 三个方向上的分辨率,并将它们存储在 ScaleFactor 数组中。
xResolution:=0.06
yResolution:=0.06
zResolution:=0.001
ScaleFactor:=[xResolution,yResolution,zResolution]
* 获取窗口句柄 WindowHandle。
dev_get_window (WindowHandle)
* 获取图像 ImageZ 的大小 Width 和 Height。
get_image_size (ImageZ, Width, Height)
* 更新 x、y、z 分辨率为 ScaleFactor 中的值。
xResolution:=ScaleFactor[0]
yResolution:=ScaleFactor[1]
zResolution:=ScaleFactor[2]
** * 生成两个新的图像 ImageX 和 ImageY,用于存储实数值,大小为 Width x Height。
gen_image_surface_first_order (ImageY, 'real', 0, 1, 0, 0, 0, Width, Height)
gen_image_surface_first_order (ImageX, 'real', 1, 0, 0, 0, 0, Width, Height)
** 对深度图进行处理滤波处理
* 对 ImageZ 进行灰度最小最大化处理,获取最小值 Min 和最大值 Max,以及范围 Range。
min_max_gray (ImageZ, ImageZ, 0, Min, Max, Range)
* 如果最小值 Min 小于 0,对 ImageZ 进行缩放处理使其最小值为 0。
if(Min<0.0)
scale_image (ImageZ, ImageZ, 1.0, -Min)
endif
* 再次对处理后的 ImageZ 进行灰度最小最大化处理,获取更新的最小值 Min、最大值 Max 和范围 Range。
min_max_gray (ImageZ, ImageZ, 0, Min, Max, Range)
* 阈值分割
threshold (ImageZ, Region, 1,Max )
* 缩小 ImageZ 的感兴趣区域至 Region,存储在 ImageReduced 中。
reduce_domain (ImageZ, Region, ImageReduced)
* 将 ImageReduced 转换为实型图像 Z。
convert_image_type (ImageReduced, Z, 'real')
* 对 Z 进行灰度最小最大化处理,获取最小值 Min、最大值 Max 和范围 Range。
min_max_gray (Z, Z, 0, Min, Max, Range)
* 计算缩放因子 factor = xResolution / zResolution,然后计算 Z 方向上的缩放比例 ScaleZ = 1 / factor。
factor:=xResolution/zResolution
ScaleZ:=1/factor
*输出
* 将 Z 按照缩放比例 ScaleZ 进行缩放,并存储在 ImageScaled 中。
zScale:=ScaleZ
scale_image (Z, ImageScaled, ScaleZ, -ScaleZ*Min)
** 把X,Y,Z图像拟合为3D点云模型
* 使用 xyz_to_object_model_3d 函数将 ImageX、ImageY 和 ImageScaled 转换为 3D 对象模型 ObjectModel3D。
xyz_to_object_model_3d (ImageX, ImageY, ImageScaled, ObjectModel3D)
write_object_model_3d (ObjectModel3D, 'om3', 'test', [], [])
Instructions[0] := ''
** 交互式显示点云数据
* 最后,通过 visualize_object_model_3d 函数将生成的 3D 对象模型在窗口中进行可视化展示。
visualize_object_model_3d (WindowHandle, [ObjectModel3D], [], [], ['lut','intensity'], ['color1','coord_z'], '', '', Instructions, PoseOut)
运行结果
注意
姿势可以通过在按下鼠标按钮的同时移动鼠标来修改。默认的设置是:
旋转:鼠标左键
缩放:Shift+鼠标左键(或鼠标中心键)
Ctrl+鼠标左键