2018-10-19 17:05:53
halcon的模板匹配种类有很多种,方法各有优缺点,一般有基于灰度的匹配,基于形状的匹配等等,这里具体理论和方法不做详解,只简单总结一个实例。图像匹配一般需要对旋转放缩进行处理,另外为了提高搜索效率,常用用图像金字塔来处理模板图像,图像金子塔就是把图像按一定算法,缩小为不同比例的模板,减少像素。一般的模板匹配流程如下:所以首先创建模板,模板的创建就是采集一张自己需要的原始图像,如下我采集的原始图像...
2018-10-19 16:57:26
二维仿射变换,顾名思义就是在二维平面内,对对象进行平移、旋转、缩放等变换的行为(当然还有其他的变换,这里仅论述这三种最常见的)。 Halcon中进行仿射变换的常见步骤如下:① 通过hom_mat2d_identity算子创建一个初始化矩阵(即[1.0, 0.0, 0.0, 0.0, 1.0, 0.0]);② 在初始化矩阵的基础上,使用hom_mat2d_translate(平移)、hom_mat2...
2018-10-19 16:53:58
Halcon中实现旋转的方式由两种。一种是rotate_image,该方式实现简单,但只能绕中心旋转。二是affine_trans_image,该方式实现较复杂,但是可以实现绕任意位置的旋转。1 rotate_image*Image和ImageRotate分别是输入和输出图像
*Phi是输入的旋转度数
*interpolation是内插方式,默认为'constant' rota...
2018-10-19 16:37:26
create_shape_model创建模板,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstra...
2018-10-19 16:15:11
注:本文内容大量引用了王成群所著《Halcon工业使用教程》第二册中9.1.3 find_shape_mode的内容。 HALCON中最实用的算子find_shape_model,该算子通过模板在图像中寻找没有几何缩放的目标。本文重点对其主要参数进行了归纳整理。通过对该参数的分析,得出通过优化匹配角度、金字塔层数以及贪婪度可减少模板寻找的时长。 find_shape_model...
2018-10-19 15:04:11
halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类本文只对形状匹配做简要说明和补充:Shape_Based匹配方法:上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。先要补充点知识:形状匹配常见的...
2018-10-19 13:34:05
halcon软件最高效的一个方面在于模板匹配,号称可以快速进行柔性模板匹配,能够非常方便的用于缺陷检测、目标定位。下面以一个简单的例子说明基于形状特征的模板匹配。为了在右图中,定位图中的三个带旋转箭头的圆圈。注意存在,位置、旋转和尺度变化。上halcon代码:dev_update_pc ('off')
dev_update_window ('off')
de...
2018-10-19 09:30:03
图像分割之阈值分割: 请参见halcon例程:gray_histo.hdev 此例程中主要用到两个算了: 1.gray_histo(Regions,Image:::AbsoluteHisto,RelativeHisto) 作用:获得图像的某一指定区域内的灰度分布,将数据写入到参数AbsoluteHisto和RelativeHisto 其中AbsoluteHisto是指图像内0-255灰度...
2018-10-18 13:35:43
Image一 读取的3种方式:read_image( image,'filename') //image 是输出对象,后面是输入文件的路径和名称读取多图: 1,申明一个数组,分别保存路径ImagePath:=[]ImagePath[0]:='D:/1.bmp'ImagePath[1]:='D:/2.bmp'ImagePath[2]:=...
2018-10-18 13:34:31
1. 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。什么原因引起?初步诊断是,显示的时候调用的颜色查找表存在异常不是 default ,而是其它选项。此时可以通过查阅相关参数,调用set_system解决,也可以 在 编辑-》参数选择-》颜色查找表进行更改 。2. 裁剪图像;从图像上截取某段图像进行保存。如何实现该操作 ?首先应该知道,regio...
2018-10-18 11:03:16
图像增强一般通过如下几种方式:1. 灰度值线性变换scale_image: g’ := g * Mult + Add g为当前的灰度值,Mult 为所乘的系数,Add为加的偏移值,由公式可以看出用scale_image来处理图像是个线性变化,会让黑的地方更黑,亮的地方更亮。scale_image_max:将灰度值拉伸到0-255。2. 增强图像对比度- emphasize(Image : Imag...
2018-10-16 18:51:33
很多时候当我们用edges_sub_pix, threshold_sub_pix 等算子得到边缘后,因为有噪声、物体本身断裂等原因 很多边缘是共线但是断裂的如下图所示,提取键盘的网格,左图有很多共线线段,右图为共线连接后的结果更详细信息可查阅自带例程:measure_grid.hdev一个更直观的例子提取网格,左图因为网格有交叉点通过edges_sub_pix得到是断裂的网格线,右图为union...
2018-10-16 15:40:24
由于halcon的这些基本运算符有时候要用时查帮助手册比较困难,不像算子那样容易搜索到帮助。因此特在此留下一篇,以方便大家查阅。1、标准赋值Ø assign(Input, Result) //编辑形式,永远都是输入在前,输出在后 1: assign(sin(x) + cos(y), u)Ø Result := Input //代码形式 1: u := si...
2018-10-15 17:12:22
如下图,我们需要找到该产品的中心的螺丝孔。处理结果截图如下:halcon的中间处理结果如下图这个例子在各类锁螺丝设备中都比较常见。采用基本的形态学算子,如:threshold, connection, select_shape 即可以解决问题。但是如果是多种颜色的产品,可能不光要调节面积、阈值等算子的参数,还需要调用不同的光源或者相机曝光参数等。在下面的代码中, inner_circle算子即求出...
2018-09-30 10:19:49
细谈工业相机ccd与cmos的差别 CCD,英文全称:Charge coupled Device,中文全称:电荷耦合元件,可以称为CCD图像传感器。CCD是一种半导体器件,能够把光学影像转化为数字信号。在工业相机中,如果按照工业芯片来分的话,比较常见的就是ccd工业相机和cmos工业相机。1、 耗电量差异:CMOS采用主动式图像采集方式,感光二极管所产生的电荷会直接由旁边的电晶体放大输出;而CC...
2018-09-29 16:01:09
本文是勇哥很早的时候写的一篇,如果想知道更多的信息,请参阅勇哥另一篇更详细的文章:《勇哥的视觉实验:halcon的标定助手》"安装"面板中:描述文件要选择你手里的halcon标定板的对应的描述文件. 例如笔者手中是30*30mm的标定板, 就使用图中所示的描述文件.我手里这片标定板厚度为3.050mm测试相机是广角镜头, 非远心相机单个像元的宽与高,焦距应该询问相机厂商, 这里...
2018-09-28 16:43:38
(一)数字图像基础概念1、数字图像:一幅图像可以定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,而在任何一对空间坐标(x,y)处的幅值f称为图像该点处的强度或灰度。当x,y和灰度值f是有限的离散数值时,我们称该图像为数字图像。简而言之,数字图像就是离散的灰度集。2、像素:数字图像是由有限数量的元素组成的,每个元素都有特定的位置和幅值,这些元素我们称之为像素。(二)halcon数据结构...
2018-09-28 16:31:53
素材如下:代码如下, 带注释: *读取并截取图片
dev_close_window()
read_image (Image, 'C:/Users/Administrator/Desktop/微信截图_20180928100130.png')
crop_rectangle1 (Image, ImagePart, 75, 0, 400, 400)
g...
2018-09-27 18:15:30
遇上一个项目,需要将多幅图片进行拼接。 研究了一下halcon中的tile_images_offset算子,这个算子可以完成类似以下结构的图片拼接工作: 算子签名: tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : ) 其中OffsetRow,...
2018-09-24 14:23:02
1、Developdev_display 在现有图形窗口中显示图像目标。dev_set_color 设置一个或更多输出颜色,通常用于设置region或者xld的颜色。dev_set_draw 定义区域填充模式,可选项有fill和margindev_set_line_width 定义区域轮廓输出的线宽。dev_set_shape 定义区域输出形状,例如以矩形显示或者以圆形显示,这样可以更...
2018-09-24 14:07:10
机器视觉工程应用主要可划分为硬件和软件两大部分。硬件:工程应用的第一步就是硬件选型。硬件选型很关键,因为它是你后面工作的基础。主要是光源、工业相机和镜头选择。软件:目前业内商业库主要有Halcon,康耐视,DALSA,evision,NI等,开源库有OpenCV.其中NI的labview+vision模块。机器视觉工程应用的基本开发思路是:一、图像采集,二、图像分割,三、形态学处理,四、特征提取,...
2018-09-03 14:24:01
这款BFLY-PGE-50A2M-CS工业相机, 500万像素. 配置网卡选用 SCI-GEP-4, 这是内部带4针电压专供的GigE接口相机的网卡. 如果你把GigE接口的网线插到普通网卡, 会发现网卡信号灯都不会亮.有些型号的GigE接口的相机,则需要在相机上的圆型接口接入外接电源. 而这一款则不需要.这款相机配套的官方驱动及管理工具为: 安装好后, 下面两个程序是我们需要的. 要注意的是:...
2018-07-16 14:52:19
勇哥收集的XLD相关的算子说明,方便大家备查。19.1 Access1. get_contour_xld 功能:返回XLD轮廓(contour)的坐标。2. get_lines_xld 功能:返回一个XLD多边形(polygon)数据。3. get_parallels_xld 功能:返回一个XLD并行数据。4. get_polygon_xld 功能:返回一个XLD多边形(polygon)...
2018-07-16 11:09:20
halcon测量的第一步,就是找边。边找精准了,计算两边的距离才可能精准。由于物料的管控不可能做到每片抽检,或者根本不被管控。这就要求我的抓边效果能最大化适合各种可能性。下面的程序使用鼠标确定测量框,根据设定参数拟合出一条质量可调的XLD线条。图1 鼠标绘制测量框图2 拟合完成的线条,这个例子由50个点拟合出XLD线条。十字点起标识点的作用。找线方法调用代码:fpath:='C:/Us...
2018-07-16 10:56:46
友发来两个小项目,要求亚像素精度。突然想问几个问题:1、何为亚像素?2、何为亚像素精度?3、使用亚像素测量,系统应注意什么?1、何谓亚像素?面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可...
2018-07-16 08:48:11
18.1 Arithmetic1. tuple_abs 功能:计算一个元组的绝对值。2. tuple_acos 功能:计算一个元组的反余弦。3. tuple_add 功能:两个元组相加。4. tuple_asin 功能:计算一个元组的反余弦。5. tuple_atan 功能:计算一个元组的反正切。6. tuple_atan2 功能:计算一个元组四个象限的反正切。7. tuple_ce...
2018-07-16 08:40:38
本地:即HDevelop中的函数存储在当前*.hdev文件中,导出可以一起导出,不可以被其他程序共享和使用。非本地:即HDevelop中的函数存储在指定的目录中,格式为*.hdvp,需要在外部函数目录里面进行加载和使用,不随当前文件内容一起导出,可以被其他程序共享和使用。默认Halcon保存的外部算子目录位于安装目录/procedures目录下在我们求证之前,讲讲一点和HDevelop相关的内容:...
2018-07-13 22:36:21
dyn_threshold算子动态阈值算子应付以下情况:对于一些应用来说,确定一个全局阈值是不可能的,比如,因为没有通用的参考图像来确定阴影校正图像的背景是非均匀的物体在局部范围内通常比背景亮些或者黑些在这种情况下,寺找一个固定阈值来区分物体和背景是丌太容易的问题: 局部邻域的确定局部邻域可以由平滑滤波器来确定(比如, mean_image或binomial_filter)动态阈值算子的经验说明:...
2018-07-13 21:07:16
合并region select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 550, 99999)
select_obj(SelectedRegions1, obj1, 1)
select_obj(SelectedRegions1, obj2, 2)
unio...