Halcon机器视觉实验指导书(共107页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Halcon机器视觉实验指导书(共107页).doc》由会员分享,可在线阅读,更多相关《Halcon机器视觉实验指导书(共107页).doc(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上机器视觉软件HALCON实验指导书目录实验1HALCON 概述,应用范例实验2HDevelop介绍,操作编程范例实验3HALCON编程接口 ,高级语言编程实验4HALCON数据结构,采集硬件接口实验5HALCON采集硬件配置 ,图像采集实验6HALCON二维测量,配准测量与识别定位实验7HALCON一维测量,尺寸测量实验8HALCON三维测量,3D重建测量实验1HALCON 概述,应用范例实验2HDevelop介绍,操作编程范例1 邮票分割文件名: stamps.dev第一个例子进行文件分析任务。图5.1展示了部分邮票目录页。它描述了两种不同的邮票:以图形描述为主和以
2、文字描述为主。为了使用这个例子,必须把文字描述转化为计算机所能理解的形式。你可能使用OCR编程方式,你很快发现由于邮票的图形描述会导致大多数的可使用模块产生错误。于是另一项任务必须要进行预处理:对所有的邮票进行转化 (例如,把邮票转化为灰色有价值的纸),这样就可以使用OCR处理邮票的剩余部分了。当创造一个应用程序来解决这种问题,对要处理的对象进行特征提取是非常有帮助的。这个任务可以为新手提供解决的这类问题一些的经验。l 一般而言,特征提取有如下步骤:邮票比纸要黑。l 邮票包含图像的部分不重叠。l 邮票具有最大最小尺寸。l 邮票是长方形的。 图5.1: Michel图表的部分页.如果直接使用属性
3、清单而非编程,任务会变得很简单。可惜由于语言的含糊,这是不可能的。所以你需要建构具有精确的语法和语义的语言,尽可能接近非正式的描述。使用HDevelop语法,一个通常的程序看起来如下:dev_close_window ()read_image (Catalog, swiss1.tiff)get_image_pointer1 (Catalog, Pointer, Type, Width, Height)dev_open_window (0, 0, Width/2, Height/2, black, WindowID)dev_set_part (0, 0, Height-1, Width-1) d
4、ev_set_draw (fill)threshold (Catalog, Dark, 0, 110) dev_set_colored (6)connection (Dark, ConnectedRegions) fill_up (ConnectedRegions, RegionFillUp) select_shape (RegionFillUp, StampCandidates, area,and, 10000, ) select_shape (StampCandidates, Stamps, compactness, and, 1, 1.5)smallest_rectangle1 (Sta
5、mps, Row1, Column1, Row2, Column2)dev_display (Catalog)dev_set_draw (margin)dev_set_line_width (3)disp_rectangle1 (WindowID, Row1, Column1, Row2, Column2)由于一些为止的操作符合不熟悉的语法,这个程序咋看起来会很晦涩。但如果仔细看一下这个操作符,你就会注意以下说明的直接联系。threshold 选择全部图像像素黑暗比值。connection 合并所有选定像素触摸相互连通区。selectshape 选择区域面积(属性:面积)在指定区间内。 sma
6、llestrectangle1计算每个区域的坐标(连续/栏)的包围矩形。一旦用户熟悉了承操作符和语法、转换就变得很容易。特别需要指出,对于程序来说,图像或者加工区是否被处理并不重要,你可以使用相同的方法处理他们。. 由于中间数据结构的内存管理对用户来说是透明的,你可以不必理会它,你可以集中解决图像分析任务。 图5.2邮票分割处理的结果2毛细血管 文件名: vessel. dev这个例子的任务是分割毛细血管。尤其,你要把图5.3(图像左)的细胞区域的上、下部分从图像的中央区域区分开。区界线很模糊,甚至以人的来认识他们都是困难的。乍看之下,似乎很难找到一个分割准则: 在这两幅图的灰度值既无明显清晰
7、的边界也无明显的不同。所以用限定操作或边界操作并不是很有用。解决这一问题的一个方法是利用区域的不同质地:细胞比有血液供应得部分的更有角质化。强调这种差异,你可以用纹理变换。变换是线性纹理过滤加大对某些频率所要求的典型纹理。HALCON的相应操作叫做纹理法则。你必须指明大小和过滤式。双方属性确定的频率的性能。在这个程序里过滤器”el”使用 5 5的大小。在垂直方向和水平方向,它表现了一个平滑推导。因此在垂直方向是加大结构。你不可以直接使用计算机的处理结果(图5.3 右),因为他有太多的斑点。因此,你可以通过一个主要的过滤器产生纹理图像。通过这你可以的得到所谓的纹理能量(图5.4左)。 图5.4:
8、 毛细血管纹理能源(左)和分割(右)。 选择的过滤面罩在这个计划是非常大的。面具大小在水平方向和垂直方向为211和61。 采用不对称方式,因为在水平方向上血管是堵塞的。因此你得到一个图像上下部分比中间部分明亮。read_image (Image, vessel)texture_laws (Image, Texture, el, 5, 5) mean_image (Texture, Energy, 211, 61) bin_threshold (Energy, Vessel)区分这些区域你只要找到合适的门槛。在这种情况下,我们有两种不同的纹理门限可以自动发现。这是有操作符binthreshold
9、完成的,这也同样门限的结果和这样的血管。图5.4(右)显示了分割的结果。3 颗粒文件名: particle .dev这个程序示例处理的图像是来自于一个医学程序的处理结果。它显示载体上的微小颗粒(图5.5左)。 图5.5:微小颗粒(左)大的物体 (右)。正如其他许多医学应用, 目前已存在的对象必须进行评估统计。这意味着将有不同的对象按大小或其它属性提取和分类,这样你可以分析他们。为解决这一问题迈出的重要一步,是相关物件的图像分割。统计评价为您不妨看看合适的文献统计。在我们的例子有两个类型的对象:- 大的,明亮的颗粒- 小的,暗的颗粒大的,明亮的颗粒由于它们的灰度值不同于它们的背景。比背景明亮意味
10、着要使用门限方式处理。你唯一要决定的是指定门限是自动还是使用经验值。在我们的例子里,一个固定的门限值由于好的对比是非常重要的。因此,你要有一个好的计算方法:read_image (Particle, particle) threshold (Particle, Large, 110, 255)变量其包含所有像素灰度值超过110。你可以从图5.5右边的图看到。发现小的,暗的颗粒是很困难的。指出门限的第一步努力说明没有固定的门限使用与所有的颗粒。但是如果更仔细的观察你就会发现小的颗粒比它们周围的环境明亮,例如,你可以指定一个合时的门限值对小图像的部分区域是合适的。现在,把这个发现转化为算法是容易的
11、,一种决定门限的值的本地方法。另一个可能的解决当地环境的定义由n阶窗口,这种方法在本例中使用。窗外的平均值作为一个近似的背景强度。这可以通过选择低通滤波,要么是平均要么是高斯滤波器过滤。窗口尺寸大小决定于当地的环境,并应约两倍之多对象搜寻。这样显示平均直径15像素,用口罩面积31。由此所指定的象素比较原始灰度值的平均数。减少噪音引起的问题加上一个常量(3)。 适当程序段看起来如下:mean_image (Particle, Mean, 31, 31)dyn_threshold (Particle, Mean, Small, 3, light)dynthreshold操作符比较两个像素的图像像素
12、。可以看到图5.6(左)分割结果。我们看到,所有的物体被发现. 可惜,边缘的大型粒子和一些非常小的区域,由于噪音的出现也混合在一起出现。我们一开始尝试压缩边界。这样做的会产生一个超过允许最大值的常数。你可以这样做:connection (Small, SmallSingle)select_shape (SmallSingle, ReallySmall, area, and, 1, 300)采用这种方法你也有可能清除掉一些非常小的物体。你只需要使用selectshape增调用增加最小尺寸。但是如果你再次检查分割结果, 你会发现一些已经造成像素提取第一分割。因此你应该寻找小颗粒以弥补大的不足。为了
13、避免分割大颗粒附近的小颗粒,这些都是建立在互补放大。因此,我们如下修改的程序。 dilation_circle (Large, LargeDilation, 8.5)complement (LargeDilation, NotLarge)reduce_domain (Particle, NotLarge, ParticleRed) mean_image (ParticleRed, Mean, 31, 31)dyn_threshold (ParticleRed, Mean, Small, 3, light) 图5.6 简单物体(左)和 高级分割(右)这种方法显示出两个优点: 图5.6 小物体:简
14、单(左)和已经分割的(右)dilation_circle (Large, LargeDilation, 8.5)complement (LargeDilation, NotLarge)reduce_domain (Particle, NotLarge, ParticleRed) mean_image (ParticleRed, Mean, 31, 31)dyn_threshold (ParticleRed, Mean, Small, 3, light)这种方式有两种优势:第一,大颗粒的模型可以被用来提取小的颗粒。这增加了分割的质量;第二,分割的进程被加速,因为分割的第二部分工作建立在部分图像之
15、上。图5.6的右边图像显示了分割结果。可惜,图像仍然还有噪音。为了去掉它们,你要么使用以前说过的使用面积来去除,要么使用opening操作符,我们推荐使用第二种方法,因为它能平滑图像的边界。opening_circle (Small, SmallClean, 2.5)这里opening操作符使用循环结构,这个操作符所保存的区域最小是一个直径为2.5的区域。更小的区域杯清除了。图5.7左边的图显示了带有噪音的分割结果。右边的显示的是最终的结果。最终,我们将要展示怎样使用直接鼠标来选择区域的例子。在这里,有一个循环检测一直在执行,直到你按下鼠标的左键或者右键,操作符get mbutton 返回你按
16、下的键以及你按键的位置。这些信息被用来选择对象在接下来的相应得程序部分。 图5.7 噪音去除分割(左)和最终结果( 右)dev_clear_window (WindowID)connection (SmallClean, SmallSingle)Button := 1dev_set_color (red)while (Button = 1)get_mbutton (WindowID, Row, Column, Button)select_region_point (SmallSingle, OneObject, Row, Column) 首先,窗口通过devclearwindow被清除,接着c
17、onnection计算所有相连的部件来允许选择单个区域。在HDevelop窗口也显示了区域部件。在这里你可以使用红色来标记所选择的区域,通过给变量button赋值1,查询鼠标的状态,选择被选区域来初始化循环。作为示例平均灰度和标准分割都已被计算好了。你只需按下鼠标左键启动循环,按下任何鼠标键可以停止操作。4 年轮文件名:wood.dev所有人都知道通过计算树木的年轮来计算它们的年龄。这个示例程序也是这样做的。第一步是分割年轮,这很容易,因为你可以清楚地分清明暗线。接着使用动态门限(dynthreshold),你使用带有15x15的平均滤波来达到一个合适门限图像。这个分割图像含有非常小的区域没有
18、年轮。为了去掉它们你使用connection来创建连接部件,selectshape压缩所有太小的区域。计算年轮变得很困难,因为在图像中表现为柱状(图5.8)。 图5.8 树的年轮这样我们建议使用如下方法:你使用鼠标来确定线的开始点和结束点。这样年轮的交叉点可以计算出来。这可以通过如下HALCON操作:开始与结束点可以被它们的x-和y-坐标来标记,使用genregionline来转化为线段,使用intersection来分割年轮。连接的区域就是年轮。完整的程序如下:dev_close_window ()read_image (WoodPiece1, woodring)get_image_poin
19、ter1 (WoodPiece1, Pointer, Type, Width, Height)dev_open_window (0, 0, Width/2, Height/2, black, WindowID) mean_image (WoodPiece1, ImageMean, 9, 9) dyn_threshold (WoodPiece1, ImageMean, Regions, 5.0, dark) threshold (WoodPiece1, Dark, 0, 90)dilation_rectangle1 (Dark, DarkDilation, 30, 7) difference (
20、Regions, DarkDilation, RegionBright) connection (RegionBright, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions,area, and, 30, )get_mbutton (WindowID, Row1, Column1, Button1) get_mbutton (WindowID, Row2, Column2, Button2) gen_region_line (Line, Row1, Column1, Row2, Column2) intersec
21、tion (Line, SelectedRegions, Inters) connection (Inters, ConnectedInters)Number := |ConnectedInters|5 焊接文件名:ball.dev这是第一个涉及质量检测的例子。这个例子用来检测焊点。图5.9展示了两种典型的虚焊。 图5.9 虚焊图形虚焊的边界和连接线看起来是暗的。这样你可以使用门限。因为背景也是黑的,我们要先提取虚焊在作分割之前。虚焊是明亮的,我们可以通过灰度来选择它们的像素。read_image (Bond, die3)threshold (Bond, Bright, 120, 255) s
22、hape_trans (Bright, Die, rectangle2)虚焊的像素由于使用门限失去的可以通过赫尔计算恢复。由于虚焊是矩形的,可能有些轻微的变动在收集的过程中,我们可以使用最小的长方形作为赫尔。 现在你可以开始分割焊点的线和连接点。因为只有这部分区域是我们感兴趣,你可以将分割只限定在这部分区域。所有的像素低的区域是属于连接线。不幸的是还有一些像素高的区域是分割没有发现的。你可以使用fillupshape来填充哪些区域。在这种情况下,这个区域使用某种大小得象素值填充。reduce_domain (Bond, Die, DieGray) threshold (DieGray, Wir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Halcon 机器 视觉 实验 指导书 107
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内