菜鸟请教halcon问题:halcon量测物体尺寸大小之前要标定吗物体离CCD近拍

菜鸟请教halcon问题:halcon量测物体尺寸大小之前要标定吗物体离CCD近拍,第1张

严格来说是需要标定的,标定的目的主要有:1,消除镜头畸变

2,确定像素和世界坐标的关系,通俗的说就是一个像素等于多少毫米及相对位置关系(一般有6个外参数:X,Y,Z 方向的平移量及夹角)

你说的离CCD近拍出来的图像比较大,离CCD远拍的图像比较小是因为是变焦镜头或者通过改变像距来改变物距

在精度不是很苛刻,镜头畸变很小的及相机和被测物体垂直的情况下可以用标准品方式代替标定:比如直径是10mm的圆,在halcon中拟合出来的像素直径是1000像素,那么一个像素就等于10/1000=001mm(这个要求聚焦准确)

简介:opencv开源的计算机视觉库,halcon是商业的视觉库,opencv的一些算子在一般的生产环境下是够用的,但是在对算法速度、精度都要求更高的环境下就有些吃力了。最近在研究halcon,抽几个算子粗略测试一下,效果和速度确实很好,以后可能会在对算法速度要求比较高的地方部署,这里先记录一下opencv和halcon图像数据互转的方法。

参考:

严格说需要标定标定目主要:1消除镜畸变

2确定像素世界坐标关系通俗说像素等于少毫米及相位置关系(般6外参数:XY,Z 向平移量及夹角)

说离CCD近拍图像比较离CCD远拍图像比较变焦镜或者通改变像距改变物距

精度苛刻镜畸变及相机测物体垂直情况用标准品式代替标定:比直径10mm圆halcon拟合像素直径1000像素像素等于10/1000=001mm(要求聚焦准确)

在上一步,完成了网络的创建和数据的预处理。接下来准备对这个网络进行训练,通过训练得到一个可以用于目标检测的深度学习网络模型。这里首先要确定上一步输出的模型和数据集的存放路径是可用的,否则训练环节会因为缺少输入而报错。

Halcon的参考样例detect_pills_deep_learning_2_trainhdev详述了这一过程,这里做一些学习记录。

设置输入路径,主要是两个,一是上一步的预训练的以hdl结尾的模型,另一个是数据集和样本数据字典的存放路径。

输出路径也是两个,一是存放最佳评估模型的路径,一个是最终训练完成的模型路径。

首先用check_files_availability验证预处理模型和数据集路径是否正确。没有问题的话可以开始读取。

使用read_dl_model读取前一步初始化后的网络模型,得到模型的句柄DLModelHandle。

接着用read_dict读取预处理后的数据集,得到数据字典句柄DLDataset。

设置模型参数主要通过set_dl_model_param算子,以修改属性值的方式改变关键参数的值。该算子原型如下:

set_dl_model_param( : : DLModelHandle, GenParamName, GenParamValue : )

输入三个参数:

注意,如果将'runtime'的值改为了’gpu’,则要确定cuDNN和cuBLAS已经成功安装了。

通过set_dl_model_param算子,可以将本文开头提到的设置的模型的基本参数传递给模型句柄DLModelHandle。如将'batch_size'设为之前的batch_size的值等等。

1)创建训练参数。

这里使用create_dl_train_param算子创建一个训练参数的字典,用于存放训练参数和训练效果可视化的参数。这些参数可以做个说明:

2)训练网络

接下来是最耗时的部分,即使用train_dl_model算子进行深度学习网络模型的训练。算子如下:

train_dl_model( : : DLDataset, DLModelHandle, TrainParam, StartEpoch : TrainResults, TrainInfos,EvaluationInfos)

前四个参数是输入参数,后三个是输出参数。

接着到了第三步,即验证模型的部分。

可以用Halcon建立深度学习模型,并用到实际项目中。

流程大概是使用免费的 Halcon Deeplearing Label Tool制作模型后,导出成 hdl 文件,并在应用程序中用 ApplyDlClassifier 应用模型。

经过测试, ApplyDlClassifer 在第一次运行时,无论数据集有多大,执行时间在500ms左右(AMD 5800X + Nvidia P2200),能够明显感受到卡顿,而在第二次运行时,就感受不到卡顿。所以我考虑,在应用程序启动时,使用线程对模型进行预热。

预热听着高深,其实就是读取模型( ReadDlClassifier ) 并送入一张空白图。

下面演示我的做法:

21 封装一个自己的Application类

22 我将Halcon算子封装成一个单例类,并使用 getAlgorithmGlobalData 获得这个单例对象。 slotDoModelWarmUp 是这个单例类一个槽函数。

23 在 slotDoModelWarmUp 中开多线程,对模型进行预热。

我将Halcon深度学习算子要用到的变量封装成一个 context 结构体,放在单例类中。为了节约开销,我使用引用,直接获取这个单例对象。这样,在向线程中传参数时,需要一个 std::ref 。

线程函数如下:

classifierHandle 是一个引用变量,这使得我可以直接 *** 控单例类中的数据成员,而不是使用拷贝。

经过测试,在AMD 5800X + Nvidia P2200下,推理速度达到了1166ms。

前面总结了利用HALCON进行模板匹配的一些方法,讨论了利用物体形状的轮廓进行匹配的步骤和如何来优化匹配的速度,提高匹配的精度和速度,当然这两者之间本身也存在着制约,而在这两者之间找到一个适合自己要求的结合点,正是我们要研究和实验的。模板匹配并不是单纯的一个任务,它是一些其他工作的一个必备环节,比如物体识别、对象跟踪、检验产品、零件统计等等一些机器视觉应用。在很多情况下,模板匹配是个不错的选择。在前面总结模板匹配方法的基础上,利用HALCON做了一些视频对象跟踪的实验,并多次试验来调整程序参数优化跟踪过程,采用标准视频进行测试,将这些方法作了如下总结。

首先来看看HALOCN中的帧采集器(FrameGrabber),HDevelop提供这样一个函数来开启你采用的帧采集器(这里我的理解就是图像采集卡或工业摄像机)open_framegrabber(),这个函数中指定了HALCON目前支持的一些帧采集器的文件参数,主要有'BARRACUDA', 'BaumerFCAM', 'BCAM1394', 'BitFlow', 'DahengCAM', 'DahengFG', 'DFG-BW', 'DFG-LC', 'DirectFile', 'DirectShow', 'DT315x', 'DT3162', 'File', 'FireGrab', 'FirePackage', 'FlashBus', 'FlashBusMX', 'Ginga++', 'GingaDG', 'IDS', 'INSPECTA', 'Leutron', 'MatrixVision', 'MeteorII', 'mEnable3', 'MultiCam', 'Opteon', 'p3i2', 'p3i4', 'PT1000CL', 'PX', 'PXC', 'PXD', 'PXR', 'SaperaLT', 'TAG', 'TWAIN', 'uEye';除此之外,在官方网站上也在逐步推出新支持的一些采集卡,比如近期推出的支持大恒的DahengCAM的USB20接口(更多的信息请访问>

get,region,points可以得到坐标,smallest,rectangle1得到其外接最小矩形,外接最小矩形高度即为region的角度。

角度符号是量度角度的单位符号,角度制单位有度,分,秒三种。

角度制中,角度制就是运用60进制的例子,下面是三种标准角度符号以及类似度的符号,角度符号中的三种单位符号,在搜狗拼音或QQ拼音中,可直接输入其拼音du、fen、miao,即可打出对应的角度符号。

高度首先是个物理空间的概念,作为物理空间概含义高度含意比较简单,是指从地面或基准面向上到某处的距离,从物体的底部到顶端的距离。

其次,高度还是个比较的概念,是程度很高的,是与人的心理联系起来的,有着丰富的社会文化内蕴,另外,高度还是一部美国**片名。

从地面或基准面向上到某处的距离,从物体底部到顶端的距离。 巴金 灭亡第一章在他底前面真正立着一根竹竿,而且还拼命地往上长,差不多到了不可捉摸的高度。

以上就是关于菜鸟请教halcon问题:halcon量测物体尺寸大小之前要标定吗物体离CCD近拍全部的内容,包括:菜鸟请教halcon问题:halcon量测物体尺寸大小之前要标定吗物体离CCD近拍、halcon和opencv的图像互转(C/C++)、机器人Halcon手眼标定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10131242.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存