本文已参与「新人创作礼」活动,一起开启掘金创作之路.
本文从实际的案例触发介绍3D定位抓取的介绍
1.目前市面上的3D相机大体上分为一体式和分体式;
一体式的3D相机是吧相机和镜头组装在了一起,相机的事业和检测精度已经固定,想要换视野就要换相机。代表的有国产的没卡曼德。
分体式的3D相机则是可以随意的各部分华北镜头来适配合适的视野,使用更加便捷,代表的有Sick的ranger3相机。
本次介绍以Sick的分体式相机为例
上面的是普通的3D相机的安装方式,下面的是分体的安装方式。
这张图可能更加的直观
指导了相机的构成之后,我们需要取图; 如下是3D相机取出的图像:
我们通过halcon进行模板的创建
```C# devclosewindow() ScanningRulerReadBuffer (ImageCirX, ImageCirY, ImageCirZ, Intensity,768,512,'6/Image5/2T13C.dat') * genrectangle1 (Rectangle, 140, 200, 290, 430) * genrectangle1 (Rectangle1, 220, 140, 510, 360) * createshapemodel (ImageCirZ, 'auto', -0.39, 0.79, 'auto', 'auto', 'usepolarity', 'auto', 'auto', ModelID) ScanningRuler_ReadBuffer (ImageCirX, ImageCirY, ImageCirZ, Intensity,768,512,'C:/Users/92576/Desktop/2.dat') get_image_size (ImageCirZ, Width, Height) dev_open_window (0, 0, Width, Height1, 'black', WindowHandle) devdisplay (ImageCirZ) * medianimage (ImageCirX, ImageMedian, 'circle', 1, 'mirrored') * gen_rectangle1 (Region, 106, 311, 315, 521)
drawregion (Region, WindowHandle) reducedomain(ImageCirZ, Region, ImageCirZ) threshold (ImageCirZ, Region1, 344, 364) connection (Region1, Connected1) reducedomain (ImageCirY, Connected1, ImageCirY) reducedomain (ImageCirX, Connected1, ImageCirX) reducedomain (ImageCirZ, Connected1, ImageCirZ) *将3D点从图像转换为3D对象模型 xyztoobjectmodel_3d (ImageCirX, ImageCirY, ImageCirZ, ObjectModel3D1)
*示例一个3D对象模型 sampleobjectmodel_3d (ObjectModel3D1, 'accurate', 0.001, [], [], ObjectModel3DAffineTrans1Sample)
*计算三维物体模型的三维曲面法线 surfacenormalsobjectmodel3d(ObjectModel3DAffineTrans1Sample,'mls', [], [], ObjectModel3DAffineTrans1N)
Instructions[0] := 'Rotate: Left button' Instructions[1] := 'Zoom: Shift + left button' Instructions[2] := 'Move: Ctrl + left button' Message := 'Surface model Right'
*交互式显示三维对象模型 visualizeobjectmodel_3d (WindowHandle, ObjectModel3D1, [], [], [], [], Message, [], Instructions, PoseOut)
*创建执行基于表面的匹配所需的数据结构 createsurfacemodel (ObjectModel3DAffineTrans1N, 0.02, [], [], SFM)
*将表面模型写入文件 writesurfacemodel (SFM, 'C:/Users/92576/Desktop/14.sfm')
*将3D对象模型写入文件 writeobjectmodel_3d (ObjectModel3D1, 'om3', 'Desktop/14.om3', [], []) ```
这个因为C#的源代码太多了,我这里就发了halcon的.
太多了. 代码片段
我放片段了,大家可以参考下.