AD9850

AD9850
AD9850

原理框图

AD9850是AD公司生产的最高时钟为125 MHz、采用先进的CMOS技术的直接频率合成器,主要由可编程DDS系统、高性能模数变换器(DAC)和高速比较器3部分构成,能实现全数字编程控制的频率合成。

编辑本段AD9850原理

AD9850内含可编程DDS 系统和高速比较器,可实现全数字编程控制的频率合成。可编程DDS系统的核心是相位累加器,由一个加法器和一个N位相位寄存器组成,N 一般为24~32。每来一个外部参考时钟,相位寄存器便以步长M递加。相位寄存器的输出与相位控制字相加后可输入到正弦查询表地址上。正弦查询表包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0°~360°范围的一个相位点。查询表把输入地址的相位信息映射成正弦波幅度信号,然后驱动DAC 输出模拟量。

相位寄存器每过2N/ M 个外部参考时钟后返回到初始状态一次,相应地正弦查询表每经过一个循环也回到初始位置,从而使整个DDS 系统输出一个正弦波。输出的正弦波频率fout = M*fc/ 2的N次方,

fc 为外部参考时钟频率。

AD9850 采用32 位的相位累加器将信号截断成14 位输入到正弦查询表,查询表的输出再被截断成10 位后输入到DAC ,DAC 再输出两个互补的电流。DAC 满量程输出电流通过一个外接电阻RSET调节,典型值3.9千欧。将DAC 的输出经低通滤波后接到AD9850 内部的高速比较器上即可直接输出方波。在125MHz 的时钟下, 32 位频率控制字可使AD9850 输出频率分辨率达0. 0291Hz 。

编辑本段控制字与时序

AD9850有40 位控制字,32 位用于频率控制(低32位),5 位用于相位控制,1 位用于电源休眠( Powerdown) 控制,2位用于选择工作方式。这40 位控制字可通过并行或串行

方式输入到AD9850 。在并行装入方式中,通过8 位总线D0 —D7将数据输入到寄存器,在W - CL K 的上升沿装入8位数据,并把指针指向下一个输入寄存器,在重复5 次之后再在FQ - UD 上升沿把40位数据从输入寄存器装入到频率/ 相位数据寄存器(更新DDS 输出频率和相位) ,同时把地址指针复位到第一个输入寄存器。

AD9850的复位(RESET) 信号为高电平有效,且脉冲宽度不小于5 个参考时钟周期。AD9850的参考时钟频率一般远高于单片机的时钟频率(小厮所用为单片机89C51,使用12M 晶振),因此AD9850 的复位(RESET)端可与单片机的复位端直接相连。

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的程序 时间:2015-11-12 13:25:58阅读:4评论:0收藏:0[点我收藏+]标签:des si代码it la sp文件数据ha *关闭窗口 dev_close_window () dev_close_window () *打开指定大小、颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, ‘black‘, WindowHandle1) dev_update_pc (‘off‘) dev_update_window (‘off‘) dev_update_var (‘off‘) dev_update_time (‘off‘) dev_set_draw (‘margin‘) dev_set_line_width (3) * * Calibrate the camera.(标定相机)步骤一 * * 标定板描述文件 CaltabName := ‘caltab_big.descr‘ * make sure that the file ‘CaltabDescrName‘ is in the current directory, * the HALCONROOT/calib directory, or use an absolut path

*初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576] *物体在空间坐标系中的位姿数组 NStartPose := [] *行角点数组 NRow := [] *列角点数组 NCol := [] *X、Y、Z从标定表文件获取计算值 caltab_points (CaltabName, X, Y, Z) *创建空的图像元组 gen_empty_obj (Images) *图像的数目 NumImages := 10 *接下来for循环,依次读取、处理NumImages张图像 for I := 1 to NumImages by 1 *读取图像:Image得到图像数据 read_image (Image, ‘calib/calib-3d-coord-‘+I$‘02d‘) *将单个Image加入元组Images中 concat_obj (Images, Image, Images) *显示Image dev_display (Image) *在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值

Halcon

Halcon 目录 1、相机接入且拍摄 (2) 1.1 步骤 (2) 1.2 后续处理函数 (5) 2、相机标定 (7) 2.1标定步骤 (7) 3、手眼系统标定 (11) 3.1 标定步骤 (11) 4、图像坐标和机器臂坐标转换 (13) 4.1 转换步骤 (14) 5、模版匹配(基于形状) (19) 5.1 步骤 (19) 6、常见函数 (25) 6.1 图像分割 (25) 6.2 轮廓提取、处理 (31)

1、相机接入且拍摄 1.1 步骤 (1)连接相机 open_framegrabbe(Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn, AcqHandle) 在算子窗口内输入函数名,填入参数后点击“确定”按钮即可将函数加入程序中。 注: Name: 图像采集设备的名称 可通过以下步骤确定: 1、在Halcon菜单栏里点击“窗口”,选择“打开算子窗口”。 (若算子窗口已打开则直接进入第二步) 2、在“输入算子或函数”栏内输入“open_framegrabbe” 回车后出现下图

3、在“参数”栏中的Name后点击即可自动检测连接的设 备(笔记本电脑摄像头检测后为’DirectShow’) 此参数若随意填写,可能导致程序报错 HorizontaResolution、VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率 ImageWidth、ImageHeight:预期图像的宽度和高度部分StartRow、StartColumn:显示预期图像的开始坐标 Field:预期图像是一半的图像或者是完整图像 BitsPerChannel:每像素比特数和图像通道 ColorSpace:获取图像的输出形式(gray、raw、rgb、yuv、default)说明:此参数设置不同的值可以得到不同的图像效果,如设置

跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码

跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码 第一步:插入QQ摄像头,安装好驱动(有的可能免驱动) 第二步:打开HDevelop,点击助手—打开新的Image Acquisition—选中图像获取接口(I),然后点击检测,找到摄像头。如下图: 第三步:点击连接,将颜色空间设置为gray,然后点击实时,此时图像窗口中将显示采集到的图像,将物体放置到摄像头前,位置调至条码清晰。如下图:

集,点击插入代码,此时程序编辑器中将自动生成代码,如下图:

这时单击下运行按钮,将会采集一副图像并显示到图形窗口中。接下来我们将开始条码读取的工作。 第五步:在Do Something后插入如下代码: create_bar_code_model ([ ], [ ], BarCodeHandle) *由于不知道条码是何类型,因此条码类型设置为auto。CodeTypes := ['auto'] find_bar_code (Image, SymbolRegions, BarCodeHandle, CodeTypes, DecodedDataStrings) get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedDataTypes) 这时再重新运行程序,只要图像清晰,此时就可以读到条码了。条码区域会变成红色,而且在变量窗口中可以查到读取的条码类型和内容。如下图:

第六步:我们再添加代码,将读取结果直接显示在图像窗口中。 disp_message (WindowHandle, DecodedDataTypes[0]+': '+DecodedDataStrings[0], 'image', 100, 160, 'forest green', 'true') 此时会提示错误WindowHandle未被初始化。 *获取更多课程请Q智达工控学院:1613985351 因为图像采集助手会自动打开一个窗口,因此我们先将它关闭,然后自己创建一个窗口。在程序最开始加上这两句代码: dev_close_window () dev_open_window (0, 0, 512, 512, 'black', WindowHandle) 再重新运行程序,此时在读取到的条码在图像中写出来了。如下图:

Halcon机器视觉二维码实例及分步注解

Halcon机器视觉二维码实例及分步注解 [plain]view plaincopy 1.*2D Code generated by Image Acquisition01 2.*QR Code 3.dev_close_window() 4.dev_open_window(0,0,400,400,'black',WindowHandle) 5.*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle; 6.*相对于界面左上角第0行、第0列,大小为400×400像素,颜色为黑色。 7.open_framegrabber('DirectShow',1,1,0,0,0,0,'default',8,'rgb',-1,'false','defa ult','Gsou USB2.0Camera',0,-1,AcqHandle) 8.*打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子 9.*注意摄像头的名称,可以用工具栏中的“助手”——打开新的Image Acquisition获取摄像头及插入代码 10.grab_image_start(AcqHandle,-1) 11.while(true) 12.grab_image_async(Image,AcqHandle,-1) 13.create_data_code_2d_model('QR Code',[],[],DataCodeHandle) 14.*二维码的创建开头的算子,clear为结束清除的算子,见下。 15.set_display_font(WindowHandle,16,'mono','true','false') 16.dev_set_color('forest green') 17.dev_set_draw('margin') 18.dev_set_line_width(3) 19.set_data_code_2d_param(DataCodeHandle,'default_parameters','enhanced_recognition') 20.*设置选定参数的二维数据模型,参数详见这个算子 21.find_data_code_2d(Image,SymbolXLDs,DataCodeHandle,[],[],ResultHandles,DecodedDa taStrings) 22.*检测和读取二维代码符号,也支持读取二维数据模型的序列,参数详见这个算子 23.for i:=0to|ResultHandles|-1by1 24.select_obj(SymbolXLDs,SymbolXLD,i+1) 25.get_contour_xld(SymbolXLD,Row,Col) 26.get_string_extents(WindowHandle,DecodedDataStrings[i],Ascent,Descent,TxtWidth ,TxtHeight) 27.disp_message(WindowHandle,DecodedDataStrings[i],'image',max(Row-50),max([min( Col+30)-TxtWidth/2,1]),'black','true') 28.endfor 29.*这段for循环语句的目的是让解码到的字符串(二维码的内容)显示到二维码深绿色(forest green上 面定义)的解码区域框的行列位置。 30.*disp_message(WindowHandle,DecodedDataStrings,'window',12,12,'black','true') 31.*如果不需要设置显示到区域框中间的位置,而是显示到窗体的上方或其他位置,那么不需要上面那段for 语句,只需这段信息显示的语句即可显示到窗体相应位置。 32.if(|DecodedDataStrings|>0) 33.disp_continue_message(WindowHandle,'black','true')

halcon机器视觉试验平台设计方案与研究报告

封面

作者:PanHongliang 仅供个人学习 基于HALCON的机器视觉系统的研究与实现 摘要 近年来,机器视觉系统以其高效率、高可靠、低成本的特点在国外取得了广泛的应用。机器视觉系统适用于众多领域,例如工业自动化、医药业、制造业、农业等,弥补了人类视觉的很多不足。本文采用德国MVTec公司的专业机器视觉软件HALCON来开发机器视觉系统,提出了相关机器视觉实现方法,

并且在机器视觉实验平台上完成了一个弹簧片检测任务。 目前关注较多的是机器视觉系统的硬件部分,而机器视觉软件部分关注较少,一个先进的机器视觉系统除了具有高性能的硬件外,还需要有高性能的软件,虽然说许多常见的开发软件例如Mircosoft的Visual Studio、NI的LabWindows\CVI等等都可以开发机器视觉系统,但是开发周期比较长,针对性较弱,程序的复杂程度较高。而采用HALCON作为机器视觉和图像处理核心软件,不仅大大缩短了开发周期,降低了开发难度,而且可以参考HALCON 提供的众多机器视觉和图像处理例程来针对具体的任务做具体开发。 文章的第一章研究了机器视觉系统的组成、应用现状和发展,并且对机器视觉软件HALCON做了概述。第二章根据相关要求,选择合适的硬件单元,设计和搭建了VS-ZM1200机器视觉实验平台。第三章研究了机器视觉中常用的一些图像处理技术,重点讨论了在弹簧片检测任务中所采用的图像处理技术和算法,如图像的增强,分割,边缘检测等。第四章研究了机器视觉软件,重点研究了HALCON,并且对在Visual C++开发环境下如何使用HALCON编写的程序做了讨论。第五章介绍了在VS-ZM1200机器视觉实验平台上,使用HALCON和Visual C++开发的一套弹簧片检测系统,该系统完成关于弹簧片的尺寸参数测量和外观参数判别的任务。 第一章:绪论 1.1机器视觉概述 人类在征服自然、改造自然和推动社会进步的过程中,为了克服自身能力、能量的局限性,发明和创造了许多机器来辅助或代替人类完成任务。这类机器,我们通常称为智能机器,它能模拟人类的功能,能感知外部世界并有效地解决人所希望解决的问题。人类感知外部世界主要是通过视觉、触觉、听觉和嗅觉等感觉器官,而视觉,是人类最重要的感觉功能。视,就是看。觉,就是感觉、感知。通过看来感知外部世界丰富多采的信息。“百闻不如一见”,这句话生动地说明了视觉对获得客观世界信息的重要性。据统计,人所感知的外界信息有80%以上是由视觉得到的[1],通过视觉,我们可以感受到物体的位置,亮度以及物体之间的相互关系等。因此,对于智能机器来说,赋予机器人类的视觉功能对发展智能机器是极其重要的,由此形成了 一门新的学科———机器视觉。 机器视觉,就是用机器(通常是数字计算机)代替人眼来做测量及判断,对图像进行自动处理并报告“图像中有什么”的过程。美国制造工程师协会(SME Society of Manufacturing Engineers)机器视觉分会和美国机器人工业协会(RIA Robotic Industries Association)的自动化视觉分会对机器视觉下的定义为:“机器视觉是通过光学的装置和非接触的传感器自动地接收和处理一个真实物体的图像,以获得所需信息或用于控制机器人运动的装置”。具体来讲,是指通过镜头将被测目标转化为图像信号,投射至影像接受器件(一般为 CCD 元件)上再通过数字计算机进行分析处理。CCD是英文(Charge Coupling Device)的缩写,其中文含义为电荷耦合组件。当不同强度的光线照射在CCD表面,CCD

halcon软件上的例子程序

Halcon中光学字符识别中第一个例子程序 * bottle2.hdev: Segmenting and reading of numbers on a beer bottle * Program without visualization: "bottle.hdev" * * Step 0: Preparations * Specify the name of the font to use for reading the date on the bottle. * It is easiest to use the pre-trained font Industrial_0-9. If you have run the * program bottlet.hdev in this directory, you can activate the second line * to use the font trained with this program. FontName := 'Industrial_0-9' * FontName := 'bottle' * * Step 1: Segmentation dev_update_window ('off') read_image (Bottle, 'bottle2') get_image_size (Bottle, Width, Height) dev_close_window () dev_open_window (0, 0, 2*Width, 2*Height, 'black', WindowID) set_display_font (WindowID, 20, 'mono', 'true', 'false') dev_display (Bottle) disp_continue_message (WindowID, 'black', 'true') stop () threshold (Bottle, RawSegmentation, 0, 95) fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5) opening_circle (RemovedNoise, ThickStructures, 2.5) dev_display (Bottle) dev_set_color ('green') dev_display (ThickStructures) disp_continue_message (WindowID, 'black', 'true') stop () dev_set_draw ('margin') dev_set_line_width (3) dev_display (Bottle) dev_display (ThickStructures) disp_continue_message (WindowID, 'black', 'true') stop () fill_up (ThickStructures, Solid) dev_display (Bottle) dev_display (Solid) disp_continue_message (WindowID, 'black', 'true') stop () opening_rectangle1 (Solid, Cut, 1, 7) dev_display (Bottle) dev_display (Cut)

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,选择出符合要求的区域,如果不能满足还可以通过类似

halcon例程解读1

例程程序解读1 光学字符识别/bottle.hdev *******(1)首先,分割图像,获得每个数字区域 dev_update_window ('off') ****读取图像 read_image (Bottle, 'bottle2') ****获得图像大小 get_image_size (Bottle, Width, Height) dev_close_window () ****打开窗口,2倍 dev_open_window (0, 0, 2 * Width, 2 * Height, 'black', WindowID) set_display_font (WindowID, 20, 'mono', 'true', 'false') dev_display (Bottle) ****全局阈值处理,获得区域 threshold (Bottle, RawSegmentation, 0, 95) ****根据形状特征填充空洞 fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5) ****利用圆形结构元素,执行开运算。作用:消除小区域,光滑边界opening_circle (RemovedNoise, ThickStructures, 2.5) dev_display (Bottle) ****填充区域的孔洞 fill_up (ThickStructures, Solid) ****利用矩形结构元素,执行开运算;矩形宽1,高7,低于7的连接被截断opening_rectangle1 (Solid, Cut, 1, 7) ****计算连通区域 connection (Cut, ConnectedPatterns) ****计算区域交集 intersection (ConnectedPatterns, ThickStructures, NumberCandidates) ****对区域面积进行选择 select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)

跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量

跟我学机器视觉-HALCON学习例程中文 详解-IC引脚测量 * Lead Measurement: Example for the application of the measure object * including a lot of visualization operators. * First, the length of the leads is measured, then, their width and distance from each other. * * * First, read in the image and initialize the program read_image (Image, 'ic_pin') *****************取得图像第一通道的指针,同时得到图像宽度高度********* get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, 509, 509, WindowHandle) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_display (Image) ****************显示图像如下:**************************************** dev_set_draw ('margin') dev_set_line_width (3) * * Define and display the rectangular ROIs within which the edges will be detected Row := 55 RowBottom := 955

HALCON入门(4)HDevelop常用工具之OCR

HALCON入门(4)HDevelop常用工具之OCR 整理编辑:YWB 本文介绍如何借助HDevelop的工具以及插件快速完成字符的识别(OCR)与训练。 1字符识别 1.1打开OCR助手 通过菜单选择“助手”->“打开新的OCR”,我们可以打开一个OCR助手。 1.2加载图像 在使用插件之前我们需要先加载一副图像。点击浏览按钮并选择待检测文件,我们使用HALCON例程自带图像(%HALCONEXAMPLES%\images\ocr\bottle_label_01.jpg),加载后的文件会出现在HDevelop的图像窗口中。我们也可以通过其他方式进行图像的导入,如从图像窗口或从相机(图像采集助手)加载数据。

1.3选择字符区域 HALCON支持各种形状的感兴趣区域,圆形、椭圆、矩形等等。点击我们要绘制的形状,将鼠标移至图像窗口,通过拖拽的方式圈定文字的范围并点击鼠标右键确定。

1.4快速设置 当感兴趣区域选择好后,内部不同颜色的区域为分割好的字体,区域下方为识别到的字符。我们可以看到,目前的识别效果并不能令我们满意。这是由于字体的分割参数和图像不匹配所致。在算法的测试过程中,调参是一个令人非常头疼的工作。而在OCR助手中,我们可以通过“快速设置”的方式对字符分割参数进行自适应设置。 首先填写我们所期望读出的数据,并在复选框中勾选与字体特征对应的选项,如字体为浅色时需要勾选“字符是暗背景上的亮字符”选项,又如对于激光刻印或一些冲压字符需勾选“字符是由很多孤立的点组成…”选项。最后点击“应用快速设置”完成参数调整。

通过快速设置可以轻松实现对比度较好图像的字符分割与识别,由于现场的光照和工作环境可能导致图像出现亮度或对比度方面的变化,因此在测试时我们需要使用插件加载更多不同工作环境的图像,以确保当前参数可以适应各种工作状态。 1.5微调参数 在“设置”选项卡中,加载不同的图像并调整感兴趣区域,对当前分割和提取参数在不同图像上进行测试。出现某些图像的识别不符合我们的预期时,可以再次进行“应用快速设置”或对当前参数进行微调。 有关字符提取的所有参数,在“分割”选项卡下均可找到,我们需要根据不同的情况对它们进行修改。下面为大家介绍几个常用参数。

Halcon例子说明

Halcon实例说明 1、inspect_bottle_mouth.hdev:易拉管缺陷检测。用到了极坐标变换 2、circular_barcode.hdev:一维条码检测,用到坐标变换。弧形拉直。用到了极坐标变换 3、surface_scratch.hdev:表面划伤检测。 4、ball.hdev:PCB板焊锡点检测。用到常用算子及开运算opening。 5、best_match_rot_mg_clip1.hdev:带方向的基本模版匹配 6、bin_threshold.hdev:计算图片中的灰度直方图 7、bin_threshold2.hdev:程序说明怎样bin_threshold与threshold之间的相等转换计算。 8、bottle.hdev:OCR字符的检测 9、bottlet.hdev:OCR字符的检测 10、check_blister.hdev:药品颗粒检测。用一些常用算子及坐标变换,图片旋转。 11、check_bottle_crate.hdev:圆孔检测。用到opening_circle、select_shape等常用处理算子。 12、check_hazelnut_wafers.hdev:检测物体表面缺陷。很好的用到了开运算算子opening_circle和闭运算算子closing_circle 13、check_smd_tilt.hdev:检测SMD用到算子sobel_amp边缘检测,measure_projection 14、check_soft_cheese.hdev:用到算子有彩色图转换为灰度图(rgb1_to_gray),模版匹配 15、create_shape_model、find_shape_models,图像坐标变转vector_angle_to_rigid 、 affine_trans_contour_xld等算子。 16、circles.hdev:圆拟合算子(fit_circle_contour_xld),边缘检测(edges_sub_pix)。 17、circular_barcode.hdev:求圆环区域及图像坐标变转vector_angle_to_rigid。 18、clip.hdev;clip_contours_xld.hdev;clip_region.hdev:裁剪函数运用。 19、close_contour_xld.hdev:主要用到close_contours_xld算子。 20、codabar.hdev;code128.hdev;code39.hdev:一维条码的读取,find_bar_code。 21、color_fuses.hdev:RGB图像的处理,主要用到算子: decompose3, trans_from_rgb。 22、color_segmentation_pizza.hdev::RGB彩色物体图像处理。主要用到算子: decompose3, trans_from_rgb。 23、contlength.hdev:计算region的长度,主要用到算子: contlength。 24、count_fish_sticks:计算鱼条,用到遍历全文件下图片,很好的运用closing_circle、difference算子提取所需孔洞,measure_projection、create_funct_1d_array、local_min_max_funct_1d、get_y_value_funct_1d 等利用灰度值差分离相连物体间的边缘。还不是很明白 count_pellets.hdev:很好的运用了erosion_circle,dilation_circle来分离相连的物体,很精典的例子。形态学算法。

[精华]博客halcon进修经历

[精华]博客halcon进修经历 HALCON 是当今machine vision技术的代表,它总是以最新科技为基础,提供了现今市场中最强大的vision library。除了提供了完整的标准 machine vision功能,还有一系列优异的功能,例如,3D相机校正,形状以及原件导向的匹配,次像元精度的物体撷取,计算,利用双像立体量测,任意形状的 ROI,以及更多的功能。 用HALCON 来开发程序的流程: 1 、利用 HDevelop 检视分析影像,建立计算雏形,最后完成视觉计算方法的发展。程序可以分成不同的子程序,每个procedures 可以只做一件事,像初始化,计算,或是清除。主程序用于呼叫其它子程序,传递影像或是接收显示结果。最后,程序输出成我们要用的程序代码,接续下一步工作。 2 、完整的程序发展是在程序设计环境中进行,像是 Microsoft Visual Studio 。由 HDevelop 输出的程序代码,透过指令加入程序中 ( 例如 include) 。至于程序的接口等等则是利用程序语言的功能来建构,接下来,compiled and linked ,产生应用程序。自行撰写的程序和 HALCON library 一起装入机器中出货,或是将程序卖到客户处。 参数和数据结构: (iconic ,例如影HALCON 有两种基本的数据型态 : 图像数据 像 ) 以及控制数据 ( control ,例如变量,整数,字符串,handle 等 等 ) 。所有运算子的参数都是以相同的方式排列:输入图像,输出图像,输入控制,输出控制。当然,并非所有的运算子都具有上列四类参数,不过参数排列的次序依旧相同。

Halcon识别一维码的代码实例

Stage I's hdev的代码实例 =============================================================================== * Autodiscrimination * * Code generated by Image Acquisition 03 * 获取条形码,并计算及显示解码时间,并从规定读取的条码类型范围中读取被解码的条码类型也可设置成不规定条码类型即自动识别,但会增加解码时间,甚至出现误读的情况。 * 可读取多个不同类型的条码,并且多个条码用不同颜色的区域框区分,且读取出来的信息也以相应的颜色做区分 dev_close_window () dev_open_window (0, 0, 600, 600, 'black', WindowHandle) *先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle; 《 *相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Gsou Camera', 0, -1, AcqHandle) * 打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子注意,采集器名称不同要更改,或者用助手获取也可以。grab_image_start (AcqHandle, -1) while (true) grab_image_async (Image, AcqHandle, -1) *开始条形码识别 create_bar_code_model ([], [], BarCodeHandle) *必备的创建条码解码的开头,下面有一段结束代码 dev_update_var ('off') dev_update_pc ('off') ,

halcon例程解读4

例程解读4 应用范围/一般/gen_region_histo.hdev ******************************************************** read_image (Image, 'fabrik') ***读取图片 gen_rectangle1 (Rectangle, 345, 280, 410, 350) ***生成矩形区域ROT gray_histo (Rectangle, Image, AbsoluteHisto, RelativeHisto) ***获得矩形区域内的图像灰度分布(绝对直方图和相对直方图) tuple_sum(RelativeHisto,Sum) ***相对直方图求和(等于1),(视频中单独添加的程序) create_funct_1d_array (AbsoluteHisto, Function) ***创建一维函数值数组 smooth_funct_1d_gauss (Function, 2, SmoothedFunction) ***高斯光滑处理一维函数值数组 funct_1d_to_pairs (SmoothedFunction, XValues, YValues) ***针对函数分解出X,Y值 dev_set_draw ('margin') ***设置区域,显示边缘 dev_set_color ('red') ***设置颜色 gen_region_histo (HistoRegion1, AbsoluteHisto, 255, 255, 1) ***画出绝对直方图(宽和高都是256)【应该是由参数1确定的吧】(255,255)为直方图圆心坐标,1为大小比例系数 gen_region_histo (HistoRegion2, YValues, 255, 255, 1) ***画出光滑后的绝对直方图(宽和高都是256) dev_display (Image) //显示原图 dev_display (HistoRegion1) //显示绝对直方图 dev_display (Rectangle) //显示生成的矩形区域 dev_set_color ('green') // 设置颜色 dev_display (HistoRegion2) //显示光滑后的绝对直方图

Halcon算子笔记1__通过局部阈值和形态后处理提取表面划痕

*surface_scratch.hdev: *extraction of surface scratches via local thresholding and morphological post-processing *通过局部阈值和形态后处理提取表面划痕 *关闭活动图形窗口 dev_close_window () *在程序执行中指定输出行为为off。 dev_update_window ('off') *step: acquire image步骤:获取图像 * ****读入文件名为'surface_scratch'的图像到Image read_image (Image, 'surface_scratch') get_image_size (Image, Width, Height) *打开一个和Image宽高比一致的图像窗口 dev_open_window_fit_image (Image, 0, 0, Width, Width, WindowID) *设置窗口字体大小为12,字体类型为Courier,粗体不倾斜字体。 set_display_font (WindowID, 12, 'Courier', 'true', 'false') *设置填充模式为'margin' dev_set_draw ('margin') *定义输出轮廓线宽为4 dev_set_line_width (4) *显示Image到窗口dev_display (Image) *WindowID窗口使用黑色字体在一个方框内显示按"F5"继续运行字体,并注册F5消息处理disp_continue_message (WindowID, 'black', 'true') stop () * step: segment image 步骤:图像分割 *-> using a local threshold使用局部阈值 *对Image进行7*7均值滤波 mean_image (Image, ImageMean, 7, 7) * 用均值滤波图像作为二值化阈值图像,返回小于灰度值小于该点阈值-5的图像。 dyn_threshold(Image,ImageMean,DarkPixels,5,’dark’) //利用本地阈值进行图像分割 *->extract connected components提取连通分量 connection(DarkPixels,ConnectedRegions) //对区域进行连通运算 dev_set_colored(12) //设置区域显示的颜色数目 dev_display(ConnectedRegions) //显示图像 ?disp_continue_message(WindowID,’black’,’true’)?//显示继续提示,提示继续 stop() ***** *step: process regions 处理区域 ***** *->select large regions

相关主题
相关文档
最新文档