在halcon处理三维数据的时候,我们就有一个非常棘手的需求,就是想要像Maya 3Dmax一样,非常直观的可视化自己的数据,而在halcon之中也提供了功能非常全面的可视化工具;
halcon提供的可视化功能可以
在三维坐标中很方便的观察点云对象
可以显示多个点云对象 在同一个窗体内
可以根据XYZ任意维度来对点云的点进行渲染着色
1.首先我们读取一个三维对象
这里我们是读取了一只斯坦福兔子,这个兔子对于学习点云处理的人来说可就太熟悉啦
在读取完毕之后观察变量窗口
发现多了一个三维对象变量
双击这个ObjectModel3D的句柄,出现如下图所示的界面
在这个窗体的左上角勾选Display Models,即可弹出一个可视化窗体
如图所示
在刚才的那个窗体里面还可以看到点云的一些属性
比如上图就显示了组成这个点云的点 是否有三角化/是否有法向量等等这些属性
至此我们读取一个三维对象就完成了
2.初步可视化三维对象
读取三维对象之后(在halcon内叫做HObjectModel3D),我们调用可视化本地函数-visualize_object_model_3d来可视化点云
dev_get_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)
直接执行,如下图所示
我们在给进去的窗口句柄的窗口上看到了可视化窗口,右下角有一个“继续”的按钮
此时可以通过鼠标左键来变化观察的视角,来观察一个三维对象
在这个本地函数的帮助文档里面,有着这样一句话
大概意思是旋转就是鼠标左键
缩放就是Shift键加上鼠标左键(或者是鼠标中间滚轮)
平移就是Ctrl键加上鼠标左键
3.按Z方向高度渲染颜色可视化
实现如下图所示结果
实现上图可视化功能很简单
只需要给可视化本地函数设置几个可视化参数就可以
代码如下
dev_get_window (WindowHandle)
GenParamName := ['lut','color_attrib','light_position','disp_pose','alpha']
GenParamValue := ['color1','coord_y','0.0 0.0 -0.3 1.0','true',0.9]
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [],GenParamName, GenParamValue, [], [], [], PoseOut)
可视化的这个本地函数参数很多
具体参考halcon的帮助文档
这里有一些可选参数
还有一些参数在disp_object_model_3d这个算子的帮助文档中
具体的参数名 和参数含义我就不挨着挨着去解释了,有了这个帮助文档,然后拿手机翻译一下单词,很容易就能理解的
这个可视化参考例程moments_object_model_3d
4.用颜色渲染深度图
很多时候我们在做一些简单的深度图处理的时候,我们不会去生成HobjectModel3d(生成的过程开销更大),那么很多时候我们就会需要直接对深度图进行可视化了;
之前做项目的时候,对着16位的深度图去看高低确实非常不直观,对于现场调试的兄弟们也非常不友好,很多时候我们没有办法直接通过看图来确定程序判定是否准确。
这样的话我们就可以在显示在界面上的时候稍微做一点点处理
比如下面我们读取一个深度图
处理之后就可视化成了
这样可以清晰的观察表面的纹路缺陷
halcon代码如下
MaxVal := 1
MinVal := -1
scaleVal := 255.0/(MaxVal-MinVal)
scale_image (Zmap, ImageScaled, scaleVal, scaleVal*-MinVal)
convert_image_type (ImageScaled, ImageConverted, 'byte')
gen_image_proto (ImageConverted, S, 200)
gen_image_proto (ImageConverted, V, 200)
trans_to_rgb (ImageConverted, S, V, ImageRed, ImageGreen, ImageBlue, 'hsv')
compose3 (ImageRed, ImageGreen, ImageBlue, MultiChannelImage)