1、机器视觉实验指导书机器视觉软件 HALCON实验指导书实验 1 HALCON 概述,应用范例实验 2 HDevelop 介绍,操作编程范例实验 3 HALCON 编程接口 ,高级语言编程实验 4 HALCON 数据结构,采集硬件接口实验 5 HALCON 采集硬件配置 ,图像采集实验 6 HALCON 二维测量,配准测量与识别定位实验 7 HALCON 一维测量,尺寸测量实验 8 HALCON 三维测量, 3D 重建测量实验 1 HALCON 概述,应用范例实验 2 HDevelop 介绍,操作编程范例1 邮 票 分 割文件名 : stamps.dev第一个例子进行文件分析任务。图 5.1展示
2、了部分邮票目录页。它描述了两种不同的邮票:以图 形描述为主和以文字描述为主。为了使用这个例子,必须把文字描述转化为计算机所能理解的形式。你可能使用 OCR 编程方式, 你很快发现由于邮票的图形描述会导致大多数的可使用模块产生错误。 于是另一项任务必须要进行 预处理:对所有的邮票进行转化 (例如 , 把邮票转化为灰色有价值的纸 ,这样就可以使用 OCR 处 理邮票的剩余部分了。当创造一个应用程序来解决这种问题 , 对要处理的对象进行特征提取是非常有帮助的。 这个任务可 以为新手提供解决的这类问题一些的经验。一般而言,特征提取有如下步骤:邮票比纸要黑。邮票包含图像的部分不重叠。邮票具有最大最小尺寸
3、。邮票是长方形的。 图 5.1: Mic he l 图 表 的 部 分 页 .如果直接使用属性清单而非编程,任务会变得很简单。可惜由于语言的含糊,这是不可能的。所 以你需要建构具有精确的语法和语义的语言 , 尽可能接近非正式的描述。 使用 HDevelop 语法, 一 个通常的程序看起来如下:dev_close_window (read_image (Catalog, swiss1.tiffget_image_pointer1 (Catalog, Pointer, Type, Width, Heightdev_open_window (0, 0, Width/2, Height/2, blac
4、k, WindowIDdev_set_part (0, 0, Height-1, Width-1dev_set_draw (fillthreshold (Catalog, Dark, 0, 110dev_set_colored (6connection (Dark, ConnectedRegions fi l l _u p(ConnectedRegions, RegionFillUp select_shape(RegionFillUp, StampCandidates, area,and, 10000, 200000select_shape (StampCandidates,Stamps, c
5、ompactness, and, 1, 1.5smallest_rectangle1 (Stamps, Row1, Column1, Row2, Column2dev_display (Catalogdev_set_draw (margindev_set_line_width (3disp_rectangle1 (WindowID, Row1, Column1, Row2, Column2由于一些为止的操作符合不熟悉的语法,这个程序咋看起来会很晦涩。但如果仔细看一下这个操 作符,你就会注意以下说明的直接联系。threshold 选择全部图像像素黑暗比纸。connection 合并所有选定像素触
6、摸相互连通区。selectshape 选择区域面积 (属性 :面积 在指定区间内。sm allestrec tangle1计算每个区域的坐标 (连续 /栏 的包围矩形。一旦用户熟悉了承操作符和语法、转换就变得很容易。特别需要指出,对于程序来说,图像或者 加工区是否被处理并不重要,你可以使用相同的方法处理他们。 . 由于中间数据结构的内存管理 对用户来说是透明的,你可以不必理会它,你可以集中解决图像分析任务。图 5.2邮票分割处理的结果2毛细血管文件名 : vess el. dev这个例子的任务是分割毛细血管。尤其,你要把图 5.3(图像左 的细胞区域的上、下部分从图像的 中央区域区分开。区界线
7、很模糊 , 甚至以人的来认识他们都是困难的。乍看之下 , 似乎很难找到一 个分割准则 : 在这两幅图的灰度值既无明显清晰的边界也无明显的不同。所以用限定操作或边界 操作并不是很有用。解决这一问题的一个方法是利用区域的不同质地:细胞比有血液供应得部分 的更有角质化。 强调这种差异 , 你可以用纹理变换。 变换是线性纹理过滤加大对某些频率所要求的 典型纹理。 HALCON 的相应操作叫做纹理法则 。 你必须指明大小和过滤式。双方属性确定的频 率的性能。在这个程序里过滤器 ” el ” 使用 5 5的大小。在垂直方向和水平方向,它表现了一个 平滑推导。因此在垂直方向是加大结构。你不可以直接使用计算机
8、的处理结果(图 5.3 右 ,因 为他有太多的斑点。因此,你可以通过一个主要的过滤器产生纹理图像。通过这你可以的得到所 谓的纹理能量(图 5.4左 。 图 5.4: 毛细血管纹理能源 (左 和分割 (右 。选择的过滤面罩在这个计划是非常大的。面具大小在水平方向和垂直方向为 211和 61。 采用不 对称方式,因为在水平方向上血管是堵塞的。因此你得到一个图像上下部分比中间部分明亮。read_image (Image, vesseltexture_laws (Image, Texture, el, 5, 5mean_image (Texture, Energy, 211, 61bin_thresh
9、old (Energy, Vessel区分这些区域你只要找到合适的门槛。在这种情况下 , 我们有两种不同的纹理门限可以自动发 现。这是有操作符 b i n th r e s h o l d 完 成 的 , 这 也 同 样 门 限 的 结 果 和 这 样 的 血 管 。 图 5.4(右 显 示 了 分 割 的 结 果 。3 颗 粒文件名 : pa r t i c l e .dev这个程序示例处理的图像是来自于一个医学程序的处理结果。它显示载体上的微小颗粒(图 5.5左 。 图 5.5:微小颗粒(左大的物体 (右 。正如其他许多医学应用 , 目前已存在的对象必须进行评估统计。这意味着将有不同的对象
10、按大小 或其它属性提取和分类,这样你可以分析他们。为解决这一问题迈出的重要一步 , 是相关物件的图 像分割。统计评价为您不妨看看合适的文献统计。 在 我 们 的 例 子 有 两 个 类 型 的 对 象 : - 大的,明亮的颗粒 - 小的,暗的颗粒大的,明亮的颗粒由于它们的灰度值不同于它们的背景。比背景明亮意味着要使用门限方式处 理。你唯一要决定的是指定门限是自动还是使用经验值。在我们的例子里,一个固定的门限值 由于好的对比是非常重要的。因此,你要有一个好的计算方法 :read_image (Particle, particle threshold (Particle, Large, 110,
11、255变量其包含所有像素灰度值超过 110。你可以从图 5.5右边的图看到。发 现 小 的 ,暗 的 颗 粒 是 很 困 难 的 。指 出 门 限 的 第 一 步 努 力 说 明 没 有 固 定 的 门 限 使 用 与 所 有 的 颗 粒 。但 是 如 果 更 仔 细 的 观 察 你 就 会 发 现 小 的 颗 粒 比 它 们 周 围 的 环 境 明 亮 ,例 如 ,你 可 以 指 定 一 个 合 时 的 门 限 值 对 小 图 像 的 部 分 区 域 是 合 适 的 。现 在 , 把 这 个 发 现 转 化 为 算 法 是 容 易 的 , 一 种 决 定 门 限 的 值 的 本 地 方 法
12、。 另一个可能的解 决当地环境的定义由 n 阶窗口, 这种方法在本例中使用。 窗外的平均值作为一个近似的背景强度。 这可以通过选择低通滤波, 要么是平均要么是高斯滤波器过滤。 窗口尺寸大小决定于当地的环境,并应约两倍之多对象搜寻。这样显示平均直径 15像素 , 用口罩面积 31。由此所指定的象素比较原始灰度值的平均数。减少噪音引起的问题加上一个常量 (3。适当程序段看起来如下:mean_image (Particle, Mean, 31, 31dyn_threshold (Particle, Mean, Small, 3, lightdynthreshold 操作符比较两个像素的图像像素。可以
13、看到图 5.6(左分割结果。我们看到 , 所有的物体被发现 . 可惜, 边缘的大型粒子和一些非常小的区域, 由于噪音的出现也混 合在一起出现。我们一开始尝试压缩边界。这样做的会产生一个超过允许最大值的常数。你可以这样做:connection (Small, SmallSingleselect_shape (SmallSingle, ReallySmall, area, and, 1, 300采用这种方法你也有可能清除掉一些非常小的物体。 你只需要使用 selectshape 增调用增加最小 尺寸。 但是如果你再次检查分割结果, 你会发现一些已经造成像素提取第一分割。 因此你应该寻 找小颗粒以弥
14、补大的不足。 为了避免分割大颗粒附近的小颗粒, 这些都是建立在互补放大。 因此, 我们如下修改的程序。dilation_circle (Large, LargeDilation, 8.5complement (LargeDilation, NotLargereduce_domain (Particle, NotLarge, ParticleRedmean_image (ParticleRed, Mean, 31, 31dyn_threshold (ParticleRed, Mean, Small, 3, light 图 5.6 简单物体(左和 高级分割(右 这种方法显示出两个优点: 图 5.6
15、 小物体:简单(左和已经分割的(右dilation_circle (Large, LargeDilation, 8.5 complement (LargeDilation, NotLargereduce_domain (Particle, NotLarge, ParticleRedmean_image (ParticleRed, Mean, 31, 31dyn_threshold (ParticleRed, Mean, Small, 3, light这种方式有两种优势:第一,大颗粒的模型可以被用来提取小的颗粒。这增加了分割的质量;第 二,分割的进程被加速,因为分割的第二部分工作建立在部分图像之上。图 5.6的右边图像显示 了分割结果。可惜,图像仍然还有噪音。为了去掉它们,你要么使用以前说过的使用面积来去除,要么使用 opening 操作符,我们推荐使用第二种方法,因为它能平滑图像的边界。opening_circle (Small, SmallClean, 2.5这里 opening 操作符使用循环结构, 这个操作符所保存的区域最小是一个直径为 2.5的区域。 更小 的区域杯清除了。图 5.7左边的图显示了带有噪音的分割结果。右边的显示的是最终的结果。最终, 我们将要展示怎
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1