文档库 最新最全的文档下载
当前位置:文档库 › halcon知识点

halcon知识点

halcon知识点
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到里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为24位bmp格式,即可解决。

4.读入avi文件报错。Halcon通过directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。

5. Region或xld筛选。

Halcon提供了丰富的region和xld筛选方法。Region可以使用

select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似

region feature这样关键字组合成的算子获取区域特征,然后通过tuple排序或相加减,再通过tuple_find确定是对应哪个区域的特征。同样的halcon也提供了select_contours_xld进行轮廓筛选。

6. Halcon分几类对象,每个类的功用是?

Halcon总分俩大类,tuple和图标对象obj。Tuple涵盖了对所有基础数据类型的封装,可以理解为她是halcon定义的数组类。Obj是alcon定义图标类基类。衍生出了许多类型,其中Region,Xld,Image其中最主要的类型。

7. F1说明,参数部分-array是什么意思?

该符号说明,该参数接受一组输入,对tuple就是一组tuple,对obj就是通过concat_obj或其它操作产生的一组obj元组。

8.俩个相对方形物体的距离计算。

如果这俩个物体和背景对比清晰,最近的距离在俩条边下则可以再预处理之后进行如下操作:1. Segement_contours_xld分割边缘线段(edgeXXXX等得到的边缘);

2. select_contours_xld选择出特定的长度或方向边缘;

3.假设此时刚好获取俩条线,则可以利用distance_ll,求得距离,也可以自己fit_lineXXXX拟合直线再求距离;

以上是一种方法,另一种常见方法是利用measure_pos或measure_pair进行测量,不熟悉的可以翻看示例或者使用测量助手进行测量。

9.创建过程或函数,或者全文编辑。

在算子编辑窗口,main所在行右边,有四个按钮,将鼠标移到该位置,将有中文提示,按提示点击按钮。

10.从其它halcon环境窗口复制函数或算子复制到新建的halcon窗口,无法使用,提示不识别。

除了敲错,此种情况都是由于该函数式本地或全局函数,而不是halcon算子。确定的方法:注意该算子颜色然后去编辑参数选择查看该颜色代表的算子属于什么类型函数。亦可以直接右键,如果有查看函数。为黑色可点击,这种情况也是本地或全局函数。

解决方法:如果是全局函数,可以在halcon目录下面找到该函数,加载到新窗口就行;也可以新建输入输出一致的过程,将代码复制过来,然后使用。本地函数只能使用后一种方法解决。11. 64位系统,VS2010及以下版本报error LNK1112:模块计算机类型”X86”与目标计算机类型”X64”冲突。

问题原因是默认情况,halcon在64位系统会自动安装64位halcondll,并且添加到环境变量;而vs一般是默认X86编译环境,俩者dll库不一致,换句话说是底层机器指令不一致。

解决办法是将编译环境设置为64位,详见百度;或者再次安装halcon选择32位dll,并修改环境变量VC++路径为32位库路径,bin指向32位dll路径。

12. 64位系统,VS2012。无论怎么更改库文件,头文件,名空间,最好的提示也是找不到函数定义。

反复出现,无法解决时,有可能是问题11所述问题,解决办法见11.至于为何不提示errorLNK1112,可能是VS更改了前面检测等级,在编译阶段就拦截到错误。应该说是更先进了,只是比较不合情理。

13.如何查找halcon算子?

Halcon算子命名大部分所见即所得,也就是如果你记得你要找的算子汉字名称,输入到翻译器得到英文单词,在F1的算子分栏从头开始输大部分能找到一些算子,这时候再点击进去注意算子功能解释,懂了是自己要的就拿起来到例程搜索示例,查阅功能;不懂就看说明部分;再不懂进群问。

另外,对于近半算子是按动作_类型/目标_属性命名。Obj是region,xld,image的父类,后三者找不到的算子可以输入obj查找。14. Halcon相等,不等于,异或,或等操作符。

直接在F1出来的分栏输入operation,查找可得。

15.在halcon环境使用get_grayval进行像素操作太慢,如何加速?

注意到halcon环境是解释执行,get_grayval可以一次获取多个,可以预先把行数据存入一个tuple对象,存一次以后可用多次。因此提速方法,建议事先创建好行tuple (用tuple_add加一,即可实现所有行加一),列的tuple数组(创建好可以用多次)。这时每次再调用get_grayval,速度将显着提升,因为节省了逐行解释时间。注意:如果导出到VC,则建议用get_image_pointer获取指针进行操作。

16.从一组region或xld,image中获取单个对象,或多个halcon同类对象构成

-array元组。

select_obj负责从多个对象的元组选出指定序号对象;concat_obj执行将俩个对象(或元组)链接成一个对象元组。

17.更改halcon颜色查找表,显示不同颜色空间。

在编辑参数选择颜色查找表进行更改;也可以在F1输入lut进行查找设置函数。

18.创建空对象,空Region,空数组。

gen_empty_obj创建空的对象;gen_emtpy_region创建空数组;halcon环境中tuple用:=[]。19. Region和xld互相转化;多边形创建xld;直方图,直线,点集,多边形,行程编码创建region。

Halcon里对象之间的相互转换,一般可以转化为gen_目标对象_源对象形式。如:gen_region_contour_xld使用xld创建一个region;

gen_contour_region_xld从区域region创建一个轮廓xld。

直方图histo;直线是line,点集是points,行程编码runs,黑森线hline,多边形polygon。

按照上面格式进行查找。

20. Halcon伪彩色

可以参照冈萨雷斯伪彩色章节。

21. Halcon角度分布

22.判断Region是否为空?

首先一般region是多个region存在一个regions变量里面。所以先使用count_obj获得有多少个obj;然后使用select_obj,选出一个区域处理;接着使用area_center,VC可以使用()!=H_EMPTY_REGION判断是否为空。

23.新手入门书籍?

首推《机器视觉算法与应用》,这本书前面更多的是阐述一些通用的机器视觉经验,后面有跟示例,代码为,实际使用可能会有部分函数已经被抛弃使用;

其次,冈萨雷斯绿皮书《数字图像处理》,介绍内容丰富,全面,但是可能讲得比较深,没有实际实践或再找资料展开会比较,常读不深入。是数字图像处理基础理论不可多得的书籍。

24.用halcon调用

halcon支持的品牌相机,使用相机自带的厂家软件可以发现相机,可是halcon总是提示:图像获取设备未初始化。这是为什么?

把对应品牌的相机配置文件加到采集助手的

使当前halcon调用的相机参数与厂家软件一致;再确保相机驱动,采集卡驱动安装完毕。

25.屏幕/窗口截图。

使用dump_window_image保存对应窗口截图,截图为当前肉眼所见图像,包括已经绘制到图像上的region,xld等。

26.导出halcon 11代码为C++代码,经常提示不识别,或者名空间名字没找到。解决办法是什么?

首先halcon11导出如果没有勾选10,默认产生的C++代码,对应的主要头文件是和using namespace HalconCPP。

配置如下头文件#include “” ,代码在导出时已经自动生成。

using namespace HalconCPP;代码导出时已经自动生成。在VC++目录,配置include路径,一个是默认Halcon安装文件夹下面的include,另外一个根据你导出的代码而定,上面是halconCPP,所以对应添加include文件夹下面的HalconCPP文件夹到路径里面。

此外配置将安装文件夹下的lib添加到库文件目录。

最后将添加到库的依赖项。注意此处要一句导出代码而定,上述导出的是halcon -C++代码,所以是此处添加该项。

27.标定助手的“平均误差”是指什么?

这个平均误差的计算是按如下方式:

1.计算标定板图像的标志点位置,此处记为Mark1;

2.标定结束后,将标准标志点,按照得出的转换矩阵,进行转换得到

Mark2;

3.由于可以得到Mark1和Mark2点之间对应关系,点对应相减,绝对值累加(此处累加方式请具体查标定程序查找具体平均误差计算函数,很久,已记忆不详),然后除以标志点数目。

4.此时得到的就是平均误差。

28. Halcon参数函数里面的四个冒号(::::)是什么意思?

四个冒号按照参数类型和输入输出不同进行了分隔。从左到右依次是(输入的obj对象:输出的obkj对象:输入的控制变量:输出的控制变量)。29. Halcon F1算子Parameters格式说明。

例1:Image1 (input_object) (multichannel-)image(-array) → object (byte* / int1* / int2* / uint2* /int4* / int8 / real*) *allowed for compute devices

Input image 1.

Image1对应参数名input_object指示对象参数类型是输入对象(multichannel-)指示是可以是多通道图像image指示参数是一个image类型(-array)指示可以一次输入多个object(??)指示输入的是object,其中支持的object 参数的内部类型如(??)所示。

例2:Mult (input_control) number → (real / integer)

参数名(参数类型)具体类型->(支持内部参数类型)

30.多线程调用代码,代码中包含halcon窗口代码,报错。

Halcon涉及到窗口的代码都不能跨线程调用,硬是跨线程调用可能出现参数输入错误等异常情况。参见函数F1说明的Parallelization行性说明。最好的办法是当前窗口当前线程声明,定义并使用,其它线程可以对MFC的picturebox 控件进行关联(不同线程调用该代码稳定性待测试),然后不同线程自己定义变量进行具体操作。

或者xld绘制或画到图像上用哪个函数?

Halcon绘制有paint和overpaint,区别是overpaint是绘制自身,paint输出可以是其他图像。

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筛选方法。Region可以使用select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似 region feature 这样关键字组合成的算子获取区域特征,然后通过 tuple 排序或相加减,再通过 tuple_find 确定是对应哪个区域的特征。同样的halcon也提供了 select_contours_xld 进行轮廓筛选。 6. Halcon分几类对象,每个类的功用是? Halcon总分俩大类,tuple和图标对象obj 。Tuple涵盖了对所有基础数据类型的封装,可以理解为她是halcon定义的数组类。Obj 是alcon定义图标类基类。衍生出了许多类型,其中 Region ,Xld,Image 其中最主要的类型。 7. F1说明,参数部分 -array 是什么意思? 该符号说明,该参数接受一组输入,对tuple就是一组tuple,对obj 就是通过concat_obj 或其它操作产生的一组obj元组。 8. 俩个相对方形物体的距离计算。 如果这俩个物体和背景对比清晰,最近的距离在俩条边下则可以再预处理之后进行如下操作:

基于HALCON的模板匹配方法总结.

基于HALCON的模板匹配方法总结 基于HALCON的模板匹配方法总结 HDevelop开发环境中提供的匹配的方法主要有三种,即Component-Based、Gray-Value-Based、Shape-Based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配。这三种匹配的方法各具特点,分别适用于不同的图像特征,但都有创建模板和寻找模板的相同过程。这三种方法里面,我主要就第三种-基于形状的匹配,做了许多的实验,因此也做了基于形状匹配的物体识别,基于形状匹配的视频对象分割和基于形状匹配的视频对象跟踪这些研究,从中取得较好的效果。在VC下往往针对不同的图像格式,就会弄的很头疼,更不用说编写图像特征提取、模板建立和搜寻模板的代码呢,我想其中间过程会很复杂,效果也不一定会显著。下面我就具体地谈谈基于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()则会很容易的帮我们找到模板的轮廓; ⑷ 创建好模板后,就可以打开另一幅图像,来进行模板匹配了。这个过程也就是在新图像中寻找与模板匹配的图像部分,这部分的工作就由函数 find_shape_model()来承担了,它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的增大其值。 ⑸ 找到之后,还需要对其进行转化,使之能够显示,这两个函数 vector_angle_to_rigid()和affine_trans_contour_xld()在这里就起这个作用。前一个是从一个点和角度计算一个刚体仿射变换,这个函数从匹配函数的

HALCON形状匹配总结

HALCON形状匹配总结 Halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种 方法。 先要补充点知识:形状匹配常见的有四种情况一般形状匹配模板shape_model、线性变形匹配模板 planar_deformable_model、局部可变形模板 local_deformable_model、和比例缩放模板Scale_model 第一种是不支持投影变形的模板匹配,但是速度是最高的,第二种和第四种是支持投影变形的匹配,第三种则是支持局部变形的匹配。 一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小

或是投影变形如倾斜等,均会影响查找结果。涉及到的算子通常为create_shape_model 和find_shape_model 线性变形匹配模板planar_deformable_model是指模板在行列方向上可以进行适当的缩放。行列方向上可以分别独立的进行一个适当的缩放变形来匹配。主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数 线性变形匹配又分为两种:带标定的可变形模板匹配和不带标定的可变形模板匹配。涉及到的算子有: 不带标定的模板:创建和查找模板算子 create_planar_uncalib_deformable_model和 find_planar_uncalib_deformable_model 带标定模板的匹配:先读入摄像机内参和外参 read_cam_par 和read_pose 创建和查找模板算子create_planar_calib_deformable_model和 find_planar_calib_deformable_model 局部变形模板是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。例如包装纸袋上图案查找。参数和线性变形额差不多 算子如下:create_local_deformable_model和 find_local_deformable_model

HALCON算子函数整理10 Matching-3D

HALCON算子函数——Chapter 10 : Matching-3D 1. affine_trans_object_model_3d 功能:把一个任意有限3D变换用于一个3D目标模型。 2. clear_all_object_model_3d 功能:释放所有3D目标模型的内存。 3. clear_all_shape_model_3d 功能:释放所有3D轮廓模型的内存。 4. clear_object_model_3d 功能:释放一个3D目标模型的内存。 5. clear_shape_model_3d_ 功能:释放一个3D轮廓模型的内存。 6. convert_point_3d_cart_to_spher 功能:把直角坐标系中的一个3D点转变为极坐标。 7. convert_point_3d_spher_to_cart 功能:把极坐标中的一个3D点转变为直角坐标。 8. create_cam_pose_look_at_point 功能:从摄像机中心和观察方向创建一个3D摄像机位置。 9. create_shape_model_3d 功能:为匹配准备一个3D目标模型。 10. find_shape_model_3d 功能:在一个图像中找出一个3D模型的最佳匹配。 11. get_object_model_3d_params

功能:返回一个3D目标模型的参数。 12. get_shape_model_3d_contours 功能:返回一个3D轮廓模型视图的轮廓表示。 13. get_shape_model_3d_params 功能:返回一个3D轮廓模型的参数。 14. project_object_model_3d 功能:把一个3D目标模型的边缘投影到图像坐标中。 15. project_shape_model_3d 功能:把一个3D轮廓模型的边缘投影到图像坐标中。 16. read_object_model_3d_dxf 功能:从一个DXF文件中读取一个3D目标模型。 17. read_shape_model_3d 功能:从一个文件中读取一个3D轮廓模型。 18. trans_pose_shape_model_3d 功能:把一个3D目标模型的坐标系中的位置转变为一个3D轮廓模型的参考坐标系中的位 置,反之亦然。 19. write_shape_model_3d 功能:向一个文件写入一个3D轮廓模型。

Halcon学习之四:有关图像生成的函数

Halcon学习之四:有关图像生成的函数 1、copy_image ( Image : DupImage : : ) 复制image图像 2、region_to_bin ( Region : BinImage : ForegroundGray, BackgroundGray,Width, Height : ) 将区域Region转换为一幅二进制图像BinImage。 ForegroundGray, BackgroundGray分别为前景色灰度值和背景色灰度值。Width, Height为Region的宽度和高度。 3、region_to_label ( Region : ImageLabel : Type, Width, Height : ) 将区域Region转换为一幅Lable图像ImageLabel。 Type为imagelabel的类型。 Width, Height为Region的宽度和高度。 4、region_to_mean ( Regions, Image : ImageMean : : ) 绘制ImageMean图像,将其灰度值设置为Regions和Image的平均灰度值。相关例子: [c-sharp]view plaincopyprint? 1.* 读取图像 2.read_image (Image, 'G:/Halcon/机器视觉 /images/bin_switch/bin_switch_2.png') 3.* 复制图像 4.copy_image (Image, DupImage) 5.* 区域生长算法

6.regiongrowing (Image, Regions, 3, 3, 1, 100) 7.* 生成ImageMean 8.region_to_mean (Regions, Image, ImageMean) 9.* 将Region转换为二进制图像 10.r egion_to_bin (Regions, BinImage, 255, 0, 512, 512) 11.*将Region转换为Label图像 12.r egion_to_label (Regions, ImageLabel, 'int4', 512, 512)

基于HALCON的机器视觉系统的研究与实现

基于HALCON的机器视觉系统的研究与实现 近年来,机器视觉系统以其高效率、高可靠、低成本的特点在国外取得了广泛的应用。机器视觉系统适用于众多领域,例如工业自动化、医药业、制造业、农业等,弥补了人类视觉的很多不足。本文采用德国MVTec公司的专业机器视觉软件HALCON来开发机器视觉系统,提出了相关机器视觉实现方法,并且在机器视觉实验平台上完成了一个弹簧片检测任务。 目前关注较多的是机器视觉系统的硬件部分,而机器视觉软件部分关注较少,一个先进的机器视觉系统除了具有高性能的硬件外,还需要有高性能的软件,虽然说许多常见的开发软件例如Mircosoft的Visual Studio、NI的LabWindows\CVI等等都可以开发机器视觉系统,但是开发周期比较长,针对性较弱,程序的复杂程度较高。而采用HALCON作为机器视觉和图像处理核心软件,不仅大大缩短了开发周期,降低了开发难度,而且可以参考HALCON提供的众多机器视觉和图像处理例程来针对具体的任务做具体开发。 文章的第一章研究了机器视觉系统的组成、应用现状和发展,并且对机器视觉软件HALCON做了概述。第二章根据相关要求,选择合适的硬件单元,设计和搭建了VS-ZM1200机器视觉实验平台。第三章研究了机器视觉中常用的一些图像处理技术,重点讨论了在弹簧片检测任务中所采用的图像处理技术和算法,如图像的增强,分割,边缘检测等。第四章研究了机器视觉软件,重点研究了HALCON,并且对在Visual C++开发环境下如何使用HALCON编写的程序做了讨论。第五章介绍了在VS-ZM1200机器视觉实验平台上,使用HALCON和Visual C++开发的一套弹簧片检测系统,该系统完成关于弹簧片的尺寸参数测量和外观参数判别的任务。

halcon基础数据类型详解

halcon基础数据类型详解 #if defined(__CHAR_UNSIGNED__) || defined(__sgi) #define INT1 signed char /* integer, signed 1 Byte */ #define INT1_MIN SCHAR_MIN #define INT1_MAX SCHAR_MAX #else #define INT1 char /* integer, signed 1 Byte */ #define INT1_MIN CHAR_MIN #define INT1_MAX CHAR_MAX #endif #define UINT1 unsigned char /* integer, unsigned 1 Byte */ #define UINT1_MIN 0 #define UINT1_MAX UCHAR_MAX #define LONG_FORMAT _INT64_FORMAT typedef INT4_8 Hlong; typedef UINT4_8 Hulong; 看粗体部分,可以看到Hlong型在32位的机器上其实就是long型代表4个字节32位,在64位机器上有另一种定义 再来看看halcon中最重要的数据类型HTuple,在C++里面,halcon将HTuple类型封 装了类,其始祖类HRootObject,这个类相当于MFC里面的CObject,halcon从HRootObject 派生了HBaseArray,当然这两个类是虚基类,有一些方法需要我HTuple自己实现,当然也 有一些方法可以直接用的。这两个类在HCPPUtil里,可以看看。 HTuple类就是从HBaseArray派生,元组基类,相当于数组,具有如下的构造函数: HTuple(int l); HTuple(float f); HTuple(double d); HTuple(constchar *s);

Halcon学习(24)总结(一)

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;在此基础上,进入ORClass-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++(面向对象) 可以以面向对象的方式重写代码,也即利用类及类的成员函数;

HALCON算子函数Chapter 16:System

HALCON算子函數——Chapter 16 : System 16.1 Database 1. count_relation 功能:在HALCON數據庫中實體的數目。 2. get_modules 功能:查詢已使用模塊和模塊關鍵碼。 3. reset_obj_db 功能:HALCON系統的初始化。 16.2 Error-Handling 1. get_check 功能:HALCON控制模式的說明。 2. get_error_text 功能:查詢HALCON錯誤測試後錯誤數目。3. get_spy 功能:HALCON調試工具當前配置。 4. query_spy 功能:查詢HALCON調試工具可能的設置。5. set_check 功能:激活和鈍化HALCON控制模式。

6. set_spy 功能:HALCON調試工具的控制。 16.3 Information 1. get_chapter_info 功能:獲取程序有關章節的信息。 2. get_keywords 功能:獲取指定給程序的關鍵字。 3. get_operator_info 功能:獲取關於HALCON程序的信息。 4. get_operator_name 功能:獲取由給定字符串作為它們的名字的程序。 5. get_param_info 功能:獲取關於程序參數的信息。 6. get_param_names 功能:獲取一個HALCON程序參數的名字。 7. get_param_num 功能:獲取一個HALCON程序不同參數類的數目。 8. get_param_types 功能:獲取一個HALCON程序控制參數的缺省數據類型。

HALCON算子函数Chapter 15: Segmentation

HALCON算子函數——Chapter 15 : Segmentation 15.1 Classi?cation 1. add_samples_image_class_gmm 功能:將從圖像中獲取的測試樣本添加到高斯混合模型的測試數據庫中。2.add samples_image_class_mlp 功能:將從圖像中獲取的測試樣本添加到多層視感控器的測試數據庫中。 3. add_samples_image_class_svm 功能:將從圖像中獲取的測試樣本添加到一個支持向量機的測試數據庫中。 4. class_2dim_sup 功能:采用二維空間像素分類分割圖像。 5. class 2dim unsup 功能:將兩幅圖像以聚類分割。 6.class ndim_box 功能:利用立方體將像素分類。 7. class_ndim_norm 功能:利用球體或立方體將像素分類。 8. classify_image_class_gmm 功能:根據高斯混合模式分類圖像。 9. classify_image_class_mlp 功能:根據多層視感控器分類圖像_。 10. classify_image_class_svm 功能:根據支持向量機分類圖像。 11. learn_ndim_box

功能:利用多通道圖像測試一個分級器。 12. learn_ndim_norm 功能:為class_ndim_norm構建類。 15.2 Edges 1. detect_edge_segments 功能:檢測直線邊緣分割。 2. hysteresis_threshold 功能:對一副圖像采取磁滯門限操作。 3. nonmax_suppression_amp 功能:抑制一幅圖像上的非最大值點。 4. nonmax_suppression_dir 功能:利用指定圖像抑制一幅圖像上的非最大值點。 15.3 Regiongrowing 1. expand_gray 功能:依據灰度值或顏色填充兩個區域的間隙或分割重疊區域。 2. expand_gray_ref 功能:依據灰度值或顏色填充兩個區域的間隙或分割重疊區域。 3. expand_line 功能:從給定線開始擴充區域。 4. regiongrowing 功能:利用區域增長分割圖像。

Halcon学习之边缘检测函数

Halcon学习之边缘检测函数 sobel_amp ( Image : EdgeAmplitude : FilterType, Size : )根据图像的一次导数计算图像的边缘 close_edges ( Edges, EdgeImage : RegionResult : MinAmplitude : ) close_edges_length( Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : ) 使用边缘高度图像关闭边缘间隙。输出的区域包含杯关闭的区域。(感觉是对边缘的扩充) derivate_gauss( Image : DerivGauss : Sigma, Component : ) watersheds( Image : Basins, Watersheds : : )从图像中提取风水岭。 zero_crossing( Image : RegionCrossing : : )零交点(二次导数) diff_of_gauss( Image : DiffOfGauss : Sigma, SigFactor : )近似日志算子(拉普拉斯高斯)。 laplace_of_gauss ( Image : ImageLaplace : Sigma : ) 拉普拉斯高斯edges_color_sub_pix ( Image : Edges : Filter, Alpha, Low, High : )精确的亚像素边缘提取(彩色图像) edges_sub_pix ( Image : Edges : Filter, Alpha, Low, High : ) 精确边缘提取的亚像素(灰度图像) edges_color ( Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : )根据颜色进行边缘提取 edges_image ( Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : )边缘提取 skeleton ( Region : Skeleton : : )计算区域的框架Skeleton == Region

基于halcon的车牌的图像识别_整理

基于halcon的车牌的图像识别 其实车牌图像识别从技术上已经比较成熟,从理论上来说无外乎就是如下几个步骤:灰度化:实际就是对原始车牌图片进行预处理,把彩色图片转化为黑白图片,然后对不符合指定阙值范围的灰度值进行过滤。 车牌定位:这是技术难点之一,根据我的经验,定位车牌位置对于车牌的准确识别而言实际上就成功了60%。很多车牌识别的产品都对车牌的定位预留了很多配置参数,例如截取原始图片的位置参数、车牌的长宽比例、大小等等,这些都是为了提高车牌定位的准确率。 字符分割:车牌定位后是字符分割,本人使用的识别过程是:对定位的车牌位置进行降噪处理=>边界模糊=>从右向左找出前6个封闭的图形=>剩余的封闭图形综合为一个图形进行汉字的识别。 字符识别:就是根据字符模板进行模板匹配,因此需预先建立相应的字符模板。基于图像进行字符识别也可配置很多参数来大大提高字符的识别率。例如限定车牌头的字符,车牌各位字符的识别优先级等等。 以下通过大车黄牌号码为例,看看车牌识别的效果。 1、原始图片如下图所示: 2、限定车牌识别区域,本例中将裁剪掉上下左右各10%的区域: get_image_pointer1 (FullImage, Pointer, Type, Width, Height) gen_rectangle1 (Rectangle, Height*0.1, Width*0.1, Height*0.9, Width*0.9) reduce_domain (FullImage, Rectangle, Image) 看看裁剪结果:

3、把选中的区域灰度化,方便后续处理: decompose3 (Image, Red, Green, Blue) trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv') 灰度化后的效果图: 4、灰度阙值过滤,本例中只选中灰度值在100至255之间的区域,可根据实际情况进行相应的设置,然后进行降噪处理:

HALCON中filter函数

HALCON算子函数——Chapter 5 : Filter 5.1 Arithmetic 1. abs_image 功能:计算一个图像的绝对值(模数)。 2. add_image 功能:使两个图像相加。 3. div_image 功能:使两个图像相除。 4. invert_image 功能:使一个图像反像。 5. max_image 功能:按像素计算两个图像的最大值。 6. min_image 功能:按像素计算两个图像的最大小值。 7. mult_image 功能:使两个图像相乘。 8. scale_image 功能:为一个图像的灰度值分级。 9. sqrt_image 功能:计算一个图像的平方根。 10. sub_image 功能:使两个图像相减。 5.2 Bit 1. bit_and 功能:输入图像的所有像素的逐位与。 2. bit_lshift 功能:图像的所有像素的左移。3 . bit_mask 功能:使用位掩码的每个像素的逻辑与。 4. bit_not 功能:对像素的所有位求补。 5. bit_or 功能:输入图像的所有像素的逐位或。 6. bit_rshift 功能:图像的所有像素的右移。 7. bit_slice 功能:从像素中提取一位。 8. bit_xor 功能:输入图像的所有像素的逐位异或。5.3 Color

1. cfa_to_rgb 功能:把一个单通道颜色滤波阵列图像变成RGB图像。 2. gen_principal_comp_trans 功能:计算多通道图像的主要部分分析的转换矩阵。 3. linear_trans_color 功能:计算多通道图像的颜色值的一个仿射转换。 4. principal_comp 功能:计算多通道图像的主要部分。 5. rgb1_to_gray 功能:把一个RGB图像转变成一个灰度图像。 6. rgb3_to_gray 功能:把一个RGB图像转变成一个灰度图像。 7. trans_from_rgb 功能:把一个图像从RGB颜色空间转变成任意颜色空间。 8. trans_to_rgb 功能:把一个图像从任意颜色空间转变成RGB颜色空间。 5.4 Edges 1.close_edges 功能:使用边缘幅值图像消除边缘缺陷。 2. close_edges_length 功能:使用边缘幅值图像消除边缘缺陷。 3. derivate_gauss 功能:用高斯派生物对一个图像卷积。 4. diff_of_gauss 功能:近似高斯的拉普拉斯算子。 5. edges_color 功能:使用Canny、Deriche或者_Shen_滤波器提取颜色边缘。 6. edges_color_sub_pix 功能:使用Canny、Deriche或者_Shen_滤波器提取子像素精确颜色边缘。 7. edges_image 功能:使用Deriche、_Lanser、Shen或者_Canny滤

基于HALCON的双目立体视觉系统实现

基于HALCON的双目立体视觉系统实现 段德山(大恒图像公司) 摘要双目立体视觉的研究一直是机器视觉中的热点和难点。使用双目立体视觉系统可以确定任意物体的三维轮廓,并且可以得到轮廓上任意点的三维坐标。因此双目立体视觉系统可以应用在多个领域。本文将主要介绍如何基于HALCON实现双目立体视觉系统,以及立体视觉的基本理论、方法和相关技术,为搭建双目立体视觉系统和提高算法效率提供了参考。 关键词双目视觉三维重建立体匹配摄像机标定视差 双目立体视觉是机器视觉的一种重要形式,它是基于视差原理并由多幅图像获取物体三维几何信息的方法。双目立体视觉系统一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得被测物的两幅数字图像,并基于视差原理恢复出物体的三维几何信息,重建物体三维轮廓及位置。双目立体视觉系统在机器视觉领域有着广泛的应用前景。 HALCON是在世界范围内广泛使用的机器视觉软件。它拥有满足您各类机器视觉应用需求的完善的开发库。HALCON也包含Blob分析、形态学、模式识别、测量、三维摄像机定标、双目立体视觉等杰出的高级算法。HALCON支持Linux和Windows,并且可以通过C、C++、C#、Visual Basic和Delphi语言访问。另外HALCON与硬件无关,支持大多数图像采集卡及带有DirectShow和IEEE 1394驱动的采集设备,用户可以利用其开放式结构快速开发图像处理和机器视觉应用软件。 一.双目立体视觉相关基本理论介绍

1.1 双目立体视觉原理 双目立体视觉三维测量是基于视差原理,图1所示为简单的平视双目立体成像原理图,两摄像机的投影中心的连线的距离,即基线距为b。摄像机坐标系的原点在摄像机镜头的光心处,坐标系如图1所示。事实上摄像机的成像平面在镜头的光心后,图1中将左右成像平面绘制在镜头的光心前f处,这个虚拟的图像平面坐标系O1uv的u轴和v轴与和摄像机坐标系的x轴和y轴方向一致,这样可以简化计算过程。左右图像坐标系的原点在摄像机光轴与平面的交点O1和O2。空间中某点P在左图像和右图像中相应的坐标分别为P1(u1,v1)和P2(u2,v2)。假定两摄像机的图像在同一个平面上,则点P图像坐标的Y坐标相同,即v1=v2。由三角几何关系得到: 上式中(xc,yc,zc)为点P在左摄像机坐标系中的坐标,b为基线距,f为两个摄像机的焦距,(u1,v1)和(u2,v2)分别为点P在左图像和右图像中的坐标。 视差定义为某一点在两幅图像中相应点的位置差:

HALCON函数

HALCON函数 dev_close_window ( : : : ) 关闭活跃的图形窗口。 read_image ( : Image : FileName : ) ;加载图片 get_image_pointer1 ( Image : : : Pointer, Type, Width, Height ) ;获得图像的数据。如:类型(= ' 字节',' ' ',uint2 int2 等等) 和图像的尺寸( 的宽度和高度) dev_open_window( : :Row,Column,WidthHeight,Background :WindowHandle )打开一个图形的窗口。 dev_set_part ( : : Row1, Column1, Row2, Column2 : ) 修改图像显示的位置 dev_set_draw (’fill’)填满选择的区域 dev_set_draw (’margin’)显示的对象只有边缘线, dev_set_line_width (3) 线宽用Line Width 指定 threshold ( Image : Region : MinGray, MaxGray : ) 选取从输入图像灰度值的g 满足下列条件:MinGray < = g < = MaxGray 的像素。 dev_set_colored (number) 显示region 是用到的颜色数目 dev_set_color ( : : ColorName : ) 指定颜色 connection ( Region : ConnectedRegions : : ) 合并所有选定像素触摸相互连通区 fill_up ( Region : RegionFillUp : : ) 填补选择区域中空洞的部分 fill_up_shape ( Region : RegionFillUp : Feature, Min, Max : ) select_shape ( Regions : SelectedRegions : Features, Operation, Min, Max : ) 选择带有某些特征的区域,Operation 是运算,如“与”“或” smallest_rectangle1 ( Regions : : : Row1, Column1, Row2, Column2 ) 以矩形像素坐标的角落,Column1,Row2(Row1,Column2) 计算矩形区域( 平行输入坐标轴) 。 dev_display ( Object : : : ) 显示图片 disp_rectangle1 ( : : WindowHandle, Row1, Column1, Row2, Column2 : ) 显示的矩形排列成的。disp_rectangle1 显示一个或多个矩形窗口的产量。描述一

基于HALCON的模板匹配方法总结

基于HALCON的模板匹配方法总结 分类:halcon学习2013-06-26 16:02 47人阅读评论(0) 收藏举报 halcon形状匹配算法 德国MVTec公司开发的HALCON机器视觉开发软件,提供了许多的功能,在这里我主要学习和研究了其中的形状匹配的算法和流程。HDevelop开发环境中提供的匹配的方法主要有三种,即Component-Based、Gray-Value-Based、Shape-Based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配。这三种匹配的方法各具特点,分别适用于不同的图像特征,但都有创建模板和寻找模板的相同过程。这三种方法里面,我主要就第三种-基于形状的匹配,做了许多的实验,因此也做了基于形状匹配的物体识别,基于形状匹配的视频对象分割和基于形状匹配的视频对象跟踪这些研究,从中取得较好的效果,简化了用其他工具,比如VC++来开发的过程。在VC下往往针对不同的图像格式,就会弄的很头疼,更不用说编写图像特征提取、模板建立和搜寻模板的代码呢,我想其中间过程会很复杂,效果也不一定会显著。下面我就具体地谈谈基于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()则会很容易的帮我们找到模板的轮廓; ⑷创建好模板后,就可以打开另一幅图像,来进行模板匹配了。这个过程也就是在新图像中寻找与模板匹配的图像部分,这部分的工作就由函数find_shape_model()来承担了,它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的

相关文档
相关文档 最新文档