搜档网
当前位置:搜档网 › Halcon应用攻略

Halcon应用攻略

Halcon应用攻略
Halcon应用攻略

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++(面向对象)

可以以面向对象的方式重写代码,也即利用类及类的成员函数;

在这种模式下,控制变量的类型仍未HTuple,而图形数据可以由多种类型,如HImage等;其他语言(略)

4、Halcon数据结构

两类参数:图形参数Iconic (image, region, XLD)与控制参数Control (string, integer, real, handle),在Halcon算子的参数中,依次为:输入图形参数、输出图形参数、输入控制参数、输出控制参数;并且其输入参数不会被算子改变。

图形参数Iconic:

Images

Multiple channels

Arbitrary region of interest

Multiple pixel types(byte, (u)int1/2/4,real, complex, direction, cyclic, vector_field) byte, uint2 //灰度图像的标准编码

int1, int2 //Difference of two images or derivates with integer precision(??)int4

//两幅灰度图的频谱

direction //图片边缘的梯度方向

real //边缘提取及特定灰度值的轮廓

complex //图片频率分布

cyclic //Assigning one "gray" value to each color(??)

vector_field //连续图形的光学流分布

Regions

Efficient data structure (runlength encoding)

Extensive set of operators

Fastest morphology on the market

图形编码中,需要了解row 和run 两个术语;也是Halcon Region存储的方式

E x tended L ine D escription (XLD)

Subpixel accurate line and edge detection

Generic point list based data structure

Handling of contours, polygons, lines, parallels, etc.

此外,Halcon支持的类型还包括图形元组、控制变量元组及句柄:

元组的概念,使得可以用一个变量传递数个对象,可以由重载后的函数来进行处理;图形元组的下标从1开始,控制变量元组下标从0开始;句柄则可以用来描述窗体、文件等等,句柄不能是常量。

5、Halcon语言

输入控制参数可以是表达式,但图形参数、输出参数均应为变量;

String类型变量由单引号’括起来;此外还有一些特殊字符;

Boolean型变量包括true ( = 1 )、false ( = 0 ) ;不为零的整数将被认为true;但绝大多数的Halcon函数接受字符串型的表达:’true’‘false’,而非逻辑型表达;

函数返回常量用于标识错误:

H_MSG_TRUE no error 2

H_MSG_FALSE l ogical false 3

H_MSG_FAIL operator did not succeed 5

可以放在try…catch…endtry块中,也可以用dev_error_var()与dev_set_check() 来捕获;

控制语句结构:(与一般语言略有不同,它们也有输入输出变量)

if ... endif / if ... else ... endif / if ... elseif ... else ... endif

for ... endfor

while ... endwhile

repeat ... until

此外,也有关键字break、continue、return、exit、stop 用来控制语句的执行;

赋值语句在Halcon中也被当作函数来使用:

标准赋值

assign(Expression, ResultVariable) //编辑形式,永远都是输入在前,输出在后 ResultVariable := Expression //代码形式

元组插入赋值

insert(Tuple, NewValue, Index, Tuple) //编辑形式

Tuple[Index] := NewValue //代码形式

控制变量元组操作

[t,t] concatenation of tuples

|t| number of elements

t[i] selection of an element

t[i:j] selection of a part of a tuple

subset(t1,t2) selection from t1 by indices in t2

图形元组操作对应函数

[] gen_empty_obj ()

|t| count_obj (p, num)

[t1,t2] concat_obj (p1, p2, q)

t[i] select_obj (p, q, i+1)

t[i:j] copy_obj (p, q, i+1, j-i+1)

subset(t1,t2) select_obj (p, q, t2+1)

元组的数学运算,如:A * B,令m = |A|, n = |B|;

若m、n不相等,且都大于1,则错误;否则返回三种情况:

m=n=1,返回一个值;

m=n>1,返回一个包含m个数的元组,值为两元组各对于值的操作结果;

m>1,n=1,返回一个包含m个数的元组,值为第二个数与第一元组各值的操作结果;Halcon 的数学运算

算术运算

a / a division

a % a rest of the integer division

a * a m ultiplication

v + v addition and concatenation of strings

a - a subtraction

-a negation

位运算

lsh(i,i) left shift

rsh(i,i) right shift

i band i bit-wise and

i bor i bit-wise or

i bxor i bit-wise xor

bnot i bit-wise complement

字符串操作

v$s conversion to string //字符串的格式化,有很丰富的参数 v + v concatenation of strings and addition

strchr(s,s) search character in string

strstr(s,s) search substring

strrchr(s,s) search character in string (reverse)

strrstr(s,s) search substring (reverse)

strlen(s) length of string

s{i} selection of one character

s{i:i} selection of substring

split(s,s) splitting to substrings

比较操作符

t < t less than

t > t greater than

t <= t less or equal

t >= t greater or equal

t = t equal

t # t not equal

逻辑操作符

not l negation

l and l logical ’and’

l or l logical ’or’

l xor l logical ’xor’

数学函数

sin(a) sine of a

cos(a) cosine of a

tan(a) tangent of a

asin(a) arc sine of a in the interval [-π/2, π/ 2], a ∈ [-1, 1]

acos(a) arc cosine a in the interval [-π/2, π/2], a ∈ [-1, 1]

atan(a) arc tangent a in the interval [-π/2, π/2], a ∈ [-1, 1]

atan2(a,b) arc tangent a/b in the interval [-π, π]

sinh(a) hyperbolic sine of a

cosh(a) hyperbolic cosine of a

tanh(a) hyperbolic tangent of a

exp(a) exponential function

log(a) natural logarithm, a> 0

log10(a) decade logarithm, a> 0

pow(a1,a2) power

ldexp(a1,a2) a1 pow(2,a2)

其他操作(统计、随机数、符号函数等)

min(t) minimum value of the tuple

max(t) maximum value of the tuple

min2(t1,t2) element-wise minimum of two tuples

max2(t1,t2) element-wise maximum of two tuples

find(t1,t2) indices of all occurrences of t1 within t2

rand(i) create random values from 0..1 (number specified by i)

sgn(a) element-wise sign of a tuple

sum(t) sum of all elements or string concatenation

cumul(t) cumulative histogram of a tuple

mean(a) mean value

deviation(a) standard deviation

sqrt(a) square root of a

deg(a) convert radians to degrees

rad(a) convert degrees to radians

real(a) convert integer to real

int(a) convert a real to integer

round(a) convert real to integer

number(v) convert string to a number

is_number(v) test if value is a number

abs(a) absolute value of a (integer or real)

fabs(a) absolute value of a (always real)

ceil(a) smallest integer value not smaller than a

floor(a) largest integer value not greater than a

fmod(a1,a2) fractional part of a1/a2, with the same sign as a1

sort(t) sorting in increasing order

uniq(t) eliminate duplicates of neighboring values(typically used in combination with sort)

sort_index(t) return index instead of values

median(t) Median value of a tuple (numbers)

select_rank(t,v) Select the element (number) with the given rank

inverse(t) reverse the order of the values

subset(t1,t2) selection from t1 by indices in t2

remove(t1,t2) Remove of values with the given indices

environment(s) value of an environment variable

ord(a) ASCII number of a character

chr(a) convert an ASCII number to a character

ords(s) ASCII number of a tuple of strings

chrt(i) convert a tuple of integers into a string

6、Halcon名称解释

Operator: A procedure of the HALCON library used in HDevelop or one of the language interfaces.

Procedure (of HDevelop): A subroutine defined for the use inside HDevelop.

Region: Result of a segmentation like threshold. In other systems called blob, area, binary image, or island. Implemented using runlength encoding.

XLD: Extended Line Description. Universal data structure used to handle contour based data. Mainly used in the context of subpixel precise measurement.

Domain: Part of the image which is used for processing. In other systems called ROI

(region of interest).

Channel: One image matrix of a multi-spectral image. One example is the red channel of an RGB image.

Iconic data: Overall term for images, regions, and XLD data. In object oriented languages (C++ and COM) and in HDevelop iconic data is represented by a polymorphic

data type. In object oriented languages iconic data is also called iconic object.

Control data: All non iconic data. Examples are single values (integer, real, and string), coordinates, arrays of values.

Tuple: an array of values where each element can be of a different type. One can have both iconic and control tuples.

HALCON object: Synonym for Iconic object / data

Image acquisition interface: Interface between the frame grabber /camera driver (SDK) and the HALCON library. The Image acquisition interface is a DLL which is dynamically

loaded when calling open_framegrabber.

Language interface: Software that enables the programmer to use the HALCON library in a given language (e.g., C++).

Extension Package: A mechanism that enables the user to fully integrate user-defined procedures into the HALCON environment. The extension package concept gives full

access to the internal data structures of HALCON.

License file: File “license.dat“ in the directory “license“. This file is used together with hardware components (dongle or Ethernet card) to check if a correct license is

available.

Help files: Files in the directory “help“ which are used to get online information about all HALCON operators. This is extensively used by HDevelop.

Shape-Based Matching: Finding of an object in an image based on a predefined model.

The shape based matching uses features to quickly locate objects very precisely.

Variation Model: A method to do print checking by presenting multiple good patterns to the system. The variation model learns the normal variation a good pattern and

based on this information can detect real defects.

Measure Tool: A set of operators to find the exact location of edges along lines or circular arcs. Other systems call the similar tool, e.g., caliper.

Accuracy: The deviation from the true value

Precision: The standard deviation of the measurement

7、Halcon函数

典型函数

Filtering (noise, smoothing, edge, bit, arithmetic, enhancement)

Segmentation (thresholding, topology, region growing, classification, comparison)

Region processing

Morphology

Feature extraction

Edge detection

Color processing and classification

OCR / OCV

Bar code / data code

Measurement

Rectification

Gray value matching

8、Halcon HDevEngine

HDevEngine允许用户在应用程序中直接调用Halcon程序(*.hdvp),适用范围包括C++、COM、.NET语言。具体功能为:

载入并执行Halcon程序(HDevelop programs)

载入、删除、执行HDevelop过程(HDevelop procedures)

查询以载入的HDevelop过程的接口

将正确的参数值传递给HDevelop过程,执行并获得结果

重新实现了HDevelop的某些内部算子(operator),例如dev_display

HDevEngine错误处理

在C++中,使用HDevEngine需要包括头文件#include "HDevEngineCpp.h",并包含附加的可执行文件hdevenginecpp.lib,具体见示例。

利用HDevEngine,可以很方便得实现多线程。

9、Halcon数据结构(2)

Halcon中,Image = Channel + Domain , 像素点存放在Channel矩阵中,根据ROI来描述Image。Image相关操作:

输入:从文件、从设备

生成:外部图像数据、空内存区域;

显示:disp_image()图像首通道灰度图;disp_color() 彩色图;disp_channel()某特定通道;disp_obj() 自动判别类别;

缩放:set_part() 设置显示区域;set_part_style() 设置显示参数;

3D显示:(略)

Rules to Display Gray Images没特别懂

边界点的处理:镜像、常数、延续、周期(略):

域的局限性:一些算子总是要处理周围的矩形区域,比如mean_image(),并且总是先处理小的区域;

测量工具中的ROIs比较特殊,这种ROIs并不依附于Image上,而是在算子gen_measure_*()后产生,并且也只能是任意朝向的矩形、圆弧形区域;

处理多通道图像:

分割:Gray operators仅适用第一通道,Color operators: 使用前三个通道,Multi channel operator会使用全部通道;

//对“Gray operators仅适用第一通道”的解释:实际上,灰度图,就是用第一通道

(Red)像素点值所构建出来的那幅图。

过滤:所有通道被处理时均使用相同的参数,并且结果的通道数与处理的图片相同;

可以将域的处理结果,与原图像结合在一起作为输入图像;

通道处理:count_channels(),decompose*(), compose*(), access_channel(), append_channel(), channels_to_image(), image_to_channels()

图像金字塔中,第一个图像为最大的图像,各图像有各自的区域

标准图形(Shape):circle、ellipse、rectangle1、rectangle2、line、polygon

特殊区域图形:gen_grid_region(): grid、lines、points, gen_checker_region()

图像处理:

修改:set_grayval() : Modify one or more pixels of the input image;paint_gray(): Paint part of an image into another image; overpaint_gray(): Paint part of an image into the

input image; paint_region(): Paint the region with a constant gray value into an image;

overpaint_region() : Paint the region with a constant gray value into the input image 复制:crop_part(): Crop a rectangle, given by upper left corner and size;

crop_rectangle1(): Crop a rectangle, given by upper left and lower right corner;

crop_domain(): Crop area of the smallest rectangle1 of the domain; crop_domain_rel():

Like crop_domain but with the possibility to change the size of bounding box;

change_format(): Limit the size of the image at the lower or the right part; get_grayval():

Access one or multiple pixel values

Tile: tile_images(), tile_images_offset(), tile_channels()

10、Halcon数据结构(3)

区域运算:

并:union1()、union2();

交:intersection();

差:difference();

补:complement();

图形显示参数设置:

显示模式:set_draw(); 参数:margin、filled

线宽线形:set_line_width(); set_line_style();

颜色:set_color(); set_colored(); set_rgb(); set_gray();

显示图形:set_shape(); 参数:original、outer circle、inner circle、rectangle1、rectangle2、ellipse、icon

set_icon

11、Halcon数据结构(4)

关于XLD,简要写一下:

图像均用像素点保存,而像素点是整型的,不连续的;Halcon做了拓展,定义了亚像素(subpixel)的对象:xld;其实xld已经用过了,比如提取边缘、构建轮廓等等,xld在模板匹配、图形校准等多方面有重要的用途。

12、色彩color

在视网膜底部,有三类感光细胞,它们分别探测不同频率的光,产生RGB神经冲动,并把这些神经冲动传递下去;经过另外的细胞的处理,转换成1个亮度通道、两个色彩通道。

The RGB stimulus is converted to a luminance and 2 chrominance channels

所以,RGB图是原始的感光图,而人眼的感觉,却不是RGB三通道的叠加;更直观地描述人的感觉,需要用到其他的色彩空间,比如hsv空间。

不同频率的光,会产生不同的颜色;而光只有三种颜色,这是因为人眼只有三种光感受器。所以有,任何光产生的颜色,都能够由这三种纯色来合成,这就是光的三元色。

对于相机来说,能够检测到的光谱范围比人眼要宽泛,比如红外相机等;为了获得人眼类似的图像,可以加上过滤装置,滤去超出400-700nm范围的光线。

13、色彩空间及Halcon颜色处理

CCD彩色相机有R、G、B三种感光芯片,捕捉不同颜色,然后转换为RGB三通道。

颜色空间:

RGB Red、Green、Blue三色通道,对光来说,犹如在黑暗中点亮各分色。

CMY Cyan、Magenta、Yellow 三颜色通道,犹如在白纸上图颜料

YUV、YIQ Y描述亮度、其余两通道描述颜色(的差值),用于电视转播

ARgYb 与上类似,A描述亮度,其余两者描述颜色差值

I1i2i3 与上类似,i1描述亮度

HSI Hue、Saturation、Intensity 分别描述颜色、饱和度、亮度

HSV 与上类似,这里的V描述亮度,方法与上不同

HSL 与HSI类似,L描述亮度,但Hue与之不同

HIS 与HIS类似

Uniform Color Space、CIE uv 用二维图描述色彩

CIE Lab 高级色彩空间,较少使用

颜色空间的转换,依靠GPU进行运算:trans_from_rgb(),速度快

Scale_image() 可以对单通道(RGB、或HSV中的)进行重新渲染;

颜色的选取,通过对Hue通道进行threshold()

2D Histogram 可用来描述两通道(RGB、HSV等中的)相应值对应关系,可用来选取颜色相近区域:histo_2dim()

N维像素分类:learn_ndim_norm()、learn_ndim_box()

LUT:MLP、SVM、GMM

彩色过滤器:用于彩色图像的分割等:edges_color()、edges_color_sub_pix()、lines_color()

14、Halcon 窗体

Halcon窗体的坐标系统:(Row, Column) (Width, Height)

图形:可以显示灰度图、彩色图、3D;定义要显示的区域,插值

区域:绘图模式(Fill、Margin),边界、线宽,定义色彩模式,自动图形转换绘图:点、线、xld等

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

基于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的双目立体视觉系统实现

基于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的模板匹配方法总结 分类: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,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的

基于HALCON的PCB光学定位点的3种识别方法及比较

第28卷第2期 佛山科学技术学院学报(自然科学版) V o l.28N o.2 2010年3月 Jou rnal of Fo shan U n iversity(N atu ral Science Editi on)M ar.2010 文章编号:100820171(2010)022******* 基于HAL CON的PCB光学定位点的 3种识别方法及比较 李程鹏1,2,范彦斌23,胡青春1 (1.华南理工大学机械与汽车工程学院,广东广州510640;2.佛山科学技术学院机电工程系,广东佛山528000) 摘要:随着印刷电路板(PCB)的制造不断向着微型化方向发展,在其生产过程中,原有的人工检测形式逐渐被现代化的自动光学检测设备所代替。与此同时,在机器视觉代替人类视觉实现检测后,如何能快速识别并定位被检测PCB的光学定位点(M ark点)就成为整个检测过程中的一个重要问题,因为只有识别了光学定位点,才能进行后续的图像配准、匹配以及缺陷检测工作。HAL CON作为一款功能强大的机器视觉软件,在工业图像处理方面有着不可替代的优势。笔者将HAL CON软件应用到PCB的M ark点的识别过程中,创造出3种不同的定位算法,并对这3种算法的效率和应用范围进行了评价。 关键词:印刷电路板;自动光学检测;HAL CON;光学定位点;识别 中图分类号:T P319 文献标志码:A 随着整个社会的电子化程度的不断加深,飞速发展的PCB行业对生产效率的要求也越来越高,形式各样的PCB层出不穷,且逐渐向微型化方向发展,最有代表性的就是以表面贴片技术(S M T)为主导的PCB制造产业[1]。以往的人工离线检测已经完全不能适应高效性和高准确率形势的需要,于是自动光学检测就应运而生。PCB的自动光学检测主要分为4步:图像采集、图像处理、特征提取和决策判断[2]。其中,特征提取和决策决断2个步骤都涉及PCB的光学定位点(M ark点)的识别,因此,M ark点识别的快速性和准确性是PCB自动光学检测的一个重要环节。 HAL CON是一款功能十分强大的机器视觉软件,它提供1000多个运算子,包含从低级的图像读取到高级的模式识别的各种算法[3],可以应用到机器视觉检测的整个过程,如图像显示、图像分割、特征提取、模板创建以及图像匹配等。另外,它还提供了开放的结构形式,利用自有的HD evelop编程工具,可以轻松地实现代码从HAL CON算子到C、C++、C#等程序语言的转化,为检测软件的开发提供了良好的编程环境。作为目前业内功能最完善、效率最高的软件之一,已被广泛应用于工业生产中的各个方面,如陶瓷、食品、机械、医疗等。 本文利用HAL CON优秀的图像处理功能,编制出3种M ark点识别的算法,进而对3种算法的效率和应用范围进行了详细的评价。 1 M ark点的作用、分类设计规范 M ark点是PCB板在制造过程中用来定位的一种板载标记。就目前的PCB板的设计工艺来看, M ark点的作用主要有2点:1)在贴片或者光学检测过程中,上板时读取一对角2个M ark点以确定板 收稿日期:2010201215 基金项目:广东省高等学校自然科学研究重点资助项目 作者简介:李程鹏(19832),男,湖北红安人,华南理工大学与佛山科学技术学院联合培养硕士研究。 ()

基于Halcon的研究

vc 使用halcon 使用hdevelop 导出halcon 程序的c++代码之后,比如 1 read_image (image, 'C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp') 2 rgb1_to_gray (image, GrayImage) 3 dev_set_color('blue') 4 *bin_threshold (GrayImage, Region) 5 threshold(GrayImage,Region,100,255) 6 area_center (Region, Area, Row, Column) 生成c++代码 01 /////////////////////////////////////////////////////////////////////////////// 02 // File generated by HDevelop for HALCON/C++ Version 10.0 03 /////////////////////////////////////////////////////////////////////////////// 04 05 06 07 #include "HalconCpp.h" 08 09 10 11 using namespace Halcon; 12 13 14 #ifndef NO_EXPORT_MAIN 15 // Main procedure 16 void action() 17 { 18 using namespace Halcon; 19 20 // Local iconic variables 21 Hobject image, GrayImage, Region; 22 23 24 // Local control variables 25 HTuple Area, Row, Column;

相关主题