halcon学习笔记——实例篇 长度和角度测量+
halcon圆柱角点展平案例

halcon圆柱角点展平案例Halcon圆柱角点展平是一种常用的图像处理技术,用于将圆柱形状的物体的角点展平以便于后续处理。
下面是关于Halcon圆柱角点展平的一些案例。
1. 圆柱表面上的角点检测:Halcon可以使用边缘检测和角点检测算法来检测圆柱表面上的角点。
通过对图像进行边缘检测,可以得到圆柱的边缘信息,然后使用角点检测算法来检测圆柱表面上的角点。
2. 圆柱角点的定位:在得到圆柱表面上的角点后,Halcon可以使用图像处理算法来定位这些角点的位置。
通过对图像进行角点定位,可以得到角点的坐标信息,从而可以对圆柱进行进一步处理。
3. 圆柱角点的展平:Halcon可以使用圆柱角点展平算法将圆柱表面上的角点展平。
通过将圆柱表面上的角点进行展平处理,可以使得角点的位置更加准确,从而可以提高后续处理的精度。
4. 圆柱角点的特征提取:在展平圆柱角点后,Halcon可以使用特征提取算法来提取圆柱角点的特征。
通过对展平后的角点进行特征提取,可以得到角点的形状、大小等特征信息,从而可以对圆柱进行更加精细的处理。
5. 圆柱角点的匹配:在提取圆柱角点的特征后,Halcon可以使用特征匹配算法来匹配不同圆柱角点之间的关系。
通过对不同圆柱角点之间的特征进行匹配,可以得到圆柱的整体形状和位置信息,从而可以进行更加准确的定位和识别。
6. 圆柱角点的测量:在匹配圆柱角点后,Halcon可以使用测量算法来测量圆柱的各个参数。
通过对圆柱角点之间的距离、角度等进行测量,可以得到圆柱的直径、高度等参数信息,从而可以对圆柱进行更加精确的测量。
7. 圆柱角点的校正:在测量圆柱的参数后,Halcon可以使用校正算法来校正圆柱的形状。
通过对圆柱的角点进行校正处理,可以使得圆柱的形状更加准确,从而可以提高后续处理的精度。
8. 圆柱角点的分类:在校正圆柱的形状后,Halcon可以使用分类算法来对圆柱角点进行分类。
通过对圆柱角点的形状、大小等进行分类,可以得到不同类型的圆柱角点,从而可以对圆柱进行更加细致的分析和处理。
halcon圆柱角点展平案例

halcon圆柱角点展平案例Halcon圆柱角点展平是一种用于处理图像中圆柱体表面的技术。
它可以通过识别圆柱体的角点,并将其展平为一个二维图像,从而方便后续的图像处理和分析。
下面将列举一些关于Halcon圆柱角点展平的案例,以帮助读者更好地理解这一技术的应用。
1. 检测圆柱瓶口位置在生产线上,经常需要对圆柱瓶的瓶口进行检测。
利用Halcon圆柱角点展平技术,可以准确地检测到瓶口的位置和形状,从而实现自动化的生产线控制。
2. 检测圆柱体表面缺陷圆柱体表面的缺陷对于某些行业来说非常重要,例如电子元器件的制造。
利用Halcon圆柱角点展平技术,可以对圆柱体表面的缺陷进行高精度的检测和分析,提高产品的质量和可靠性。
3. 圆柱体表面贴标检测在包装行业中,常常需要对圆柱体上的标签进行检测和识别。
利用Halcon圆柱角点展平技术,可以准确地检测到标签的位置和形状,从而实现自动化的包装生产线。
4. 圆柱体的三维重建通过多个角度拍摄圆柱体的图像,结合Halcon圆柱角点展平技术,可以实现对圆柱体的三维重建。
这对于一些需要对圆柱体进行形状分析和测量的应用非常有用。
5. 检测圆柱体的偏斜角度在一些工业应用中,需要对圆柱体的偏斜角度进行检测和测量。
利用Halcon圆柱角点展平技术,可以准确地测量圆柱体的偏斜角度,从而实现对产品的质量控制。
6. 圆柱体的表面缺陷分类在某些应用中,需要对圆柱体的表面缺陷进行分类。
利用Halcon圆柱角点展平技术,可以将圆柱体的表面缺陷分为不同的类别,从而实现对产品质量的评估和控制。
7. 圆柱体表面的纹理分析圆柱体表面的纹理对于某些应用来说非常重要,例如纺织品的质量检测。
利用Halcon圆柱角点展平技术,可以对圆柱体表面的纹理进行分析和识别,从而实现对产品质量的控制。
8. 圆柱体的形状匹配在一些应用中,需要将一个圆柱体与一个标准模板进行形状匹配。
利用Halcon圆柱角点展平技术,可以实现对圆柱体形状的高精度匹配,从而实现对产品的质量控制。
halcon相机标定和测量示例

Halcon单相机标定和测量示例相机标定有很多方式:九点标定法、棋盘格标定法、圆形阵列标定法;本次采用圆形阵列标定法。
1Halcon相机标定1.1标定板描述文件编制此次相机标定采用的是网购的标定板(直接在万能的某宝搜halcon标定板),如图1。
采购的时候卖家会提供标定板的相应参数,如图2。
图1标定板图 2 标定板参数用halcon标定助手标定的时候需要用到标定板的描述文件,此文件可以用gen_caltab算子自己编制。
如下为函数说明:gen_caltab( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 函数说明:创建一个标定文件和相应的脚本文件。
函数参数:Xnum:输入X方向标记(圆点)的数量,Xnum>1;Ynum:输入Y方向标记(圆点)的数量,Ynum>1;MarkDist:标记圆圆心间距离,单位“m”;(我看过一个资料翻译为标记点大小,差点被坑死)DiameterRatio:两标记点距离和标记直径的比值,默认:0.5。
0<DiameterRatio<1.0;CalPlateDescr:输入要保存的标定文件(此文件保存路径在算子窗口可更改),默认值: 'caltab.descr',参考: 'caltab.descr', 'caltab_100mm.descr', 'caltab_10mm.descr', 'caltab_200mm.descr', 'caltab_30mm.descr';CalPlatePSFile :标定板图像文件的文件路径(此文件保存路径在算子窗口可更改),默认: 'caltab.ps',后缀:ps。
此算子“XNum, YNum, MarkDist, DiameterRatio”这四个参数根据图2所示的标定板参数设置。
halcon measure_pos参数说明

halcon measure_pos参数说明全文共四篇示例,供读者参考第一篇示例:Halcon是一款强大的机器视觉软件工具,广泛应用于工业自动化、检测、识别等领域。
其中measure_pos是Halcon中一个重要的参数,用于位置测量和定位。
本文将详细介绍measure_pos的参数说明和用法,帮助读者更好地理解和应用该参数。
1. 参数说明measure_pos是Halcon中用于位置测量的函数,主要用于检测图像中的边缘、线条或者特征点,并得到其位置信息。
其效果类似于寻找图像中的标志物,帮助机器视觉系统完成位置识别和测量任务。
该函数的基本语法为:measure_pos(Image, RowEdge, ColumnEdge, ROI, Row, Column)Image表示输入的图像,RowEdge和ColumnEdge表示边缘的坐标,ROI表示感兴趣区域,Row和Column表示目标位置的坐标。
2. 参数用法measure_pos函数主要用于以下几个方面:(1) 边缘检测:通过measure_pos函数可以检测图像中的边缘,找到边缘的位置信息。
这对于工业检测、定位等任务非常有用。
(2) 线条检测:除了边缘检测,measure_pos还可以用于检测图像中的线条或者特定形状的目标。
通过调整参数,可以实现不同精度和角度的线条检测。
(3) 特征点定位:在某些场景下,需要定位图像中的特征点或者关键点,比如机器人视觉导航、医学影像识别等。
通过measure_pos函数可以精确定位这些特征点的位置。
3. 参数调节measure_pos函数有多个参数可以调节,以适应不同的应用场景和需求:(1) ROI参数:可以设置感兴趣区域,限定检测的范围,提高检测速度和准确性。
(2) 参数设置:可以根据具体情况设置边缘检测的阈值、灰度差异等参数,以获得最佳的检测结果。
(3) 精度和速度:根据实际需求可以调节参数,平衡检测的精度和速度,使检测适应不同的应用场景。
机器视觉之halcon入门(8)-一文弄懂如何用相机测量物体长度

机器视觉之halcon入门(8)-一文弄懂如何用相机测量物体长度第三节测量3.3.1 简单的啰嗦几十句所谓的测量,主要是测量出物理尺寸,就是我们现实中所说的尺寸。
毕竟算出像素尺寸实在是不是太难。
Halcon里面的物理尺寸测量分1d,2d,3d测量,作为入门书籍我们这儿只讲1d的,就是长度测量。
比如咱们的标定板长度的测量。
有没有很想学?哈哈……3.3.2 言归正传图 3-3-2-1如上图(3-3-2-1),单击助手里面的第四个选项'Measure'。
会弹出下图(3-3-3-2),在输入栏有两个参数需要我们来填,第一个是第一红框里面的,待测量图片的来源,可以选择你已经拍好的照片,就是图像文件,单击那一行后面小框框可以选择图片路径,下一行是通过图像采集助手,就是相机采集图片来测量,如果你还没有打开图像采集助手,一选中就会自动弹出图像采集助手来帮你选择相机,本章第一节刚好你学了连接相机,怎么利用图像采集助手实在是难不倒你。
如果你选中后面的'实时采集',就可以实时采集每一张图片来进行测量了。
一切配置好后,下面一个框内是要相机的内参外参了,上一节刚好学的标定。
希望你有保存。
'.cal'和'.dat'刚好就对应了两个参数保存文件的格式。
还是点击最后面的小框添加。
图 3-2-2-2一切配置好后,就可以进入第二页选项卡如下图:此时你halcon 的图像窗口应该是在实时显示的图片。
把标定板放进视野中,如下图(3-3-2-3)。
图 3-3-2-3图 3-3-2-4然后选择上图(3-3-2-4)中最上你们的小方框,这是画直线的功能,到halcon图像窗口中画一条测量的线,保证这条线穿过要测量的物体的两个边缘,如下图(3-3-2-5):图 3-3-2-5通常情况下,还是要调整下上图(3-3-2-4)中红框框内的三种参数:最小边缘幅度,意思是说halcon自己沿着线路找边缘,当某个地方灰度值差大于这个幅度的时候就认为它为边缘。
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 测距方法
Halcon是一个强大的机器视觉软件库,提供了多种测距方法。
以下是一些常见的测距方法:
1. 边缘测距:通过提取物体的边缘信息,计算边缘之间的距离。
2. 模板匹配:将待测物体与标准模板进行匹配,计算两者之间的距离。
3. 特征提取:提取物体的特征点,利用特征点之间的几何关系计算距离。
4. 相位测量:利用相位差来计算物体之间的距离。
5. 立体视觉:通过两个或多个相机从不同角度拍摄图像,通过立体匹配算法计算物体之间的距离。
这些方法可以根据不同的应用场景和需求选择使用。
例如,在工业自动化领域中,可以使用边缘测距和模板匹配来检测生产线上的零件位置和尺寸;在医疗领域中,可以使用立体视觉和特征提取方法来测量器官和组织的大小和形状。
halcon测量空间点到直线的算子

Halcon测量空间点到直线的算子1. 简介Halcon是一种强大的机器视觉库,提供了丰富的图像处理和测量算法。
本文将介绍Halcon中用于测量空间点到直线的算子。
2. 算法原理测量空间点到直线的算法基于点到直线的距离公式。
给定一个空间点和一条直线,可以通过计算点到直线的距离来测量它们之间的关系。
点到直线的距离公式为:distance = |(a * x + b * y + c) / sqrt(a^2 + b^2)|其中,(x, y)是点的坐标,a和b是直线的方向向量,c是直线的截距。
3. Halcon中的测量算子Halcon提供了多个用于测量空间点到直线的算子,包括distance_pl、distance_pl_dist和distance_pl_points。
3.1 distance_pldistance_pl算子用于计算点到直线的距离。
它接受直线的参数和点的坐标作为输入,并返回点到直线的距离。
示例代码如下:gen_parallel_line (Line, X1, Y1, X2, Y2)distance_pl (Line, PointX, PointY, Distance)其中,gen_parallel_line用于生成一条直线,Line是直线的参数,(X1, Y1)和(X2, Y2)是直线上的两个点的坐标,PointX和PointY是点的坐标,Distance是点到直线的距离。
3.2 distance_pl_distdistance_pl_dist算子用于计算一组点到直线的距离。
它接受直线的参数和点的坐标数组作为输入,并返回每个点到直线的距离。
示例代码如下:gen_parallel_line (Line, X1, Y1, X2, Y2)distance_pl_dist (Line, PointsX, PointsY, Distances)其中,PointsX和PointsY是点的坐标数组,Distances是点到直线的距离数组。
halcon角点检测实例

halcon角点检测实例楼主#更多发布于:2013-11-15 18:18This program compares the result of different operators* which detect points of interest*dev_update_off ()Dark := 100Background := 175Light := 250Angle := rad(45)Size := 3create_test_image (Image, Background, Light, Dark)dev_close_window ()get_image_size (Image, Width, Height)dev_open_window (0, 0, 512, 512, 'black', WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_set_color ('black')dev_set_line_width (3)** Foerstner interest points detectorpoints_foerstner (Image, 1, 2, 3, 200, 0.3, 'gauss', 'true', RowJunctions, ColJunctions, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColArea, CoRRArea, CoRCA rea, CoCCArea)gen_cross_contour_xld (CrossFoerstner, RowJunctions, ColJunctions, Size, Angle) dev_display (Image)dev_display (CrossFoerstner)disp_message (WindowHandle, 'Foerstner interest points detector', 'window', 12, 12, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()** Harris interest points detectorpoints_harris (Image, 0.7, 2, 0.04, 0, RowHarris, ColHarris)gen_cross_contour_xld (CrossHarris, RowHarris, ColHarris, Size, Angle)dev_display (Image)dev_display (CrossHarris)disp_message (WindowHandle, 'Harris interest points detector', 'window', 12, 12, 'bla ck', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()** Harris binomial interest points detectorpoints_harris_binomial (Image, 5, 15, 0.04, 1000, 'on', RowHarrisBinomial, ColHarrisB inomial)gen_cross_contour_xld (CrossHarrisBinom, RowHarrisBinomial, ColHarrisBinomial, Size, Angle)dev_display (Image)dev_display (CrossHarrisBinom)disp_message (WindowHandle, 'Harris binomial interest points detector', 'window', 12, 12, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()** Sojka interest points detectorpoints_sojka (Image, 9, 2.5, 0.75, 30, 90, 0.5, 'true', RowSojka, ColSojka)gen_cross_contour_xld (CrossSojka, RowSojka, ColSojka, Size, Angle)dev_display (Image)dev_display (CrossSojka)disp_message (WindowHandle, 'Sojka interest points detector', 'window', 12, 12, 'bla ck', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()** Lepetit interest points detectorpoints_lepetit (Image, 3, 1, 20, 35, 'interpolation', RowLepetit, ColLepetit)gen_cross_contour_xld (CrossLepetit, RowLepetit, ColLepetit, Size, Angle)dev_display (Image)dev_display (CrossLepetit)disp_message (WindowHandle, 'Lepetit interest points detector', 'window', 12, 12, 'bl ack', 'true')红色的create_test_image (Image, Background, Light, Dark)这个函数为外部函数(即自己所写函数)具体的过程创建见下一节。
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提取直线例程摘要:1.简介2.直线提取在Halcon 中的重要性3.直线提取的基本步骤4.直线提取的实例演示5.总结正文:Halcon 是一种常用的机器视觉开发软件,可以用于图像处理、分析和识别。
在Halcon 中,直线提取是一个重要的功能,可以用于检测和测量图像中的直线。
本篇文章将介绍Halcon 中直线提取的基本步骤和实例演示。
首先,我们需要了解直线提取在Halcon 中的重要性。
在机器视觉应用中,直线通常作为图像中的关键特征,可以用于定位、识别和测量。
因此,提取直线对于图像处理和分析至关重要。
接下来,我们来了解直线提取的基本步骤。
在Halcon 中,直线提取主要分为以下几个步骤:1.读取图像并进行预处理,如灰度化、滤波等,以提高直线提取的准确性。
2.采用边缘检测算法,如Canny、Sobel 等,检测图像中的边缘。
3.对边缘进行连接,形成直线候选区域。
4.对直线候选区域进行筛选,如根据角度、长度等条件进行筛选。
5.对筛选后的直线进行测量,如计算直线的长度、角度等参数。
了解基本步骤后,我们通过一个实例来演示直线提取的过程。
假设我们有一个如下所示的图像:```image := ReadImage("example.bmp")```首先,我们对图像进行预处理,以消除噪声和提高直线提取的准确性:```image := PreprocessImage(image, gray)```接下来,我们采用Canny 边缘检测算法检测图像中的边缘:```edges := CannyEdgeDetection(image, 50, 150)```然后,我们将边缘连接成直线候选区域:```lines := ConnectEdges(edges)```现在,我们需要筛选出符合条件的直线。
假设我们只保留长度在10 到50 像素之间的直线:```selected_lines := SelectByLength(lines, 10, 50)```最后,我们可以对筛选后的直线进行测量,例如计算直线的长度和角度:```measurements := MeasureLines(selected_lines)```以上就是使用Halcon 进行直线提取的基本步骤和实例演示。
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学习例程中文详解-测量圆环角宽间距

跟我学机器视觉-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_pairing:提取垂直于矩形或扇环的直边对。提取算法与
fuzzy_measure_pairs相同,但其可以使用参数Pairing提取彼此相交或者包含 的边缘对。 ➢ reset_fuzzy_measure:重置一个模糊函数
轮廓处理
轮廓处理适用于高精度测量,可提取像素精度边缘或者亚像素精度的边 缘,其主要包括5个步骤:(1)创建轮廓;(2)选择轮廓;(3)分割轮廓; (4)利用已知形状拟合轮廓段;(5)提取未知轮廓的特征。
1.创建轮廓
轮廓处理从轮廓的创建开始,获取轮廓的常用方法是提取边缘。边缘是一张图片中 亮暗区域的过渡位➢ gen_measure_rectangle2:通过一个矩形创建一个线性测量对象 ➢ gen_measure_arc:通过一个圆弧创建一个扇环测量对象 ➢ measure_pos:提取测量区域内垂直于矩形或者扇环的边缘 ➢ measure_pairs:提取测量区域内垂直于矩形或者扇环的边缘对 ➢ measure_thresh:提取测量区域内轮廓线上具有指定灰度值的点 ➢ measure_projection:提取测量区域内投影线上的一维灰度值分布
HALCON编程基础与工程应用
9.3HALCON二维测量
2.区域分割算子
➢ threshold;binary_threshold;auto_threshold;dyn_threshold;fast_threshold和 local_threshold:分割出感兴趣的区域;
halcon实例求不规则图形角度

halcon实例求不规则图形角度1、计算直线与水平轴之间的夹角angle_lx( : : Row1, Column1, Row2, Column2 : Angle)角度计算方式:将直线看作向量(有方向性),以直线与水平轴的交点为起点(旋转中心)。
如果终点在水平轴上方,则夹角为逆时针旋转水平轴到向量的角度(带正号)。
如果终点在水平轴下方,则夹角为顺时针旋转水平轴到向量的角度(带负号)。
结果取决于定义线条的两点的顺序。
角度表示方式:弧度,-π<=Angle<π2、计算两条直线之间的夹角angle_ll( : : RowA1, ColumnA1, RowA2, ColumnA2, RowB1, ColumnB1, RowB2, ColumnB2 : Angle)角度计算方式:该算子计算原理与angle_lx类似,只不过把水平轴替换为任意直线B角度表示方式:弧度,-π<=Angle<=π3、计算一条直线的方向line_orientation( : : RowBegin, ColBegin, RowEnd, ColEnd : Phi)角度计算方式:当直线(无方向性)大致位于1、3象限的方向,角度为正。
当直线大致位于2、4象限的方向,角度为负。
角度表示方式:弧度,-π/2<Phi<=π/24、计算一条直线的参数line_position( : : RowBegin, ColBegin, RowEnd, ColEnd : RowCenter, ColCenter, Length, Phi)角度计算方式:同算子 line_orientation。
角度表示方式:弧度,-π/2<Phi<=π/25、计算区域等效椭圆的参数elliptic_axis(Regions : : : Ra, Rb, Phi)角度计算方式:该区域等效椭圆的主轴(无方向性)相对于水平轴(有方向性)的角度。
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等。
halconxld线段中点、端点和角度的计算

halconxld线 段 中 点 、 端 点 和 角 度 的 计 算
一、xld线段中点 area_center_points_xld (Line4, Area, Row, Column)
二、xld线段端点 *xld转region gen_region_contour_xld (LineContours, RegionLines, 'filled') *提取区域轮骨 skeleton (RegionLines, Skeleton) *获取轮骨端点 junctions_skeleton (RegionLines, EndPoints, JuncPoints) get_region_points (EndPoints, Rows1, Columns1)
法三:通过求椭圆长半轴、短半轴的方式求xld轮廓(精度较高,但是方向有时会找不准) elliptic_axis_points_xld(XLD : : : Ra, Rb, Phi)
法三:通过线段两端点的反正切来求角度(方向准确,精度较高,始终以X轴正方向为起始方向,推荐) 注:直线起始端点(Rows[0],Columns[0]),末尾端点(Rows[1],Columns[1]) offsetX := RightDownColumn - LeftUpColumn offsetY := RightDownRow - LeftUpRow tuple_atan2 (offsetY, offsetX, angel) tuple_deg (angel, angelDeg) *线段与X轴正方向的夹角 m_rotate := 180 - angelDeg
三、xld线段角度 法一:可将xld转成区域,然后求区域的方向 gen_region_contour_xld (LineContours, RegionLines, 'filled') orientation_region (RegionLines, Phi)
halcon 平面法向量 平面倾斜角度

halcon 平面法向量平面倾斜角度摘要:1. Halcon 简介2.平面法向量概念3.平面倾斜角度计算方法4.Halcon 在平面法向量和倾斜角度计算中的应用5.实际应用案例及优势正文:一、Halcon 简介Halcon 是一款功能强大的机器视觉开发软件,广泛应用于各种工业自动化领域。
它具有丰富的图像处理、分析和识别功能,为用户提供了一套完整的图像处理解决方案。
在本文中,我们将重点介绍如何利用Halcon 计算平面法向量和平面倾斜角度。
二、平面法向量概念平面法向量是指在二维平面内,与该平面垂直的向量。
它可以用来表示平面内某一点或某一物体的方向。
在图像处理中,平面法向量常用于描述图像边缘、轮廓的方向,有助于我们更好地理解图像特征。
三、平面倾斜角度计算方法平面倾斜角度是指物体在平面内的倾斜程度,通常用角度表示。
计算平面倾斜角度的方法有多种,其中一种常见的方法是通过计算物体在平面法向量上的投影长度与物体在平面上的实际长度的比值来得到。
此外,还可以通过计算物体在平面法向量上的投影长度与物体在平面上的实际长度的差值,再除以物体在平面法向量上的投影长度的平方和来得到倾斜角度。
四、Halcon 在平面法向量和倾斜角度计算中的应用Halcon 提供了丰富的图像处理函数,可以轻松地实现平面法向量和倾斜角度的计算。
以下是一个简单的例子:1.读取图像并进行预处理,如滤波、去噪等;2.利用边缘检测算法(如Canny 算子)提取图像边缘;3.计算边缘点的梯度方向,得到平面法向量;4.计算边缘点在平面法向量上的投影长度;5.计算物体在平面上的实际长度;6.根据投影长度和实际长度的比值或差值,计算平面倾斜角度。
五、实际应用案例及优势在实际应用中,Halcon 计算平面法向量和倾斜角度的功能可以帮助我们实现如下目标:1.检测图像中的倾斜物体,如检测建筑物的倾斜程度;2.测量物体的尺寸,如测量平面图像中物体的长度、宽度等;3.校正图像,如纠正摄像头引起的图像畸变等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
halcon学习笔记——实例篇长度和角度测量实例二:长度和角度测量
素材图片:
halcon代码:
1: *读取并截取图片
2: dev_close_window()
3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png')
4: crop_rectangle1 (Image, ImagePart, 75, 0, 400, 400)
5: get_image_size (ImagePart, Width, Height)
6: dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
7: dev_display (ImagePart)
8:
9: *获取图形的边界
10: threshold (ImagePart, Regions, 0, 112)
11:
12: *分离三角形和圆形
13: connection(Regions,ConnectedRegions)
14: sort_region(ConnectedRegions,SortedRegions,'upper_left','true','column')
15: select_obj(SortedRegions,Circle,1)
16: select_obj(SortedRegions,Triangle,2)
17:
18: *获取三角形各边的信息
19: skeleton(Triangle,TriangleSkeleton)
20: gen_contours_skeleton_xld(TriangleSkeleton,TriangleContours,1,'filter')
21: segment_contours_xld(TriangleContours,ContoursSplit,'lines_circles', 5, 4, 2)
22:select_contours_xld(ContoursSplit,SelectedContours, 'contour_length',100, 999, -0.5, 0.5)
23: fit_line_contour_xld (SelectedContours, 'tukey', -1, 10, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
24:
25: *计算三角形角度
26:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], Angle1)
27:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle2)
28:angle_ll (RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle3)
29: Angle1:=abs(deg(Angle1))
30: Angle2:=abs(deg(Angle2))
31: Angle3:=abs(deg(Angle3))
32:
33: *获取圆的信息
34: area_center(Circle,AreaCircle, RowCircle, ColumnCircle)
35:
36: *计算圆心到三角形各边的距离
37: Distance := []
38:for Index := 0 to 2 by 1
39:distance_pl (RowCircle, ColumnCircle, RowBegin[Index], ColBegin[Index], RowEnd[Index], ColEnd[Index], ThisDistance)
40: Distance := [Distance,ThisDistance]
41: endfor。