halcon间隙测量思路
halcon 四步相移法
halcon 四步相移法Halcon 四步相移法(Four-Step Phase-Shifting Method)是一种常用于光学相位测量和表面形貌分析的方法。
它基于干涉原理,通过改变输入光的相位来获得被测物体的相位信息,从而实现对物体形貌的测量和分析。
本文将以Halcon 四步相移法为主题,逐步解释该方法的原理和步骤,并探讨其在实际应用中的优势和应用领域。
第一步:原理介绍Halcon 四步相移法是一种使用干涉测量原理的相位测量方法。
干涉测量原理是通过将两束光线进行干涉,利用干涉光场的强度变化来获得被测物体的相位信息。
在Halcon 四步相移法中,通过改变输入光的相位,我们可以得到一系列互相差一个相位角的干涉图像。
通过对这些干涉图像进行综合分析和处理,可以得到被测物体的相位信息,从而实现对物体形貌的测量和分析。
第二步:步骤解析Halcon 四步相移法包含以下四个步骤:1. 步骤一:获取基准图像在这一步中,我们需要记录没有被测物体(或被测物体没有位移或变形)时的基准图像。
这个图像将被用作后续步骤中的参考图像,用于和其他相移图像进行比较和分析。
2. 步骤二:相位偏移在这一步中,我们需要调整输入光的相位,以获得一系列相移图像。
相位的调整可以通过改变光源的相位或使用相移元件(如全息片)来实现。
通常,我们需要获取至少三张相移图像,这样我们才能够计算出被测物体的相位信息。
3. 步骤三:相位计算在这一步中,我们使用相移图像序列来计算被测物体的相位信息。
根据相移量和相位偏移量的关系,我们可以通过简单的数学运算计算出物体的相位信息。
具体的计算公式根据实际应用的需求而有所变化,例如在表面形貌测量中,我们可以通过计算相移图像序列的频谱信息,来获得物体的相位信息。
4. 步骤四:相位重建在这一步中,我们使用得到的相位信息来重建被测物体的形貌。
具体的重建方法可以根据实际应用的需求而变化,例如在表面形貌测量中,我们可以使用相位解包算法来获得物体的三维形貌信息。
halcon测量
close_measure(MeasureHandle) 释放内存
1D 测量:创建对象: gen_measure_arc
Profile Line
ROI
Radius
AngleExtend
Annulus Radius
AngleStart CenterRow CenterCol
1D 测量: measure_projection
0
3
6
剖面
9
12
15
index
1D 测量: measure_thresh
为测量对象计算剖面灰度值 通过阈值提取剖面函数和插值的交点 参数:
Image:输入图像 MeasureHandle: 剖面测量句柄 Sigma: 剖面高斯平滑的色散 Threshold: 剖面函数点提取阈值 Select:选取点的位置 Row/ColumnThres: 提取点的坐标(sub-pixels) Distance: 两连续点的距离(sub-pixels)
-20.0
'negative'
Distance
边缘提取
一阶导数
1D 测量: measure_pairs
在1D剖面上提取插值边缘 边缘分组 参数:
Image: 输入图像 MeasureHandle: 剖面线测量句柄 Sigma:剖面高斯平滑的色散 Threshold:剖面上提取边缘的最小梯度幅值 Transition:边缘灰度值过渡类型 Row/ColumnEdgeFirst: 一组对边中第一条边的坐标 AmplitudeFirst:一组对边中第一条边的过渡幅值 Row/ColumnEdgeSecond:一组对边中第二条边的坐标 AmplitudeSecond:一组对边中第二条边的过渡幅值 IntraDistance: 一组对边两个边缘之间的距离(sub-pixels) InterDistance: 相邻边缘之间的距离(sub-pixels)
halcon中gen_measure_rectangle的测量原理
halcon中gen_measure_rectangle的测量原理
在Halcon中,gen_measure_rectangle是一个用于一维测量的算子,它产生测量对象的句柄,准备提取垂直于仿射矩形的直边。
其测量原理是基于图像处理和计算机视觉的技术。
具体来说,gen_measure_rectangle的工作流程可能包括以下步骤:
1. 采集图像:这可能涉及使用相机或扫描设备获取图像。
2. 生成矩形测量区域:通过使用gen_measure_rectangle算子,在图像中定义一个矩形区域,该区域将用于进行测量。
3. 边缘测量:在矩形区域中进行边缘检测,以识别和测量对象的边界。
这可能涉及使用诸如边缘检测算法的技术。
4. 可视化显示:最后,通过可视化技术,将测量结果显示在图像上。
这可能涉及将测量的边缘线或其它特征以某种方式标记在图像上。
至于具体的实现原理,可能涉及图像处理中的一些高级技术,例如边缘检测、特征提取、直线拟合等。
这些技术通常用于从图像中提取有用的信息,例如物体的边缘、形状等,以便进行进一步的分析和测量。
请注意,这只是一个大致的描述,实际的实现细节可能因具体的软件平台和硬件配置而有所不同。
如果您需要更详细的信息,建议参考Halcon的官方文档或相关教程。
halcon一维测量原理详解
halcon一维测量原理详解
Halcon是一种强大的机器视觉软件,用于图像处理和分析。
在Halcon中,一维测量是指利用图像处理技术对物体的一维尺寸进行测量和分析。
一维测量原理涉及到图像获取、预处理、特征提取和测量计算等多个方面。
首先,图像获取是一维测量的第一步。
在Halcon中,图像可以通过相机或者其他图像采集设备进行获取。
获取的图像需要保证清晰度和对比度足够,以便后续的处理和分析。
其次,预处理是一维测量的关键步骤之一。
在预处理阶段,图像可能需要进行灰度校正、滤波、边缘增强等操作,以减少噪声和突出目标的特征。
接着,特征提取是进行一维测量的重要步骤。
Halcon提供了丰富的特征提取工具,如边缘检测、轮廓提取等,以便从图像中提取出需要的特征信息,为后续的测量计算做准备。
最后,测量计算是一维测量的核心步骤。
在Halcon中,可以利用提取的特征信息进行测量计算,如长度、宽度、直径等一维尺寸
的测量。
Halcon提供了丰富的测量工具和算法,以满足不同场景下的测量需求。
总的来说,Halcon一维测量的原理涉及图像获取、预处理、特征提取和测量计算等多个环节,通过这些环节的有机组合,可以实现对物体一维尺寸的准确测量和分析。
希望这个回答能够帮助你更好地理解Halcon一维测量的原理。
基于Halcon的电连接器壳体零件孔径快速精密测量_许桢英
0 引言
高密度电连接器组件是航空航天、航海、军工、工 业、精密机械、信息乃至家用电器等众多领域的控制与 驱动系统中的重要基础元器件,其技术性能的高低直接 影响和制约了这些行业的发展水平。十二五期间航空、 海工、信息行业对高端机电组件技术水平的要求越来越 高,电连接器的尺寸检测必须达到100%达标。 目前大多数电连接器制造企业都采用人工检测或简 单工具测量的方法,需要耗费大量的人力和时间,且检测 精度容易受到人员差异的影响,很难保证高质量的产品。 机器视觉就是利用机器代替人眼做测量和判断 [1]。 视觉测量技术不但速度快、非接触、易于自动化,而且 精度高[2]。本文将视觉测量技术应用在电连接器壳体零 件的孔径测量中,提高了检测的效率,对促进行业的发 展具有十分积极的意义。
圆孔 孔1 孔2 孔3 孔4 孔5 孔6 孔7 孔8
若以万能工具显微镜的测量结果作为标准量, UPP3728-10型号零件测量结果平均误差为0.00058mm, UPP2020-06型号零件测量结果平均误差为0.01196mm, UPP3728-08f型号零件测量结果平均误差为0.01693mm, 总体视觉测量值平均误差在公差0.05mm之内,满足公差 允许范围,UPP3728-08f型号零件由于加工工艺,孔径边 缘存在毛刺,在提取边缘的过程中造成像素误差。整个 测量过程运行良好,测量时间1.2s,速度较快,能够实 现电连接器壳体零件孔径的快速精密测量。
2 2 Lx Lxx+2LxLyLxy+Ly Lyy=0 它在梯度方向的三阶方向导数符合条件:
2.2 壳体零件图像获取及区域特征提取 为了减少电连接器壳体零件金属材质的反光以及 获取高对比度的零件轮廓图,在使用背光源的方式下进 行图像的拍摄采集,采集后读取到的图像如图1所示。 为了获取所需要的零件特征,必须将背景和零件分离开 来,提取出感兴趣区域。图像阈值化分割是一种简单且 实用的图像分割方法 。通过设定不同的特征阈值,把 图像像素点分为若干类。设原始图像为f(x,y),分割后 图像为g(x,y),按一定的准则在f(x,y)找到阈值T,将图 像分割为两部分,分割后的图像表达式如下:
halcon测量
Line distance_pl distance_sl distance_lc distance_lr
Line Segment distance_ps distance_sl distance_ss distance_sc distance_sr
Contour distance_pc distance_lc distance_sc distance_cc distance_cc_min -
0
3
6
剖面
9
12
15
index
1D 测量: measure_thresh
为测量对象计算剖面灰度值 通过阈值提取剖面函数和插值的交点 参数:
Image:输入图像 MeasureHandle: 剖面测量句柄 Sigma: 剖面高斯平滑的色散 Threshold: 剖面函数点提取阈值 Select:选取点的位置 Row/ColumnThres: 提取点的坐标(sub-pixels) Distance: 两连续点的距离(sub-pixels)
1D 测量: measure_pairs
measure_pairs( Image, MeasureHandle,1.0,25.0,'all','all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, InterDistance, IntraDistance)
在 线
图像
灰度投影 和边缘检测
选择 & 分组 边缘
1D 测量
定位边缘ROI 直线和圆弧形状的ROI ROI 宽度可变,灰度投影 边缘选取和分组
halcon卡尺工具原理
halcon卡尺工具原理
Halcon卡尺工具是一种基于数字图像处理技术和计算机视觉理论的辅助工具,主要用于检测和测量二维图像中目标物体的尺寸、角度、位置等参数。
其原理主要包括以下几个步骤:
第一步,设置卡尺参数
在使用Halcon卡尺工具之前,需要针对具体的图像和目标物体,设置卡尺的相关参数,例如卡尺的长度、方向、宽度、灵敏度等。
其中,最重要的参数是卡尺的方向和长度。
卡尺方向应该与待测量的对
象边缘线段垂直,而卡尺长度应该略大于待测量对象的实际大小。
第二步,寻找卡尺起点
在确定了卡尺参数后,需要在图像中寻找卡尺的起点。
为此,Halcon卡尺工具可以通过多种方式来寻找卡尺起点,例如基于边缘检测、二值化、阈值化等算法。
一旦找到卡尺起点,Halcon卡尺工具就
可以开始进行测量。
第三步,测量目标物体
在卡尺起点确定之后,Halcon卡尺工具会沿着卡尺方向,不断拓展卡尺线段,直至检测到目标物体的边界线段。
在检测到目标物体边
界线段之后,Halcon卡尺工具就可以计算出该线段的长度、位置和方
向等参数。
第四步,输出结果
当Halcon卡尺工具完成测量之后,会将测量结果以文本或图像
的形式输出。
这些结果可以用于后续的图像处理分析、物体识别或机
器视觉检测等应用。
通过以上步骤,Halcon卡尺工具能够快速、准确地实现对二维图像中目标物体的测量和检测,为数字图像处理和计算机视觉技术的研
究和应用提供了有力支撑。
跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量
跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量* This example program demonstrates the basic usage of a measure object.* Here, the task is to determine the width of and the distance between the* pins of a switch.*本例程演示了如何使用测量工具测量开关的引脚宽度和间距* First, read in the image and initialize the program.**************************打开图像***********************************read_image (Image, 'bin_switch/bin_switch_1')get_image_size (Image, Width, Height)dev_close_window ()dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)set_display_font (WindowHandle, 14, 'mono', 'true', 'false')dev_display (Image)*显示图片如下* Define the rectangular ROI within which the edges will be detected* and create the measure.Row := 390Column := 380Phi := rad(-60)Length1 := 60Length2 := 10Interpolation := 'nearest_neighbor'*************************生成测量矩形ROI************************************** gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation,MeasureHandle)*测量矩形位置尺寸如下:* Determine all edge pairs that have a negative transition, i.e., edge pairs* that enclose dark regions.Sigma := 0.9Threshold := 12Transition := 'negative'Select := 'all'*************************************测量边缘对******************************* measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)** Visualize the resultsdev_display (Image)dev_set_draw ('margin')dev_set_color ('black')*********显示测量矩形ROI************************************************** gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)***显示测量的边缘对的尺寸,length1要用ROI的宽度*****************************p_disp_dimensions (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, IntraDistance, InterDistance, Phi, Length2, WindowHandle)*结果如下:close_measure (MeasureHandle)。
halcon边缘提取缺陷检测的思路
一、边缘提取1、设置ROI兴趣区域2、快速二值化,并连接相邻区域。
这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来3、提取最接近目标区域的轮廓.常用函数有boundary,gen_contour_region_xld4、根据自己的需求提取需要的初步轮廓5、将初步提取的初步轮廓进行膨胀操作6、将膨胀后的区域和原图进行减操作(在这步之前有可能需要对原图进行高斯滤波)。
这样就能得到只有边缘的真实图像7、用canny或其他算子(根据需要)提取亚像素轮廓,一般使用edges_sub_pix函数8、处理和计算得到真实的边缘XLD后你可能需要进一步处理得到你想要的线、弧等。
你可能用到的函数segment_contours_xld(分割)union_collinear_contours_xld(联合相邻或相同角度直线)select_contours_xld(提取想要的轮廓)union_cocircular_contours_xld(联合相同圆)等等得到轮廓后如果你不知道怎么处理后得到你想要的东西(线、弧、圆、角、矩形)你都可以将轮廓转化为点,然后用点集合来拟合任何你想要的东西。
二、BLOB分析检测(前面一篇有详细讲解,本骗只讲思路)1、应用ROI,可以使Blob分析加速。
2、匹配ROI区域或图像,详将GUIDEIIB以形状为基础的匹配。
3、校正图像<经常用来去除镜头畸变或把图像转换到参考点视角,如双目视觉时的图像校正>4、图像前处理5、引用分割参数6、分割图像7、区域处理8、特征提取9、把提取的结果转换到世界坐标中10、结果可视化。
三、赃物检测1、得到两个不同高斯标准差的高斯积卷2、对原始图像进行傅里叶变换'to_fre'3、用之前的积卷对图像做积卷滤波4、傅里叶反变换‘from_fre’。
Halcon基础知识总结(一文学会halcon基础操作,总结自超人视觉)
Halcon基础知识总结(⼀⽂学会halcon基础操作,总结⾃超⼈视觉)此⽂根据《超⼈视觉 halcon启蒙班》写成,结合图⽚和例程,直观简单地介绍halcon的最基本操作基础知识光学:⼏何光学,物理光学数学:导数为主的⾼等数学,矩阵论五种需求:1.识别定位2.符号识别:⼀⼆维码,OCR3.测量需求4.缺陷需求(最常见,难度最⼤)5.⼿眼标定和抓取(结合运动控制)图像处理⼀般思路1.采集2.预处理拉开灰度⼏何变换去噪:中值滤波,均值滤波,⾼斯滤波抠图3.图像分割⼆值化形态学特征选择ps:Halcon⾥区域和图像是不同概念4.识别显⽰5.通信三⼤数据类型图像,区域,XLD灰度直⽅图勾选“阈值”将灰度值在”绿线和红线之间”的以选定颜⾊进⾏填充将把圈定的阈值范围内的直⽅图均匀拉伸释放到整个直⽅图轴上数组语法* Simple tuple operationsTuple1 := [1,2,3,4,5]Number := |Tuple1|SingleElement := Tuple1[3]Part := Tuple1[1:3]Copy := Tuple1[0:|Tuple1| - 1]运⾏结果读取图⽚的四种⽅法1. ⽂件 -> 读取图⽚2. Image Acquisition -> ⾃动检测接⼝(刷新设备)-> Direct show,从摄像头直接读图3. Image Acquisition -> 选择⽂件,从图像⽂件中读取4. Image Acquisition -> 选择路径,结合正则表达式读取路径下的图⽚PS:⽤Image Acquisition读取时记得点击代码⽣成摄像头抓取模式:在可视化 -> 更新窗⼝中调整同步采集:实时抓取,⼀直抓取异步采集:只等图⽚处理完后,grab_image才开始抓取PS:更多信息包括双相机采集,可以在案例 -> ⽅法 -> 图像采集设备中学习ROI(感兴趣区域)特征检测PS:⼆值化之后的区域虽然不连通,但仍然认为是⼀个区域。
跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距
跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距* This example program demonstrates the basic usage of a circular measure object.* Here, the task is to determine the width of the cogs.*首先读取图像,获取图像的宽度和高度* First, read in the image and initialize the program.read_image (Image, 'rings_and_nuts')dev_close_window ()dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)set_display_font (WindowHandle, 14, 'mono', 'true', 'false')get_image_size (Image, Width, Height)*读到的图像如下:* Extract the rings.*******************自动阈值分割,此时为一个区域,如图**************************** bin_threshold (Image, Region)connection (Region, ConnectedRegions)***************************填充区域内的孔洞,效果如图************************** fill_up (ConnectedRegions, RegionFillUp)*******************计算区域的紧性,机器视觉算法与应用第168页***************** compactness (RegionFillUp, Compactness)************通过紧性特征进行区域筛选,在1.5到2.5之间的为需要测量的圆环******** for i := 0 to |Compactness|-1 by 1if (Compactness[i] > 1.5 and Compactness[i] < 2.5)select_obj (RegionFillUp, ObjectSelected, i+1)** Determine the size and position of the rings.**************计算选择区域的最小外接圆和最大内接圆,存储圆心和半径************** *两个半径的均值作为测量圆弧半径,AnnulusRadius 为测量圆弧宽度******************* smallest_circle (ObjectSelected, Row, Column, RadiusMax)inner_circle (ObjectSelected, CenterRow, CenterCol, RadiusMin)Radius := (RadiusMax+RadiusMin)/2.0AnnulusRadius := (RadiusMax-RadiusMin)/4.0** Determine the position between two cogs.* This position is then used as the start angle for the circular ROI.********多边形近似逼近区域,存储多边形角点的坐标值,机器视觉算法与应用第252页get_region_polygon (ObjectSelected, AnnulusRadius, RowsBorder, ColumnsBorder)********计算每个角点到最大内接圆圆心的距离,然后进行排序********************* SqrDistanceBorder := (RowsBorder-CenterRow)*(RowsBorder-CenterRow) + (ColumnsBorder-CenterCol)*(ColumnsBorder-CenterCol)****************************************从小到大排序*************************** tuple_sort_index (SqrDistanceBorder, Indices)****************计算直线的角度,圆心和到圆心最近的多边形角点所确定的直线******** ********************************将该角度作为测量圆弧的起始角度***************** line_orientation (CenterRow, CenterCol, RowsBorder[Indices[0]], ColumnsBorder[Indices[0]], AngleStart)*************我认为检测圆开始角度直接设为0度也可以*************************** * AngleStart := rad(0)AngleExtent := rad(360)* Create the measure for a circular ROI.Interpolation := 'bilinear'**********************生成测量圆弧,为完整圆环(360度)************************* gen_measure_arc (CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation, MeasureHandle)** Determine all edge pairs that have a negative transition, i.e., edge pairs* that enclose dark regions.* Note that the output parameters IntraDistance and InterDistance are given as arc lengths.Sigma := 1.0Threshold := 30Transition := 'negative'Select := 'all'********进行边缘对测量,RowEdgeFirst, ColumnEdgeFirst,RowEdgeSecond, ********ColumnEdgeSecond为检测圆弧检测到的边界的中心点的坐标,IntraDistance, ********InterDistance分别为边缘对间的距离和边缘对的弧线距离********************* ********如有疑问,请咨询qiuqiu:1613985351****************************** measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)** Determine the number of cogs.NumCogs := |RowEdgeFirst|** Determine the linear distance between the two edges of each edge pair ('Linear cog size')* as well as the angular distance of the edge pairs ('Angular cog size').**************************计算边缘对的直线距离和弧度*************************** distance_pp (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, LinearDistance)AngularDistance := deg(IntraDistance/Radius)Visualize the determined edges.******************将边缘对的起始终止点画出,并显示测量结果**********************gen_empty_obj (Crosses)for i := 0 to |RowEdgeFirst|-1 by 1gen_cross_contour_xld (Cross, RowEdgeFirst[i], ColumnEdgeFirst[i], AnnulusRadius*2.0, atan2(RowEdgeFirst[i]-CenterRow,ColumnEdgeFirst[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)gen_cross_contour_xld (Cross, RowEdgeSecond[i], ColumnEdgeSecond[i], AnnulusRadius*2.0, atan2(RowEdgeSecond[i]-CenterRow,ColumnEdgeSecond[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)endfordev_display (Image)dev_set_line_width (4)dev_set_color ('black')dev_display (Crosses)dev_set_line_width (1)dev_set_color ('white')dev_display (Crosses)** Display the measured size of the cogs.disp_message (WindowHandle, 'Number of cogs: '+|RowEdgeFirst|+' ', 'window', 260, 10, 'black', 'true')disp_message (WindowHandle, 'Mean cog size: ', 'window', 286, 10, 'black', 'true')disp_message (WindowHandle, '- Arc length: '+mean(IntraDistance)$'.2f'+' +/- '+deviation(IntraDistance)$'.2f'+' pixel', 'window', 310, 10, 'black', 'true')disp_message (WindowHandle, '- Linear: '+mean(LinearDistance)$'.2f'+' +/- '+deviation(LinearDistance)$'.2f'+' pixel', 'window', 334, 10, 'black', 'true')disp_message (WindowHandle, '- Angular: '+mean(AngularDistance)$'.2f'+' +/- '+deviation(AngularDistance)$'.2f'+' deg ', 'window', 358, 10, 'black', 'true')** Close the measureclose_measure (MeasureHandle)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif***************************for循环,测量其他圆环******************************** endfor。
halcon卡尺测量
halcon卡尺测量Code直线卡尺* 获取图像及图像尺⼨dev_close_window ()read_image (Image, 'fabrik')get_image_size (Image, Width, Height)dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)dev_set_line_width (1)dev_display (Image)* 标记测量位置draw_line (WindowHandle, Row1, Column1, Row2, Column2)LineParams := [Row1, Column1, Row2, Column2]* 创建测量句柄create_metrology_model (MetrologyHandle)* 添加测量对象set_metrology_model_image_size (MetrologyHandle, Width, Height)add_metrology_object_generic (MetrologyHandle, 'line', LineParams, 20, 3, 1, 30, [], [], Index)* 设置测量对象的参数* set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'negative')* set_metrology_object_param (MetrologyHandle, 'all', 'num_measures',10)* set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 1)* set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 1)* set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 20)* set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 5)* set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold',30)* set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')* set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')* set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)* 执⾏测量,获取边缘点集dev_set_color ('yellow')apply_metrology_model (Image, MetrologyHandle)get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)dev_set_color ('red') gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)* 获取最终测量数据和轮廓线dev_set_color ('green')dev_set_line_width (2)get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)* 释放测量句柄clear_metrology_model (MetrologyHandle)Explanationset_metrology_model_image_size( : : MetrologyHandle, Width, Height : )使⽤ set_metrology_model_image_size 该算⼦设置测量区域,⽽且该算⼦必须在 add_metrology_object_generic 这类添加测量对象的算⼦之前调⽤,否则在使⽤ apply_metrology_model 执⾏测量时会重新计算测量区域,降低效率。
跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距
跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距* This example program demonstrates the basic usage of a circular measure object.* Here, the task is to determine the width of the cogs.*首先读取图像,获取图像的宽度和高度* First, read in the image and initialize the program.read_image (Image, 'rings_and_nuts')dev_close_window ()dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)set_display_font (WindowHandle, 14, 'mono', 'true', 'false')get_image_size (Image, Width, Height)*读到的图像如下:* Extract the rings.*******************自动阈值分割,此时为一个区域,如图**************************** bin_threshold (Image, Region)connection (Region, ConnectedRegions)***************************填充区域内的孔洞,效果如图************************** fill_up (ConnectedRegions, RegionFillUp)*******************计算区域的紧性,机器视觉算法与应用第168页***************** compactness (RegionFillUp, Compactness)************通过紧性特征进行区域筛选,在1.5到2.5之间的为需要测量的圆环******** for i := 0 to |Compactness|-1 by 1if (Compactness[i] > 1.5 and Compactness[i] < 2.5)select_obj (RegionFillUp, ObjectSelected, i+1)** Determine the size and position of the rings.**************计算选择区域的最小外接圆和最大内接圆,存储圆心和半径************** *两个半径的均值作为测量圆弧半径,AnnulusRadius 为测量圆弧宽度******************* smallest_circle (ObjectSelected, Row, Column, RadiusMax)inner_circle (ObjectSelected, CenterRow, CenterCol, RadiusMin)Radius := (RadiusMax+RadiusMin)/2.0AnnulusRadius := (RadiusMax-RadiusMin)/4.0** Determine the position between two cogs.* This position is then used as the start angle for the circular ROI.********多边形近似逼近区域,存储多边形角点的坐标值,机器视觉算法与应用第252页get_region_polygon (ObjectSelected, AnnulusRadius, RowsBorder, ColumnsBorder)********计算每个角点到最大内接圆圆心的距离,然后进行排序********************* SqrDistanceBorder := (RowsBorder-CenterRow)*(RowsBorder-CenterRow) + (ColumnsBorder-CenterCol)*(ColumnsBorder-CenterCol)****************************************从小到大排序*************************** tuple_sort_index (SqrDistanceBorder, Indices)****************计算直线的角度,圆心和到圆心最近的多边形角点所确定的直线******** ********************************将该角度作为测量圆弧的起始角度***************** line_orientation (CenterRow, CenterCol, RowsBorder[Indices[0]], ColumnsBorder[Indices[0]], AngleStart)*************我认为检测圆开始角度直接设为0度也可以*************************** * AngleStart := rad(0)AngleExtent := rad(360)* Create the measure for a circular ROI.Interpolation := 'bilinear'**********************生成测量圆弧,为完整圆环(360度)************************* gen_measure_arc (CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation, MeasureHandle)** Determine all edge pairs that have a negative transition, i.e., edge pairs* that enclose dark regions.* Note that the output parameters IntraDistance and InterDistance are given as arc lengths.Sigma := 1.0Threshold := 30Transition := 'negative'Select := 'all'********进行边缘对测量,RowEdgeFirst, ColumnEdgeFirst,RowEdgeSecond, ********ColumnEdgeSecond为检测圆弧检测到的边界的中心点的坐标,IntraDistance, ********InterDistance分别为边缘对间的距离和边缘对的弧线距离********************* ********如有疑问,请咨询qiuqiu:1613985351****************************** measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)** Determine the number of cogs.NumCogs := |RowEdgeFirst|** Determine the linear distance between the two edges of each edge pair ('Linear cog size')* as well as the angular distance of the edge pairs ('Angular cog size').**************************计算边缘对的直线距离和弧度*************************** distance_pp (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, LinearDistance)AngularDistance := deg(IntraDistance/Radius)Visualize the determined edges.******************将边缘对的起始终止点画出,并显示测量结果**********************gen_empty_obj (Crosses)for i := 0 to |RowEdgeFirst|-1 by 1gen_cross_contour_xld (Cross, RowEdgeFirst[i], ColumnEdgeFirst[i], AnnulusRadius*2.0, atan2(RowEdgeFirst[i]-CenterRow,ColumnEdgeFirst[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)gen_cross_contour_xld (Cross, RowEdgeSecond[i], ColumnEdgeSecond[i], AnnulusRadius*2.0, atan2(RowEdgeSecond[i]-CenterRow,ColumnEdgeSecond[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)endfordev_display (Image)dev_set_line_width (4)dev_set_color ('black')dev_display (Crosses)dev_set_line_width (1)dev_set_color ('white')dev_display (Crosses)** Display the measured size of the cogs.disp_message (WindowHandle, 'Number of cogs: '+|RowEdgeFirst|+' ', 'window', 260, 10, 'black', 'true')disp_message (WindowHandle, 'Mean cog size: ', 'window', 286, 10, 'black', 'true')disp_message (WindowHandle, '- Arc length: '+mean(IntraDistance)$'.2f'+' +/- '+deviation(IntraDistance)$'.2f'+' pixel', 'window', 310, 10, 'black', 'true')disp_message (WindowHandle, '- Linear: '+mean(LinearDistance)$'.2f'+' +/- '+deviation(LinearDistance)$'.2f'+' pixel', 'window', 334, 10, 'black', 'true')disp_message (WindowHandle, '- Angular: '+mean(AngularDistance)$'.2f'+' +/- '+deviation(AngularDistance)$'.2f'+' deg ', 'window', 358, 10, 'black', 'true')** Close the measureclose_measure (MeasureHandle)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif***************************for循环,测量其他圆环******************************** endfor。
HALCON编程及工程应用 第9章 HALCON测量
fuzzy_measure_pairs相同,但其可以使用参数Pairing提取彼此相交或者包含 的边缘对。 ➢ reset_fuzzy_measure:重置一个模糊函数
HALCON编程基础与工程应用
9.2HALCON一维测量
模糊测量的主要步骤为:
(1)使用算子create_funct_1d_pairs创建模糊函数; (2)使用算子set_fuzzy_measure或set_fuzzy_measure_norm_pair为模糊集指定模糊隶 属函数。注意:可以重复调用算子定义多个模糊集,但是不能对同一模糊集指定多个 模糊隶属函数,指定第二个模糊函数意味着放弃第一个定义的模糊函数并将其替换为 第二个模糊函数。 之前为模糊集指定的模糊函数可以通过reset_fuzzy_measure删除。 (3)使用算子fuzzy_measure_pos、fuzzy_measure_pairs或fuzzy_measure_pairing提取 模糊测量的边缘对。
HALCON编程基础与工程应用
9.2HALCON一维测量
模糊测量:
模糊测量是对标准测量的一种扩展,并不是意味着测量是“模糊的”,而是用模糊隶属函 数来控制边缘的选择。所谓的模糊隶属函数,就是将边缘的特征值转化为隶属度值,基于这些 隶属值做出是否选择边缘的决定,即当隶属度值大于你设定的模糊阈值(Fuzzy Thresh)时,边 缘就会被选中,反之则反。举个简单的例子方便理解:比如在测量开关引脚之间的宽度和距离 时,引脚可能会有反射(左图),直接用一维测量会产生错误的结果(中图),这时将“大头 针的宽度大约为9像素宽”这个信息转化为模糊隶属函数。比如对于预期的宽度9像素,对应的 隶属度值为1;对于与预期的大小相差3个像素以上,则隶属度值为0,中间的值采用线性插值, 即宽度为da’yu8.像素的隶属度值就为0.67。当你设置的阈值为0.5时,那宽度为7.5-10.5像素之 间的边缘对才会被选中。通过这样的模糊测量则可以正确测量引脚的宽度(右图)。
刀具磨损测量中Halcon软件的标定方法
要环节,刀具的运行状态和质量直接决定着切 削加工的精度和效率 ,在机器视觉测量刀具磨 损量的过程中 ,相机标定的是否准确会直接影 响到测量精度和误差 。因为相机镜头都有一定 的畸变 ,采集的 图像会扭 曲变形,影响 图像处 理并导致结 果不准确 ,从而给带来一 定误差 , 为了把 图像变换到没有 畸变 的理想状态 ,就 需 要事先对相机进行必要 的标定 。对相机进行标 定 的目的 是找 出确 定相机拍摄 的刀具 图像在 整 幅 图像 中的位置 以及 图像 中各个像素 点之 间的 距 离 以 及 相互 关 系 , 因 而就 有 必要 建 立相 机 成 像 的几何模型 ,相机标 定就是 求解相机 内外参
觉 测 量 中 的 必 要 环 节 本 文 采 用 H a 1 c o n软 件 中 的 标 定助 手 实 现 对 C D D相 机 的 标 定 ,根 据 标 定理 论 和 图像 成像 原理 逐 步求 出 了相 机 的 内 外 参 数 , 标 定 结 果快 速 准 确 , 得到 了测 量 刀具磨 损 所需 的各 个 相 机参数 。
数 的过 程 。
四次坐标转换 :世界坐标系到摄像机坐标 系、 从摄像机 坐标 系到图像坐标系 、从真实成像平
面坐标到 理想坐标及理想坐标转换到 图像坐标
系。
3 结 论
本 文提 出了对 相机 进 行标定 详细 有 效的 方法,通过机器视觉中刀具 磨损 图像的深 入研 究,并经实验分析用检测 刀具磨损状态的精确 度较 高 ,重 复精 度 在 0 . 0 0 8 mm 以 内,方 差小 于0 . 0 2 。该标 定方 法能 够充 分发挥 H a l c o n软 件高精度快速测量 的优 势,可靠性高, 易于实 现,能够用于刀具磨损的高精度 复杂的测 量。
halcon双目测距原理
halcon双目测距原理如何使用"net use"命令在Windows中映射网络驱动器在Windows操作系统中,"net use"命令可以用来映射网络驱动器,使得用户可以通过本地计算机访问远程文件夹或网络共享资源。
本文将逐步介绍"net use"命令的用法,并提供一些示例操作。
第一步:打开命令提示符要使用"net use"命令,首先需要打开命令提示符。
在Windows操作系统中,可以通过以下方式打开命令提示符:1. 在任务栏的搜索框中输入"cmd",然后点击出现的"命令提示符"应用程序图标;2. 按下Win + R键,然后在"运行"对话框中输入"cmd",最后点击"确定"按钮。
第二步:查看"net use"命令的语法在命令提示符中输入"net use /?"命令可以查看"net use"命令的详细使用方式和参数。
net use [<device name> *] [] [/persistent:{YES NO}]net use [<device name> *][{\\<system>[\sharename[\volume] [>] [<device name>: [{/d /delete} [{/y /yes}]]]注意:中括号"<>"中的内容表示可选项,竖线" "表示可选项之间的选择。
第三步:映射网络驱动器使用"net use"命令可以将远程网络共享资源映射为本地驱动器。
下面是一个示例:net use X: \\server\share以上命令将把远程服务器"server"上的共享资源"share"映射到本地计算机的X驱动器。
opencv和halcon尺寸测量原理
尺寸测量是图像处理中一个非常重要的应用领域。
在工业生产和质量检测过程中,经常需要对产品的尺寸进行精确测量,以确保产品质量和生产效率。
在图像处理软件中,opencv和halcon是两个常用的工具库,它们提供了丰富的功能和算法来实现尺寸测量。
本文将对opencv和halcon中尺寸测量的原理进行介绍和比较。
一、opencv尺寸测量原理1.1 图像预处理在进行尺寸测量之前,首先需要对图像进行预处理,以增强图像的对比度和清晰度。
opencv提供了丰富的图像处理算法,如灰度化、边缘检测、直方图均衡化等,可以帮助我们处理图像,为后续的尺寸测量做好准备。
1.2 边缘检测在进行尺寸测量时,通常需要先检测出物体的边缘,以便精确测量其尺寸。
opencv中提供了多种边缘检测算法,如Canny边缘检测、Sobel算子等,可以帮助我们快速准确地检测出物体的边缘。
1.3 尺寸测量算法opencv中提供了多种尺寸测量算法,如霍夫变换、轮廓检测等。
这些算法可以帮助我们在图像中检测出物体的轮廓,并进行精确的尺寸测量。
通过这些算法,我们可以获取到物体的长度、宽度、周长等尺寸信息。
1.4 结果显示在完成尺寸测量之后,通常需要将结果显示出来,以便用户查看和分析。
opencv提供了丰富的图形界面功能,可以帮助我们将尺寸测量的结果直观地呈现出来,方便用户进行后续处理和分析。
二、halcon尺寸测量原理2.1 图像预处理和opencv类似,halcon也需要对图像进行预处理,以增强图像的对比度和清晰度。
halcon提供了丰富的图像处理算法,如灰度转换、滤波、形态学运算等,可以帮助我们处理图像,为尺寸测量做好准备。
2.2 边缘检测halcon中同样提供了多种边缘检测算法,如sobel过滤器、拉普拉斯过滤器等。
这些算法可以帮助我们快速准确地检测出物体的边缘,为后续的尺寸测量提供支持。
2.3 尺寸测量算法halcon中也提供了多种尺寸测量算法,如FindShapeModel、MeasurePos和Distance_Ncc等。
halcon 直线的col间距
halcon 直线的col间距标题:Halcon 直线的col 间距:探索与优化引言:Halcon 是一种广泛应用于工业视觉的软件,具有强大的图像处理和分析功能。
其中,直线的col 间距是指直线上相邻两列之间的间隔距离。
在某些应用中,准确计算和优化直线的col 间距非常重要。
本文将深入探讨Halcon 直线的col 间距,从理论到实践,一步一步回答关于这一主题的问题。
目录:1. 什么是直线的col 间距?2. 如何计算直线的col 间距?3. 如何优化直线的col 间距?3.1 参数调整3.2 图像处理技术3.3 其他优化方法4. 实例应用:直线的col 间距在工业视觉中的应用5. 结论第一部分:什么是直线的col 间距?直线的col 间距是指直线上相邻两列之间的间隔距离,通常以像素为单位表示。
在数字图像处理中,为了准确地描述和分析图像中的直线结构,col 间距是一个关键参数。
第二部分:如何计算直线的col 间距?计算直线的col 间距是通过从图像中拟合直线,并计算相邻两个点之间的距离来实现的。
Halcon 提供了丰富的直线拟合算法,包括最小二乘法、Hough 变换等。
通过这些算法,可以得到直线的斜率和截距,进而计算col 间距。
第三部分:如何优化直线的col 间距?3.1 参数调整:直线拟合算法中的参数对于col 间距的准确计算非常重要。
根据实际场景的需求,可以对参数进行调整,如阈值、最小线段长度等,以获得更准确的col 间距结果。
3.2 图像处理技术:在求解直线col 间距的过程中,可以采用一些图像处理技术来提高结果的准确性。
比如,可以进行图像增强、去噪等预处理操作,提高直线的检测效果。
3.3 其他优化方法:除了参数调整和图像处理技术,还可以尝试其他优化方法。
例如,使用特定的几何模型、颜色约束等进行约束和验证,以提高直线col 间距的计算结果。
第四部分:实例应用:直线col 间距在工业视觉中的应用直线col 间距在工业视觉领域有着广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
halcon间隙测量思路
Halcon间隙测量思路
在机器视觉领域中,间隙测量是一个常见的任务,用于测量物体之间的间隙大小。
Halcon是一款常用的机器视觉软件,提供了多种方法和工具来进行间隙测量。
本文将介绍一种基于Halcon的间隙测量思路。
一、图像预处理
在进行间隙测量之前,首先需要对图像进行预处理,以提高测量的准确性。
常用的预处理方法包括图像平滑、滤波和边缘增强等。
通过这些预处理步骤,可以减少图像中的噪声和干扰,使得后续的测量更加可靠。
二、边缘检测
间隙测量通常是基于物体的边缘进行的。
在Halcon中,可以使用边缘检测算法来提取物体的边缘信息。
常用的边缘检测算法有Sobel算子、Canny算子等。
通过对图像进行边缘检测,可以得到物体的边缘轮廓。
三、边缘匹配
在得到物体的边缘轮廓之后,需要对边缘进行匹配,以确定物体之间的间隙位置。
Halcon提供了多种边缘匹配算法,如形状匹配、模板匹配等。
通过选择合适的匹配算法,可以实现对边缘的精确匹配。
四、间隙测量
通过边缘匹配,我们可以得到物体之间的边缘位置信息。
根据边缘的位置,可以计算出物体之间的间隙大小。
在Halcon中,可以使用测量工具来进行间隙的测量。
测量工具提供了多种测量方法,如距离测量、角度测量等。
根据实际情况,选择合适的测量方法进行间隙测量。
五、结果分析
在完成间隙测量之后,需要对结果进行分析和判断。
根据测量结果,可以判断物体之间的间隙是否符合要求。
如果间隙大小超出了预期范围,可以进行相应的调整和控制。
基于Halcon的间隙测量思路主要包括图像预处理、边缘检测、边缘匹配、间隙测量和结果分析等步骤。
通过这些步骤的组合,可以实现对物体间隙的准确测量。
在实际应用中,还可以根据具体的需求进行调整和优化,以达到更好的测量效果。
Halcon提供了丰富的功能和工具,可以实现对间隙的准确测量。
通过合理的算法选择和参数设置,结合图像预处理和结果分析,可以得到准确可靠的间隙测量结果,为机器视觉应用提供了强大的支持。