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篇工业机器视觉技术是近年来广泛应用于制造业、智能制造等领域的一项先进技术。
而Halcon(halcon软件)作为机器视觉领域的一个重要工具之一,为很多工厂和企业的生产提供了有力的支持。
以下是Halcon基础教程的一些内容:一、图像的基本处理1.图像读取和显示使用 HDevelop 进行图像读取和显示,首先需要打开 Halcon 的环境。
read_image (Image,"图片路径")Using HDevelop 进行图像显示dev_close_window ()dev_open_window (0,0,800,600,"image", "no_titlebar", "") dev_display (Image)2.图像的预处理图像的预处理指对原始图像进行一系列处理,以便于后续处理。
常见的预处理有图像灰度化、平滑化、二值化等。
a.灰度化:将RGB图像转换为灰度图象。
gray_image(Image,GrayImage)b.平滑化:对于物体在图像中可能产生的噪声,需对图像进行平滑化处理。
gauss_filter(Image,GaussImage,2)c.二值化:将灰度图产生为二值图,以便于后续的分析处理。
threshold(Image,Region,20,255)二、圆形和直线的基本检测1、圆形的检测a.使用梯度方向不变性(Gradient direction invariant)方法。
1) 对图像进行预处理,平滑和边缘检测。
gauss_filter(Image,Filtered,3)sobel_amp(Filtered,DerivGaussian,3)2) 选定圆心和半径的最小值和最大值,对圆进行扫描。
find_circles(FilteredCircles,DerivGaussian,MinRadius,Max Radius)3) 对于查找到的圆形和可能的重叠,消除重叠。
halcon教程
halcon教程Halcon是一种广泛应用于机器视觉领域的软件库,它提供了丰富的图像处理和分析功能。
本教程将介绍Halcon的基本使用方法,涵盖图像读取、预处理、特征提取、目标检测等常用操作。
1. 图像读取使用Halcon的read_image函数可以从文件中读取图像数据。
可以通过指定文件路径来读取图像,例如:read_image(Image, 'image.jpg')2. 图像预处理在图像处理之前,通常需要对图像进行一些预处理操作,以改善后续处理的效果。
Halcon提供了丰富的预处理函数,如灰度化、平滑、滤波等。
例如,可以使用以下代码对图像进行灰度化处理:gray_image(Image, GrayImage)3. 特征提取Halcon提供了多种特征提取函数,可以从图像中获取有用的信息。
常用的特征包括边缘、角点、斑点等。
例如,可以使用find_edges函数在图像中提取边缘信息:find_edges(GrayImage, Edges, 10, 40)4. 目标检测目标检测是机器视觉中的一个重要任务,Halcon提供了多种目标检测函数和算法。
例如,可以使用find_shape_models函数对图像中的形状进行检测:find_shape_models(GrayImage, Model, AngleStart, AngleExtent, MinScore, NumMatches, SubPixel, Greediness, Result)以上是一些Halcon的基本用法,通过学习这些基础知识,您可以在机器视觉应用中更好地运用Halcon库进行图像处理和分析。
希望这些信息对您有所帮助!。
halcon入门教程
halcon入门教程Halcon(哈康)是一款由美国密歇根州慕尼黑市的MVTec软件公司开发的机器视觉开发平台。
它提供了丰富的图像处理和分析函数,可以用于工业自动化、机器人视觉、医学图像处理等各个领域。
Halcon的入门教程首先要了解其基本概念和术语。
以下是一些常用术语的简要介绍:1. 图像:在Halcon中,图像指的是一个或多个矩阵组成的数据对象。
每个矩阵表示图像中的像素值,可以是灰度图像或彩色图像。
2. 灰度图像:灰度图像是指每个像素只有一个灰度值的图像。
在Halcon中,灰度图像通常用单通道矩阵表示。
3. 彩色图像:彩色图像是指每个像素有多个颜色分量的图像。
在Halcon中,彩色图像通常用多通道矩阵表示,每个通道表示一个颜色分量。
4. 模板匹配:模板匹配是一种在输入图像中寻找与模板图像最相似区域的方法。
Halcon提供了多种模板匹配算法,可以根据需要选择合适的算法。
5. 区域:在Halcon中,区域是指图像中的一个连续像素集合。
可以通过二值化、分割等方法得到区域。
除了上述基本概念外,入门教程还应包括以下内容:1. 安装与配置:介绍如何下载、安装和配置Halcon开发环境。
2. 图像加载与显示:介绍如何加载和显示图像,以及常用的图像显示函数。
3. 图像处理:介绍Halcon提供的常用图像处理函数,例如平滑、增强、边缘检测等。
4. 区域处理:介绍Halcon提供的区域处理函数,例如区域拟合、区域合并、形态学操作等。
5. 模板匹配:介绍Halcon提供的模板匹配函数,例如统计形状模板匹配、模板匹配算法比较等。
6. 应用实例:通过实际案例展示如何使用Halcon解决实际问题,例如物体检测、识别和测量等。
通过学习上述内容,可以初步掌握Halcon的基本功能和使用方法,为进一步深入学习和应用奠定基础。
halcon学习经验
HalCon学习经验总结1.图像的开运算和闭运算算子开运算就是用消除图像上的小物体,小区域,将纤细相连的物体分开,将大物体的表面平滑与此同时不明显改变他的面积。
扩大背景(就是暗的部分),缩小前景(就是亮的部分)。
模板匹配等闭运算就是填充物体内细小的空洞,连接邻近的物体,平滑物体的边界同时呢不明显改变他的面积。
缩小背景(就是暗的部分),扩大前景(就是亮的部分)开运算:先对图像腐蚀然后膨胀闭运算:先对图像膨胀然后腐蚀必要的解释:一:HALCON提供了开运算、闭运算的函数(算子),根据结构元素的不同(圆的方的椭圆的或是自己定义也可以)细化出很多算子。
这些都是细枝末节。
此处不再赘余。
二:开闭运算的结构元素没有参考点(中心点)的概念。
三:开闭运算没有迭代的概念,就是图像被同样结构元素做开运算,处理一次和处理随意非零次的效果是一样的。
gray_opening_rect (ImageInvert, ImageOpening, 20, 20)gray_closing_rect (ImageInvert, ImageClosing, 20, 20)connection (ImageOpening,tophat)connection (ImageClosing,bothat)sub_image (bothat,tophat,ImageSub, 1, 0)union1 (ImageSub, RegionUnion)2.击中击不中(hit_or_miss),加厚(thickening),打薄(thinning)thickening:原始图像+ 对图像使用击中击不中产品的图像thinning:原始图像- 对图像使用击中击不中产品的图像击中击不中原理继膨胀、腐蚀、开运算和闭运算之后的有一个基本操作就是击中击不中变换(HMT),HMT变换可以同时探测图像的内部和外部。
在研究图像中的目标物体与图像背景之间的关系上,HMT能够取得很好的效果。
halcon一些算子介绍
threshold(Image,Region,0,PeakGray-25)
bin_threshold — 使用一个自动确定的阈值分割图像。
格式: bin_threshold(Image : Region : : )
Halcon通过统一的接口封装上述不同相机的image acquisition interfaces,从而达到算子统一化。不同的相机只需更改几个参数就可变更使用。
Halcon图像获取的思路:1、打开设备,获得该设备的句柄。2、调用采集算子,获取图像。
1、打开设备,获得该设备的句柄。
open_framegrabber('DahengCAM', 1, 1, 0, 0, 0, 0, 'interlaced', 8, 'gray', -1, 'false','HV-13xx', '1', 1, -1, AcqHandle) //连接相机,并设置相关参数
图像分割的定义:
所谓图像分割是指将图像中具有特殊含义的不同区域分割开来,这些区域是互相不交叉的,每个区域都满足特定区域的一致性。
1、基于阈值的图像分割
threshold —采用全局阈值分割图像。
格式: threshold(Image : Region : MinGray, MaxGray : )
形体学基础算子:
erosion1
dilation1
opening
closing
常用的形态学相关算子
connection
halcon算子学习笔记—devlope算子1
Halcon算子学习笔记1.dev_clear_object(object:::)从当前程序的变量库中清除指定的图像变量,一旦清除,后续将不能访问该变量。
2.dev_clear_window(:::)清除当前活动窗口中显示的图像变量。
窗口的所设置参数不会被改变。
3.dev_close_inspect_ctrl(::variable:)与dev_inspect_ctrl相对的算子。
通过指定varibale,可以消除该变量在窗口中的显示,一旦所有的变量都使用该算子,则所有的变量就会被删除,此时,窗口就会被关闭。
4.dev_close_tool(::toolid:)该算子通过指定工具的ID号码关闭对应的工具。
如果不指定id号码,可以使用工具的名字。
5.dev_close_window(:::);关闭活动的图形窗口,包括被dev_open_window打开的窗口或者程序自动打开的默认窗口。
6.dev_display(object:::);将object图像变量显示在活动的窗口中,此算子相当与双击图像变量,实际上,双击图像变量,也可以将图像显示在活动窗口中。
7.dev_error_var(:errorvar:mode:)定义一个错误变量,并开启或者关闭该变量。
如果开启了该错误变量,则每执行一个算子,该变量的取值就会根据算子的执行情况进行更新,如果算子执行正确,则返回2。
8.dev_get_exception_data()获取错误信息。
错误信息有catch捕捉后,可以通过该算子查询错误状况。
9.Dev_get_preferences()该算子可以查询hdevlop的参数设置情况,与dev_set_preferences算子相对应。
10.dev_get_system(::systemquerys:systeminformations)获取当前的系统信息。
其中,systemquery的取值为engine_environment,其返回值根据使用的环境不同,返回Hdevelop或者Hdevengine。
halcon学习经验
HalCon学习经验总结1.图像的开运算和闭运算算子开运算就是用消除图像上的小物体,小区域,将纤细相连的物体分开,将大物体的表面平滑与此同时不明显改变他的面积。
扩大背景(就是暗的部分),缩小前景(就是亮的部分)。
模板匹配等闭运算就是填充物体内细小的空洞,连接邻近的物体,平滑物体的边界同时呢不明显改变他的面积。
缩小背景(就是暗的部分),扩大前景(就是亮的部分)开运算:先对图像腐蚀然后膨胀闭运算:先对图像膨胀然后腐蚀必要的解释:一:HALCON提供了开运算、闭运算的函数(算子),根据结构元素的不同(圆的方的椭圆的或是自己定义也可以)细化出很多算子。
这些都是细枝末节。
此处不再赘余。
二:开闭运算的结构元素没有参考点(中心点)的概念。
三:开闭运算没有迭代的概念,就是图像被同样结构元素做开运算,处理一次和处理随意非零次的效果是一样的。
gray_opening_rect (ImageInvert, ImageOpening, 20, 20)gray_closing_rect (ImageInvert, ImageClosing, 20, 20)connection (ImageOpening,tophat)connection (ImageClosing,bothat)sub_image (bothat,tophat,ImageSub, 1, 0)union1 (ImageSub, RegionUnion)2.击中击不中(hit_or_miss),加厚(thickening),打薄(thinning)thickening:原始图像+ 对图像使用击中击不中产品的图像thinning:原始图像- 对图像使用击中击不中产品的图像击中击不中原理继膨胀、腐蚀、开运算和闭运算之后的有一个基本操作就是击中击不中变换(HMT),HMT变换可以同时探测图像的内部和外部。
在研究图像中的目标物体与图像背景之间的关系上,HMT能够取得很好的效果。
Halcon学习笔记之缺陷检测(一)
Halcon学习笔记之缺陷检测(一)例程:surface_scratch.hdev说明:这个程序利用局部阈值和形态学处理提取表面划痕代码中绿色部分为个人理解和注释,其余为例程中原有代码*surface_scratch.hdev:extraction of surface scratches via local thresholding and morphological post-processing*dev_close_window()dev_update_window(‘off’)******step: acquire image //获取图片*****read_image(Image,’surface_scratch’) //读入图片名为’surface_scratch’的图片get_image_size(Image,Width,Height) //获取图像的尺寸:宽、高//在坐标为(0,0)处打开一个图像窗口。
其宽和高分别是Width和Width,窗口的句柄为WindowIDdev_open_window_fit_image(Image,0,0,Width,Width,WindowID)//设置窗口中显示的字体颜色,大小,加粗,倾斜set_display_font(WindowID,12,’Courier’,’true’,’false’)dev_set_draw(‘margin’) //设置区域填充类型:’margin’or ‘fill’dev_set_line_width(4) //设置线宽,这个在填充类型为fill时效果不明显dev_display(Image) //显示图片disp_continue_message(WindowID,’black’,’true’) //显示继续消息,等待用户按F5继续执行stop()******step: segment image******-> using a local thresholdmean_image(Image,ImageMean,7,7) //用7×7的窗口对图像进行均值滤波dyn_threshold(Image,ImageMean,DarkPixels,5,’dark’) //利用本地阈值进行图像分割*->extract connected componentsconnection(DarkPixels,ConnectedRegions) //对区域进行连通运算dev_set_colored(12) //设置区域显示的颜色数目dev_display(ConnectedRegions) //显示图像•disp_continue_message(WindowID,’black’,’true’)•//显示继续提示,提示继续stop()******step: process regions******->select large regionsselect_shape(ConnectedRegions,SelsectedRegions,’area’,’and’,10,1000) //区域选择,用面积的形态特征选择面积在10到10000间的区域dev_display(Image) //显示原图dev_display(SelectedRegions) //显示选择的区域disp_continue_message(WindowID,’black’,’true’) //显示继续提示,提示继续stop()*->visualize fractioned scratchopen_zoom_window(0,round(Width/2),2,303,137,496,3,WindowHandleZoom)dev_set_color(‘blue’) //设置显示颜色(蓝色),功能与dev_set_colored类似dev_display(Image) //显示原图dev_display(SelectedRegions) //显示选中的区域图disp_continue_message(WindowID,’black’,’true’) //显示继续提示信息stop()*->merge fractioned scratches via morphologyunion1(SelectedRegions,RegionUnion) //合并所有区域dilation_circle(RegionUnion,RegionDilation,3.5) //用半径3.5 的掩膜进行膨胀dev_display(Image) //显示原图dev_display(RegionDilation) //显示膨胀后的区域图disp_continue_message(WindowID,’black’,’true’)//显示继续提示信息stop()skeleton(RegionDialtion,Skeleton) //计算区域的中轴,见例程:surface_scratch.hdev connection(Skeleton,Errors) //连通操作,以便后面进行区域选择dev_set_colored(12) //设置颜色dev_display(Image) //显示原图dev_display(Errors) //显示所有抓痕disp_continue_message(WindowID,’black’,’true’) //显示继续提示信息stop()*->distinguish small and large scratchesclose_zoom_window(WindowHandleZoom,Width,Height) //关闭缩放窗口select_shape(Errors,Scratches,’area’,’and’,50,10000)//选择区域面积在50到10000的作为划痕select_shape(Errors,Dots,’area’,’and’,1,50) //选择区域面积在1到50 的作为点dev_display(Image) //显示原图dev_set_color(‘red’) //设置区域显示颜色为红色dev_display(Scratches) //显示条状划痕(显示为红色)dev_set_color(‘blue’) //设置区域显示颜色蓝色dev_display(Dots) //显示点状划痕(显示为蓝色)。
工业机器视觉基础教程-halcon篇
工业机器视觉基础教程-halcon篇工业机器视觉基础教程-Halcon篇工业机器视觉是一种通过计算机对物体进行图像分析的技术,能够实现自动检测、识别和测量等功能。
Halcon是一种常用的工业机器视觉库,提供了丰富的图像处理函数和算法,使其成为开发工业机器视觉应用的有效工具。
1. Halcon的安装和基本配置在学习使用Halcon之前,首先需要将Halcon工具包下载并安装到电脑中。
安装完成后,还需要进行基本的配置设置,以确保Halcon能够正常运行。
2. Halcon图像的读取和显示在Halcon中,可以使用ReadImage函数读取图像文件,并使用DispWindow函数在图像窗口中显示图像。
可以通过设置窗口参数来调整图像的显示效果。
3. Halcon图像的预处理在进行图像处理之前,通常需要对图像进行预处理,以便提取感兴趣的目标信息。
在Halcon中,可以使用一系列的函数实现图像预处理的操作,如平滑、边缘检测、二值化等。
4. Halcon图像的特征提取和匹配图像特征提取和匹配是工业机器视觉中常用的操作,可以通过提取出的特征进行目标的识别和测量。
Halcon提供了多种特征提取函数和匹配算法,如边缘提取、角点检测、形状匹配等。
5. Halcon图像的测量和计算工业机器视觉常用于对物体尺寸、位置、角度等进行测量和计算。
Halcon提供了一系列的测量和计算函数,如距离测量、角度测量、轮廓面积计算等。
6. Halcon图像的分割和识别在某些工业机器视觉应用中,需要将图像中的目标进行分割,并对分割出的目标进行识别。
Halcon提供了多种分割和识别函数,如颜色分割、形状分割、字符识别等。
7. Halcon图像的图形界面设计在开发工业机器视觉应用时,通常需要设计出直观友好的图形界面,以方便用户操作和显示结果。
Halcon提供了UI元素的创建和交互函数,可以通过这些函数设计出符合需求的图形界面。
8. Halcon的高级函数和算法除了基本的图像处理和分析功能外,Halcon还提供了一些高级的函数和算法,如3D视觉、深度学习等。
Halcon学习笔记--数组操作和文件(4)
Halcon学习笔记--数组操作和⽂件(4)⼀、数组操作对数组可以完成整体赋值,区域赋值,数组之间赋值,某个元素赋值(这个很类似Matlab)count_seconds(T1)Htuple1 := [1,2,3,4,5,6]Htuple3 := sin(Htuple1)*数组元素修改Htuple1[2] := 'ABC'*数组区域修改Htuple1[1:3] := ['ccc','ddd','eee']*数组之间赋值Htuple2 := Htuple1[1:|Htuple1|-1]count_seconds(T2)T3 := T2-T1逐步运⾏count_seconds(t)算⼦是计算程序运⾏的时间;⼆、⽂件操作⽂件操作包括读和写,⽂件格式有:Text,图像,区域等,常⽤算⼦解释如下:1.open_file( : : , : ):'output':创建新的⽂本,⽤write‘append':在原有的⽂本基础上写⼊该⽂件'input':打开⽂件,打开⼀个已经存在的⽂件,⽤以read2.fwrite_string( : : , : )写⼊⽂件3.fnew_line( : : : )换⾏4.close_file( : : : )关闭⽂件5.fread_char( : : : )读⼊字符6.fread_line( : : : , )⾏读取,IsEOF:判断是否到了⽂本⽂件的末尾7.fread_string( : : : , )read_image (Image, 'fabrik')*区域增长算⼦regiongrowing (Image, Regions, 3, 3, 6, 100)count_obj (Regions, Number)*创建⼀个即将要⼊数值⽂件open_file ('E:/欣奕华/项⽬/Halcon/STUDY/⽹络课程笔记/1.⽂件数组/area.dat', 'output', FileHandle)for I := 1 to Number by 1*选择区域select_obj (Regions, ObjectSelected, I)area_center (ObjectSelected, Area, Row, Column)*⽂件要写⼊值fwrite_string (FileHandle, I + ' ' + 'Row :'+ Row + ' Column :'+ Column + 'Area :'+Area )*换⾏fnew_line (FileHandle)endforregiongrowing (Image, Regions, 3, 3, 6, 100) 区域增长算⼦函数作⽤:⽤区域⽣长实现图像分割函数原理:如果相邻像素的灰度值差⼩于等于Tolerance,则被融为⼀个区域。
halcon学习笔记——傅里叶变换与极坐标变换
halcon学习笔记——傅⾥叶变换与极坐标变换⼀、傅⾥叶变换图像的傅⾥叶变换◆傅⾥叶变换定义:傅⾥叶变换是时域到频域的变换⽅法,通俗讲是将现在的空间变换到⼀个能够反映某些事物出现频率的空间。
◆图像傅⾥叶变换:◆⽤途:⼀般⽤于对出现频率⾼的像素点的分析以及噪声的去除。
◆频率图特点:图像中⼼为频率为 0 的原点,由内到外频率越来越⾼。
其中灰度变换激烈的地⽅对应⾼频成分,如边缘;灰度变换不⼤的地⽅对应低频。
*傅⾥叶变换fft_image (GrayImage, ImageFFT)area_center (ImageFFT, Area, Row, Column)gen_circle (Circle, Row, Column, 200)gen_circle (Circle1, Row, Column, 1000)difference (Circle1, Circle, RegionDifference)paint_region (RegionDifference, ImageFFT, ImageResult, 0, 'fill')fft_image_inv (ImageResult, ImageFFTInv)⼆、极坐标变换◆极坐标系的定义:在平⾯内取⼀个定点 O,叫极点,引⼀条射线,叫做极轴,再选定⼀个长度位和⾓度的正⽅向。
对于平⾯内任何⼀点,⽤ r 表⽰线段的长度,a 表⽰⾓度,r 叫做点的极径,a 叫做点的极⾓,有序数对 (r,a)就叫点的极坐标,这样建⽴的坐标系叫做极坐标系。
◆极坐标系的变换:选取极坐标原点,并将原坐标系变换为极坐标系的过程称为极坐标系的变换。
关键点在于极坐标系原点的选取以及起始⾓度的设置 (可以将环形拉直,直⾏变圆)read_image (Image, Selection)draw_circle (WindowHandle, Row, Column, Radius)gen_circle (Circle, Row, Column, Radius)reduce_domain (Image, Circle, ImageReduced)*极坐标变换polar_trans_image_ext (ImageReduced, PolarTransImage, Row, Column, 0, 6.28319, 0.5*Radius, Radius, 6.28319*Radius, 800, 'nearest_neighbor') *极坐标逆变换polar_trans_image_inv (PolarTransImage, XYTransImage, Row, Column, 0, 6.28319, 0.5*Radius, Radius, 6.28319*Radius, 800, 'nearest_neighbor')。
Halcon学习之六:获取Image图像中Region区域的特征参数
Halcon学习之六:获取Image图像中Region区域的特征参数1、close_all_framegrabbers ( : : : )关闭所有图像采集设备。
2、close_framegrabber ( : : AcqHandle : )关闭Handle为AcqHandle的图像采集设备。
3、open_framegrabber ( : : Name, HorizontalResolution,VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn,Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle )打开图像采集设备参数信息:Name:图像采集设备的名称HorizontalResolution和VerticalResolution:分别指预期的图像采集接口的水平分辨率和垂直分辨率ImageWidth和ImageHeight:指预期图像的宽度部分和高度部分。
StartRow和StartColumn:指显示预期图像的开始坐标Field:预期图像是一半的图像或者是完整图像BitsPerChannel:每像素比特数和图像通道ColorSpace:输出的色彩格式的抓住图像{gray、raw、rgb、yuv、default}Generic:通用参数与设备细节部分的具体意义。
ExternalTrigger:是否有外部触发CameraType:使用相机的类型Device:图像获取设别连接到的设备Port:图像获取设别连接到的端口LineIn :相机输入的多路转接器AcqHandle:图像获取设备的Handle4、grab_image ( : Image : AcqHandle : )获取AcqHandle的图像采集设备的Image。
HALCON20.11:深度学习笔记(4)
HALCON20.11:深度学习笔记(4)HALCON 20.11.0.0中,实现了深度学习方法。
关于网络和训练过程如下:在深度学习中,任务是通过网络发送输入图像来执行的。
整个网络的输出由许多预测组成。
例如,对于一个分类任务,预测得到的每个类的置信度,表示图像显示该类实例的可能性有多大。
具体的网络会有所不同,特别是从一种方法到另一种方法。
一些方法,如对象检测,使用子网络生成特征图(参见下面和深度学习/对象检测中给出的解释)。
在这里,我们将解释一个基本的卷积神经网络(CNN)。
这种网络由一定数量的层或滤波器组成,这些层或滤波器按特定的方式排列和连接。
一般来说,任何层都是执行特定任务的构建块。
可以将它看作一个容器,它接收输入,根据函数转换输入,并将输出传入到下一层。
因此,不同类型的层可以有不同的功能。
在“分类解决方案指南”中给出了几个可能的例子。
许多层或滤波器都有权重,参数也称为滤波器权重。
这些是在网络训练过程中修改的参数。
大多数层的输出都是feature map。
因此,特征映射的数量(层输出的深度)和大小(宽度和高度)取决于特定的层。
Schema of an extract of a possible classification network.Below we show feature maps corresponding to the layers, zoomed to a uniform size.为了训练网络完成特定的任务,需要添加损失函数。
不同的任务有不同的损失函数,但它们都按照以下原则工作。
损失函数比较来自网络的预测与给定的信息,它应该在图像中找到什么(以及,如果适用,在哪里),并惩罚偏差。
然后滤波器的权值以使损失函数最小化的方式更新。
因此,针对特定的任务训练网络,人们努力使网络的损失(一个错误函数)最小化,人们希望这样做也会改善性能度量。
在实践中,这种优化是通过计算梯度和更新不同层的参数(滤波器权重)来实现的。
Halcon学习资料整理
模板匹配1. Shape-Based matching的基本流程HALCON提供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板,对整个图像建立模板也可以,但这样除非是对象在整个图像中所占比例很大,比如像视频会议中人体上半身这样的图像,我在后面的视频对象跟踪实验中就是针对整个图像的,这往往也是要牺牲匹配速度的,这个后面再讲。
基本流程是这样的,如下所示:⑴首先确定出ROI的矩形区域,这里只需要确定矩形的左上点和右下点的坐标即可,gen_rectangle1()这个函数就会帮助你生成一个矩形,利用area_center()找到这个矩形的中心;⑵然后需要从图像中获取这个矩形区域的图像,reduce_domain()会得到这个ROI;这之后就可以对这个矩形建立模板,而在建立模板之前,可以先对这个区域进行一些处理,方便以后的建模,比如阈值分割,数学形态学的一些处理等等;⑶接下来就可以利用create_shape_model()来创建模板了,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。
对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10;Metric参数决定模板识别的条件,如果设为’use_polarity’,则图像中的物体和模板必须有相同的对比度;创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数;另外,还需要获得这个模板的轮廓,用于后面的匹配,get_shape_model_contours()则会很容易的帮我们找到模板的轮廓;⑷创建好模板后,就可以打开另一幅图像,来进行模板匹配了。
halcon知识点
1. 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。
什么原因引起?初步诊断是,显示的时候调用的颜色查找表存在异常不是default ,而是其它选项。
此时可以通过查阅相关参数,调用set_system解决,也可以在编辑-》参数选择-》颜色查找表进行更改。
2. 裁剪图像;从图像上截取某段图像进行保存。
如何实现该操作?首先应该知道,region不具有单独构成图像的要素,他没有灰度值。
有用过opencv的应该知道ROI(感兴趣区域),设置好它后,对图像的大部分操作就转为图像的一个矩形区域内进行。
类似的,halcon有domain 概念。
首先设置好一个矩形区,然后使用reduce_domain (是一个矩形区域)后,再使用crop_domain 就裁剪出图像。
3. 读入bmp,或tiff 图像显示该图不是bmp文件或不能读。
原因是什么?这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。
Halcon 读取图像在windows下面到最后是调用windows库函数实现读图功能。
咱不清楚到底是怎么调用的。
对于图像格式,在读图函数F1说明很细。
基本bmp 如果文件头不是bw还是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来。
其他规格欢迎补充。
解决办法,如果是相机采集,就在内存直接转换(参见halcon到VC.pdf 里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为24位bmp格式,即可解决。
4.读入avi文件报错。
Halcon 通过directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。
如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。
5. Region 或xld 筛选。
Halcon提供了丰富的region 和xld筛选方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、Halcon 数据结构 两类参数:图形参数 Iconic (image, region, XLD) 与 控制参数 Control (string, integer, real, handle),在 Halcon 算子的参数中,依次为:输入图形参数、输出图形参数、输入控制参数、 输出控制参数;并且其输入参数不会被算子改变。 图形参数 Iconic: Images Multiple channels Arbitrary region of interest Multiple pixel types (byte, (u)int1/2/4, real, complex, direction, cyclic, vector_field) byte, uint2 int1, int2 int4 direction real complex cyclic vector_field //灰度图像的标准编码 //Difference of two images or derivates with integer precision (??) //两幅灰度图的频谱 //图片边缘的梯度方向 //边缘提取及特定灰度值的轮廓 //图片频率分布 //Assigning one "gray" value to each color(??) //连续图形的光学流分布
while ... endwhile repeat ... until
此外,也有关键字 break、continue、return、exit、stop 用来控制语句的执行; 赋值语句在 Halcon 中也被当作函数来使用: 标准赋值 assign(Expression, ResultVariable) //编辑形式,永远都是输入在前,输出在后 ResultVariable := Expression //代码形式 元组插入赋值 insert(Tuple, NewValue, Index, Tuple) //编辑形式 Tuple[Index] := NewValue //代码形式 控制变量元组操作 [t,t] concatenation of tuples |t| number of elements t[i] selection of an element t[i:j] selection of a part of a tuple subset(t1,t2) selection from t1 by indices in t2 图形元组操作对应函数 [] gen_empty_obj () |t| count_obj (p, num) [t1,t2] concat_obj (p1, p2, q) t[i] select_obj (p, q, i+1) t[i:j] copy_obj (p, q, i+1, j-i+1) subset(t1,t2) select_obj (p, q, t2+1) 元组的数学运算,如:A * B,令 m = |A|, n = |B|; 若 m、n 不相等,且都大于 1,则错误;否则返回三种情况: m=n=1,返回一个值; m=n>1,返回一个包含 m 个数的元组,值为两元组各对于值的操作结果; m>1,n=1, 返回一个包含 m 个数的元组, 值为第二个数与第一元组各值的操作结果; Halcon 的数学运算 算术运算 a/a division a%a rest of the integer division a*a multiplication v+v addition and concatenation of strings a-a subtraction -a negation 位运算 lsh(i,i) rsh(i,i) i band i i bor i i bxor i bnot i left shift right shift bit-wise and bit-wise or bit-wise xor bit-wise complement
字符串操作
v$s v+v strchr(s,s) strstr(s,s) strrchr(s,s) strrstr(s,s) strlen(s) s{i} s{i:i} split(s,s)
conversion to string //字符串的格式化,有很丰富的参数 concatenation of strings and addition search character in string search substring search character in string (reverse) search substring (reverse) length of string selection of one character selection of substring splitting to substrings less than greater than less or equal greater or equal equal not equal negation logical ’and’ logical ’or’ logical ’xor’ sine of a cosine of a tangent of a arc sine of a in the interval [-/2, / 2], a [-1, 1] arc cosine a in the interval [-/2, /2], a [-1, 1] arc tangent a in the interval [-/2, /2], a [-1, 1] arc tangent a/b in the interval [-, ] hyperbolic sine of a hyperbolic cosine of a hyperbolic tangent of a exponential function natural logarithm, a> 0 decade logarithm, a> 0 power a1 pow(2,a2)
Regions Efficient data structure (runlength encoding) Extensive set of operators Fastest morphology on the market 图形编码中,需要了解 row 和 run 两个术语;也是 Halcon Region 存储的方式 Extended Line Description (XLD) Subpixel accurate line and edge detection Generic point list based data structure Handling of contours, polygons, lines, parallels, etc. 此外,Halcon 支持的类型还包括图形元组、控制变量元组及句柄: 元组的概念,使得可以用一个变量传递数个对象,可以由重载后的函数来进行处理;图形元 组的下标从 1 开始,控制变量元组下标从 0 开始;句柄则可以用来描述窗体、文件等等,句 柄不能是常量。 5、Halcon 语言 输入控制参数可以是表达式,但图形参数、输出参数均应为变量; String 类型变量由单引号 ’ 括起来;此外还有一些特殊字符; Boolean 型变量包括 true ( = 1 )、 false ( = 0 ) ;不为零的整数将被认为 true;但绝大多数的 Halcon 函数接受字符串型的表达:’true’ ‘false’,而非逻辑型表达; 函数返回常量用于标识错误: H_MSG_TRUE no error 2 H_MSG_FALSE logical false 3 H_MSG_FAIL operator did not succeed 5 可以放在 try…catch…endtry 块中,也可以用 dev_error_var() 与 dev_set_check() 来捕获; 控制语句结构: (与一般语言略有不同,它们也有输入输出变量) if ... endif / if ... else ... endif / if ... elseif ... else ... endif for ... endfor
Halcon 学习笔记 1、Halcon 的自我描述 Program Logic Each program consists of a sequence of HALCON operators The program can be structured into procedures The sequence can be extended by using control operators like if, for, repeat, or while The results of the operators are passed via variables No implicit data passing is applied Input parameters of operators can be variables or expressions Output parameters are always variables HDevelop has no features to design a graphical user interface An HDevelop program is considered as a prototypic solution of the vision part of an application HDevelop is typically not used for the final application 由此可以看出,Halcon 的定位是一个类库,有着完整、快速实现函数,同时提供了 HDevelop 作为快速开发的图形化(IDE)界面;但是,Halcon 程序并不是一个完整的最终应用软件, 它没有用户界面,也不提供显示的数据(公用的数据格式) 。 Halcon 的初学者也应当从参考 Halcon 的程序入手,熟悉 Halcon 类库,也即 HDevelop-Based Programming;在此基础上,进入 OR Class-Oriented Programming。这也是 Halcon 推荐的开 发方式: The vision part is solved with HDevelop, and the application is developed with C++ or Visual Basic。 2、HDevelop 界面的学习 通过阅读 Halcon 的 PPT,学到了下面一些有用的信息: 文件——浏览示例,可以看到很多有用的例子; 程序窗体中,可以浏览与编辑 Procedues(过程) ,这个其实就是自定义函数咯~还 可以自己修改这些过程,并添加说明文档; F4——将函数语句注释掉;F3——激活; 本地过程(Local Procedue)与外部过程(Externel Procedue) 3、基本语法结构 Halcon 的语法结构 类似于 Pascal 与 Visual Basic,大部分的语句是 Halcon 提供的算子,此外也包含了少部分的 控制语句; 不允许单独声明变量; 提供自动的内存管理(初始化、析构及 OverWrite) ,但句柄则需要显示释放; C++(算子模式) 通过代码导出,以 C++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下, 全部函数声明为全局类型,数据类型只需要用 Hobject、HTuple 两类类型进行声明; C++(面向对象) 可以以面向对象的方式重写代码,也即利用类及类的成员函数; 在这种模式下,控制变量的类型仍未 HTuple,而图形数据可以由多种类型,如 HImage 等; 其他语言(略)