目录
1、图像通道转换
①、彩色图片一般有三通道:R、G、B。在图片的每个像素点上,通过R、G、B不同的三色值来组合成不同的色彩。在每一个像素点上R、G、B计算方法,如下面网格示意图所示:
例子:将程序演示:
*读取一副图片
dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image,Selection)
RGB通道分离:
*通道分离
decompose3 (Image, r, g, b)
②灰度图
又称灰阶图,把白色与黑色之间按对数关系分为若干等级,称为灰度。范围0-255。图像只有一个通道的图。灰度计算方式:v=a*R+b*G+c*B。
图像分析中,使用灰度图最多。
彩色图转灰度图程序:
*彩色图转换为灰度图
rgb1_to_gray (Image, GrayImage)
按住键盘Ctrl键,鼠标在图像上的时候,可以看到灰度值。(上面的两个数值是鼠标的x、y坐标,下方的一个数值是灰度值)
③、H、S、V:颜色通道转换。用的比较少,在需要进行颜色分析的时候使用。
H:色调 S:饱和度 V:色彩的明亮程度
*RGB通道转换为HSV通道
trans_from_rgb (r, g, b, h, s, v, 'hsv')
2、算子结构介绍
halcon算子是按照英文进行命名的,一般英文名就是代表的真实含义。算子结构为:功能类别_具体功能名称。比如read_image是读取图片的意思,read就是功能类别,image就是具体功能名称。
在编程的时候,输入了read,编译器自动就会筛选出read有关的算子。
算子分类:
dev_:系统、窗口有关的算子。比如dev_close_window ()关闭窗口、dev_open_window (0, 0, 512, 512, 'black', WindowHandle)打开窗口。
read_:读操作有关的算子。如:read_image(Image, '素材.bmp')读图片、read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)读halcon提供的字符串库文件。
write_:写操作有关的算子。write_image (Image, 'bmp', 0, 'sample')将图片写到程序目录下。
draw_:在界面上画图、画区域。画圆draw_circle (WindowHandle, Row, Column, Radius)、画矩形draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)。由于是在窗口上画图,所以需要窗口句柄。因此在画图前先要关闭窗口、再打开窗口。算子如下:
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
draw_circle (WindowHandle, Row, Column, Radius)
画图的时候,鼠标左键按住拖动,画好了松开鼠标右键鼠标完成,绘制完成。
gen_:表示生成类的算子。比如生成圆算子gen_circle (Circle, Row, Column, Radius)。
region_:表示跟区域有关的操作。比如获得区域的的一个特征(面积)region_features (Circle, 'area', Value)。
get_:表示获取某些属性的算子。比如获取图像尺寸get_image_size (Image, Width, Height)、获取图像灰度值get_grayval (GrayImage, Rows, Columns, Grayval)。
set_:表示设置参数类的算子。设置图像灰度值set_grayval (Image1, Rows, Columns, Grayval)
tuple_:代表与数组有关的算子。如获取数组长度tuple_length (A, Length)
select_:代表筛选操作有关的算子。比如根据形状面积来筛选区域select_shape (Rectangle, SelectedRegions, 'area', 'and', 150, 99999)、将最大面积区域超过70%的筛选出来select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)。
contour开头的代表的轮廓XLD有关的算子
gray开头的代表的灰度有关的算子。
3、数组的创建和基本运算
halcon中的数组英文是tuple。需要先声明,再使用。
声明数组如:
*定义一个空数组: A:=[]
*数组赋值-方法: A:=[A,1]
*再添加3个元素: A:=[A,[1,2,3]]
运算:
*每个元素相加
C:=A+B
*每个元素相乘
D:=A*B
*给数组赋值:
for index:=1 to 100 by 1
Grayval[index]:=255
endfor
*获得数组A的长度-方法1
length_A:=|A|
*获得数组A的长度-方法2
tuple_length (A, Length)
*获取数组A第0个元素值(第0对应实际第一个)
val_A_0:=A[0]
*获取数组A第2个元素值
val_A_2:=A[2]
4、矩阵的创建和基本运算
矩阵也是一组组的数据,与数组不同的是,矩阵不仅仅是一个集合,还可以求逆、求范数。矩阵的运算只能通过算子来实现,不能像数组一样直接进行运算。矩阵要想直接运算,只能转换为数组再操作。
①矩阵创建
*矩阵的创建--------2行2列
create_matrix (2,2,[1,2,3,4], MatrixID)
或者
*矩阵创建的-----方法2
A:=[1,2,3,4,5,6,7,8,9]
create_matrix (3, 3, A, MatrixID1)
②矩阵的相关获取
*获取矩阵单个元素的值------获取矩阵第0行、第1列的值
get_value_matrix (MatrixID, 0, 1, Value)
*获取矩阵列表元素
get_full_matrix (MatrixID, Values)
*获取矩阵单个元素的值------获取矩阵第0行、第1列的值
get_value_matrix (MatrixID, 0, 1, Value)
③矩阵求逆。
*矩阵的逆
invert_matrix (MatrixID, 'general', 0, MatrixInvID)
get_full_matrix (MatrixInvID, Values1)
④矩阵的范数
*矩阵的范数-------'2-norm' 2范数,还可以设置为1范数
norm_matrix (MatrixInvID, '2-norm', Value1)
5、基本判断语句
halcon判断语句常用的是if语句、for循环.
主要结构有:
①
if (***)
*******
endif
②
if (***)
*******
elseif (***)
*******
else
*******
endif
③for循环语句
for i := 1 to 5 by 1
*******
endfor
程序举例:
array1:=[1,2,3,4,5]
array2:=[]
array3:=[]
for Index := 0 to 4 by 1
array2[Index]:=Index*2
if(array2[Index]>array1[Index])
array3[Index]:=array2[Index]+array1[Index]
elseif (array2[Index]>array1[Index])
array3[Index]:=array2[Index]-array1[Index]
else
array3[Index]:=array2[Index]
endif
endfor
6、halcon机器视觉实现步骤
①基本步骤:
图像预处理 ------》区域分割 ------》 区域筛选 ------》 特征分析、有用信息提取等
②图像预处理:图像去噪、图像基本变化、图像增强、图像位置变化等。
③区域分割:将感兴趣的区域从原图像中分割出来。包括基于阈值的分割、聚类的分割等等。
④区域筛选:从分割出来的所有区域中,根据区域的某些特征,筛选出我们需要的区域。这些特征包括长度、长宽比例、凸性、圆度等等。
⑤特征分析:根据筛选的区域,对区域进行定量分析,包括区域的大小、外接圆、以及其他特征分析等,来判断区域是否满足条件要求。如果是测量类,需要对区域之间的关系进行分析等。