Halcon学习教程_错误集合
HALCON20.11:深度学习笔记(5)

HALCON20.11:深度学习笔记(5)HALCON 20.11.0.0中,实现了深度学习方法。
关于超参数的有关设置内容如下:不同的DL方法被设计用于不同的任务,它们的构建方式也会有所不同。
它们都有一个共同点,即在模型的训练过程中都面临着一个最小化问题。
训练网络或子网络,一个目标是努力使适当的损失函数最小化,参见“网络和训练过程”一节。
为此,有一组进一步的参数,这些参数是在开始训练之前设置的,在训练期间未进行优化。
我们将这些参数称为超参数。
对于DL模型,您可以设置更改策略,指定您希望在培训期间何时以及如何更改这些超参数。
在本节中,我们将解释不同超参数的概念。
注意,某些方法有额外的超参数,你可以在它们各自的章节中找到更多的信息。
如前所述,损失比较来自网络的预测与图像内容的给定信息。
损失决定惩罚偏差。
训练网络以这样的方式更新滤波器权值,使损失受到的惩罚更少,从而使损失结果得到优化。
为此,需要从训练数据集中获取一定数量的数据。
对于这个子集,计算损失的梯度,并修改网络以更新其相应的滤波权重。
现在,对下一个数据子集重复这一过程,直到整个训练数据被处理。
这些训练数据的子集被称为批,这些子集的大小,即“batch_size”,决定了一个批处理的数据数量,并作为结果一起处理。
对整个训练数据的完整迭代称为epoch。
对训练数据进行多次迭代是有益的。
迭代次数由“epochs”定义。
因此,“epochs”决定了算法在训练集上循环多少次。
一些模型(如异常检测)一次训练使用整个数据集。
对于其他模型,数据集按批处理,为了做到这一点,使用了随机梯度下降算法SGD (Stochastic Gradient Descent)。
这涉及到更多的参数,将在下面解释。
在每次计算损失梯度后,滤波器权值被更新。
对于这个更新,有两个重要的超参数:'learning_rate',它决定更新的损失函数参数(过滤器权重)上的梯度的权重,以及间隔内的'momentum',它指定以前更新的影响。
Halcon学习笔记

Halcon学习笔记1、Halcon的自我描述Program LogicEach program consists of a sequence of HALCON operatorsThe program can be structured into proceduresThe sequence can be extended by using control operators like if, for, repeat, or whileThe results of the operators are passed via variablesNo implicit data passing is appliedInput parameters of operators can be variables or expressionsOutput parameters are always variablesHDevelop has no features to design a graphical user interfaceAn HDevelop program is considered as a prototypic solution of the vision part of an applicationHDevelop is typically not used for the final application由此可以看出,Halcon的定位是一个类库,有着完整、快速实现函数,同时提供了HDevelop 作为快速开发的图形化(IDE)界面;但是,Halcon程序并不是一个完整的最终应用软件,它没有用户界面,也不提供显示的数据(公用的数据格式)。
Halcon的初学者也应当从参考Halcon的程序入手,熟悉Halcon类库,也即HDevelop-Based Programming;在此基础上,进入ORClass-Oriented Programming。
Halcon学习(20)摄像机标定常用函数(一)

Halcon学习(二十)摄像机标定常用函数(一)在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出,其中四个参数任意一个可以为空。
控制输入量可以是变量、常量、表达式,控制输出以及图像输入和输入必须是变量,以存入算子计算结果中。
1.caltab_points:从标定板中读取marks中心坐标,该坐标值是标定板坐标系统里的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。
该算子控制输出为标定板中心3D坐标。
2.create_calib_data:创建Halcon标定数据模型。
输出一个输出数据模型句柄。
3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。
设置索引,类型,以及相机的原始内参数等。
4.set_calib_data_calib_object:在标定模型中设定标定对象。
设定标定对象句柄索引,标定板坐标点储存地址。
5.find_caltab:分割出图像中的标准标定板区域。
输出为标准的标定区域,控制6.find_marks_and_pose:抽取标定点并计算相机的内参数。
输出MARKS坐标数组,以及估算的相机外参数。
即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。
7.set_calib_data_observ_points( : : CalibDataID, CameraIdx, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose : )收集算子6的标定数据,将标定数据储存在标定数据模型中。
输入控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,行列坐标,位姿。
8.calibrate_cameras( : : CalibDataID : Error) 标定一台或多台相机,依据CalibDataID中的数据。
控制输出平均误差。
HALCON20.11:深度学习笔记(9)

HALCON20.11:深度学习笔记(9)HALCON 20.11.0.0中,实现了深度学习方法。
本章解释了如何使用基于深度学习的异常检测。
通过异常检测,我们想要检测图像是否包含异常。
异常指的是偏离常规的、未知的东西。
异常检测的例子:输入图像的每个像素都被分配了一个值,该值表明该像素是异常的可能性有多大。
蠕虫不是模型在训练中看到的无虫苹果的一部分,因此它的像素得到了更高的分数。
一个异常检测模型学习没有异常的图像的共同特征。
训练后的模型将推断出输入图像只包含学习过的特征的可能性有多大,还是该图像包含不同的东西。
后一个被解释为异常。
此推理结果作为灰度图像返回。
其中的像素值表示输入图像像素中相应像素显示异常的可能性有多大。
一般工作流程在本节中,我们描述了基于深度学习的异常检测任务的一般流程。
预处理数据这一部分是关于如何预处理数据的。
1. 需要转换数据集的信息内容。
这是通过函数read_dl_dataset_anomaly来完成的。
它创建了一个字典DLDataset,它充当一个数据库,存储关于您的数据的所有必要信息。
要了解更多关于数据及其传输方式的信息,请参阅下面的“数据”一节和深度学习/模型一章。
2. 拆分字典DLDataset表示的数据集。
这可以使用函数split_dl_dataset来完成。
3. 网络对图像有几个要求。
可以使用函数get_dl_model_param检索这些需求(例如图像大小和灰度值范围)。
为此,您需要首先通过函数read_dl_model读取模型。
4. 现在可以对数据集进行预处理了。
为此,您可以使用该函数preprocess_dl_dataset。
对于自定义预处理,本函数提供了实现的指导。
要使用这个函数,请指定预处理参数,例如,图像的大小。
将所有参数及其值存储在DLPreprocessParam字典中,您可以使用该函数create_dl_preprocess_param。
我们建议保存这个字典DLPreprocessParam,以便稍后在推理阶段访问预处理参数值。
博客halcon学习经验

HALCON是当今machine vision技术的代表,它总是以最新科技为基础,提供了现今市场中最强大的vision library。
除了提供了完整的标准machine vision功能,还有一系列优异的功能,例如,3D相机校正,形状以及原件导向的匹配,次像元精度的物体撷取,计算,利用双像立体量测,任意形状的ROI,以及更多的功能。
用HALCON 来开发程序的流程:1 、利用 HDevelop 检视分析影像,建立计算雏形,最后完成视觉计算方法的发展。
程序可以分成不同的子程序,每个procedures 可以只做一件事,像初始化,计算,或是清除。
主程序用于呼叫其它子程序,传递影像或是接收显示结果。
最后,程序输出成我们要用的程序代码,接续下一步工作。
2 、完整的程序发展是在程序设计环境中进行,像是 Microsoft Visual Studio 。
由 HDevelop 输出的程序代码,透过指令加入程序中 ( 例如 include) 。
至于程序的接口等等则是利用程序语言的功能来建构,接下来, compiled and linked ,产生应用程序。
自行撰写的程序和 HALCON library 一起装入机器中出货,或是将程序卖到客户处。
参数和数据结构:HALCON 有两种基本的数据型态 : 图像数据 (iconic ,例如影像 ) 以及控制数据 ( control ,例如变量,整数,字符串,handle 等等 ) 。
所有运算子的参数都是以相同的方式排列:输入图像,输出图像,输入控制,输出控制。
当然,并非所有的运算子都具有上列四类参数,不过参数排列的次序依旧相同。
ROI :影像中要处理的数据范围。
region 即是一堆像元的集合。
region 中的像元不一定要相连,如果要让相连接的像元成为一个 region ,只要呼叫运算子 connection 即可。
XLD 包含了所有等值线以及多边型的数据。
XLD 对象中除了点坐标数据,还包含了全域或区域属性,例如 edge 方向,或是分割时的 regression 参数等等。
HALCON运算符及功能-中文

HALCON运算符及功能Chapter1:Classification1.1Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训练样本添加到一个高斯混合模型的训练数据上。
2.classify_class_gmm功能:通过一个高斯混合模型来计算一个特征向量的类。
3.clear_all_class_gmm功能:清除所有高斯混合模型。
4.clear_class_gmm功能:清除一个高斯混合模型。
5.clear_samples_class_gmm功能:清除一个高斯混合模型的训练数据。
6.create_class_gmm功能:为分类创建一个高斯混合模型。
7.evaluate_class_gmm功能:通过一个高斯混合模型评价一个特征向量。
8.get_params_class_gmm功能:返回一个高斯混合模型的参数。
9.get_prep_info_class_gmm功能:计算一个高斯混合模型的预处理特征向量的信息内容。
10.get_sample_class_gmm功能:从一个高斯混合模型的训练数据返回训练样本。
11.get_sample_num_class_gmm功能:返回存储在一个高斯混合模型的训练数据中的训练样本的数量。
12.read_class_gmm功能:从一个文件中读取一个高斯混合模型。
13.read_samples_class_gmm功能:从一个文件中读取一个高斯混合模型的训练数据。
14.train_class_gmm功能:训练一个高斯混合模型。
15.write_class_gmm功能:向文件中写入一个高斯混合模型。
16.write_samples_class_gmm功能:向文件中写入一个高斯混合模型的训练数据。
1.2Hyperboxes1.clear_sampset功能:释放一个数据集的内存。
2.close_all_class_box功能:清除所有分类器。
halcon中设置xld线宽的算子

一、Halcon中XLD线宽概述Halcon是一种用于机器视觉应用的强大软件,其提供了一系列的图像处理和分析工具。
在Halcon中,XLD是一种表示线的数据结构,而线宽则是指线的粗细程度。
通过调整线宽,可以改变线在图像中的显示效果,从而影响后续的图像分析和处理结果。
二、Halcon中设置XLD线宽的算子在Halcon中,可以通过使用相应的算子来设置XLD线宽,下面介绍一些常用的操作:1. gen_xld_contour_polygon: 该算子用于生成多边形轮廓,可以通过指定线宽参数来设置线的宽度。
2. draw_xld: 该算子用于在图像上绘制XLD对象,可以通过指定线宽参数来设置线的宽度。
3. set_xld_attrib: 该算子用于设置XLD对象的属性,可以通过指定线宽参数来改变线的宽度。
4. set_line_width: 该算子用于设置XLD对象中线段的宽度。
以上算子可以根据具体的需求和场景来选择合适的方法来设置XLD线宽,从而满足不同的应用需求。
三、Halcon中设置XLD线宽的应用案例为了更好地理解在Halcon中设置XLD线宽的方法和应用场景,下面给出一个简单的应用案例:假设我们需要在一张工件图像中检测并测量其中的线段,但由于图像噪声较大导致线段看上去比较模糊。
这时我们可以利用Halcon中设置XLD线宽的算子来增加线段的宽度,使其更容易被检测和测量。
我们可以使用gen_xld_contour_polygon算子来生成线段的多边形轮廓,并通过设置线宽参数来增加线段的宽度。
然后使用draw_xld算子将处理后的线段绘制到原始图像上,以便后续的检测和测量。
通过这样的处理,我们可以更准确地检测和测量图像中的线段,提高图像处理的精度和稳定性。
四、结论通过对Halcon中设置XLD线宽的算子进行介绍和应用案例的讲解,我们可以看到这些算子在图像处理和分析中的重要作用。
通过灵活运用这些算子,可以满足不同场景下的图像处理需求,提高图像处理的效率和准确性。
Halcon学习(10)边缘检测(一)

Halcon学习(十)边缘检测(一)边缘检测的定义:使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边、线特征的过程。
边缘是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。
图像的边缘对应着图像灰度的不连续性。
显然图像的边缘很少是从一个灰度跳到另一个灰度这样的理想状况。
真实图像的边缘通常都具有有限的宽度呈现出陡峭的斜坡状。
边缘的锐利程度由图像灰度的梯度决定。
梯度是指灰度变化的最快的方向和数量。
常见的边缘点有三种:第一种是阶梯形边缘 (Step-edge), 即从一个灰度到比它高好多的另一个灰度。
第二种是屋顶型边缘 (Roof-edge), 它的灰度是慢慢增加到一定程度然后慢慢减小。
还有一种是线性边缘 (Line-edge), 它的灰度从一级别跳到另一个灰度级别之后然后回来。
边缘检测的方法主要有以下几种:第一种检测梯度的最大值。
由于边缘发生在图像灰度值变化比较大的地方 ,对应连续情形就是说是函数梯度较大的地方,所以研究比较好的求导算子就成为一种思路。
Roberts 算子、 Prewitt 算子和 Sobel 算子等就是比较简单而常用的例子。
还有一种比较直观的方法就是利用当前像素邻域中的一些像素值拟合一个曲面 , 然后求这个连续曲面在当前像素处梯度。
从统计角度来说 , 我们可以通过回归分析得到一个曲面 , 然后也可以做类似的处理。
第二种是检测二阶导数的零交叉点。
这是因为缘处的梯度取得最大值 ( 正的或者负的 ), 也就是灰度图像的拐点是边缘。
从分析学上我们知道 , 拐点处函数的二阶导数是 0 。
第三种,统计型方法。
比如说利用假设检验来检测边缘中利用对二阶零交叉点的统计分析得到了图像中各个像素是边缘的概率,并进而得到边缘检测的方案。
1.sobel_amp(Image : EdgeAmplitude : FilterType, Size : )根据图像的一次导数计算图像的边缘程序如下:read_image (Image, 'fabrik')sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)threshold (EdgeAmplitude, Region, 10, 255)skeleton (Region, Skeleton)dev_display (Image)dev_set_color ('white')dev_display (Skeleton)ImageEdgeAmplitudeSkeletonsobel_amp( Image : EdgeAmplitude : FilterType, Size : )根据图像的一次导数计算图像的边缘close_edges( Edges, EdgeImage : RegionResult :MinAmplitude : )close_edges_length( Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : ) 使用边缘高度图像关闭边缘间隙。