一、 图像
根据每个像素信息不同,通常将图像分为:二值图,灰度图,RGB图像
1.二值图:
每个像素只有0(黑)1(白)两种颜色的图像成为二值图。
2.灰度图:
在黑与白之间构建更多的颜色深度,一般灰度从暗黑色到最亮的白色过渡,根据保存灰度数值所使用的的数据类型的不同,可以有2^k种,k=1时是二值图,k=8时是常见的灰度图。
3:RGB图像:
有Red、Green、Blue三个颜色组合而成,三个颜色各有256个级别,每种原色采用8位二进制整数表示,于是三通道RGB共需要24位二进制数,共可以表示颜色种类数为256256256=2^24,大约1600万种颜色。
第一种:
ImagePath := []ImagePath[0] := 'D:/halcon_test/读取多张图片的方式/1.jpg’ImagePath[1] := ‘D:/halcon_test/读取多张图片的方式/2.jpg’ImagePath[2] := ‘D:/halcon_test/读取多张图片的方式/3.jpg’ImagePath[3] := ‘D:/halcon_test/读取多张图片的方式/4.jpg’ImagePath[4] := ‘D:/halcon_test/读取多张图片的方式/5.jpg’ for Index := 0 to 4 by 1 dev_close_window () read_image (Image, ImagePath[Index]) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle) dev_display (Image)endfor
第二种:
for i := 1 to 5 by 1 dev_close_window () read_image (Image, ‘D:/halcon_test/读取多张图片的方式/’+i+’.jpg’) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle) dev_display (Image)endfor
第三种:
for I := 1 to 5 by 1 dev_close_window () *I
表示引用
I
的值,
而
′
1
d
′
的
′
d
′
则表示采用十进制数表示,取一位数,如
1
、
2
、
3
此类,
∗
故
′
3
d
′
则表示为取三位十进制数,如
001
、
002
、
003
诸如此类
r
e
a
d
i
m
a
g
e
(
I
m
a
g
e
,
′
D
:
/
h
a
l
c
o
n
t
e
s
t
/
读取多张图片的方式
/
′
+
I
表示引用I的值,而'1d'的'd'则表示采用十进制数表示,取一位数,如1、2、3此类, *故'3d'则表示为取三位十进制数,如001、002、003诸如此类 read_image (Image, 'D:/halcon_test/读取多张图片的方式/'+I
表示引用I的值,而′1d′的′d′则表示采用十进制数表示,取一位数,如1、2、3此类,∗故′3d′则表示为取三位十进制数,如001、002、003诸如此类readimage(Image,′D:/halcontest/读取多张图片的方式/′+I’1d’) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle) dev_display (Image)endfor
第四种:
第四种方法 (读取一个文件夹下的所有图片)
【助手】–>【打开新的image acquisition 】–>【图像助手】–>【选择路径】–>【代码生成】–>【插入代码】
二、Region
Region可以理解为符合某些性质像素的子集。Region的形状可以是任意的,单独的个点都可以成为一个Region,Region结构是游程编码的一种变体;
游程(行程)编码:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度,属于无损压缩编码。
例子: AAABBBBBCCDDDD
游程编码:A3B5C2D4
threshold (Image, Region, 128, 255)
使用阈值分割图像,得到灰度值在最小到最大之间的那些像素区域(二值化算子对于彩图只针对第一通道二值化 可以通过access_channel(MultiChannelImage : Image : Channel : )获取不同通道的图像再进行二值化)
(1)basic基础特征:面积,中心,宽高,左上角及右下角坐标,长半轴短半轴椭圆方向,粗糙度,联通数,最大半径,方向等;
(2)shape形状特征:外接圆半径,内接圆半径,圆度,紧密度,长度,矩形度,凸性,偏心率,外接矩形的方向及两边长度等;
(3)几何矩特征:二阶矩,三阶矩,主惯性轴等;
regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize : )
- 区域填充分割图像 (生成的region可以通过select_shape算子选取凸性特征,convexity)
Row:掩膜Height;
Column:掩膜Width;
Tolerance:掩膜内灰度值差小于等于这个值则认为是同一个region;
MinSize:单个region的最小面积值;
area_center(Regions : : : Area, Row, Column)
- 计算面积和任意形状的区域中心位置(中心位置不一定在region上)
union2(Region1, Region2 : RegionUnion : : ) - 把两个region合并成一个region
- region2中的对象会先合并成一个对象再与region1中的对象进行合并,合并后的regionUnion对象个数与region1一致;
difference(Region, Sub :RegionDifference : : ) - 计算两个区域的差 RegionDifference = Region - Sub
complement(Region : RegionComplement : : )
- 计算一个区域的补集
三、 XLD
相对于图像image和区域region,这些数据结构是像素精度的,在实际工业应用中,需要比图像像素分辨率更高的精度,这时就需要提取亚像素精度数据,亚像素精度数据可以通过亚像素阈值分割或者亚像素边缘提取来获得,这些处理得到的结果就是用亚像素轮廓来表示,XLD可以描述直线或者多边形,是一组有序控制点的集合。
threshold_sub_pix(Image : Border : Threshold : )
- 提取图像的XLD(提取XLD并不是沿着像素与像素交界的地方,而是经过插值处理后的位置)
select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : ) - 选择特定形状特征要求的XLD轮廓或多边形 (如面积,中心坐标,宽度,长度,圆度,紧密度等等)
select_contours_xld(Contours : SelectedContours : Feature, Min1, Max1, Min2, Max2 : ) - 选择多种特征要求的XLD轮廓(如轮廓长度,开闭特征等)
XLD与Region可以相互转化,与Region有许多相似之处。
1.basic基础特征:XLD面积,中心,宽高,左上角及右下角坐标;
2.shape形状特征:圆度,紧密度,长度,矩形度,凸性,偏心率,外接圆半径,外接矩形方向及长度等;
3.points云点特征:云点面积,中心,方向,等效椭圆半轴及角度等;
4.moments几何矩特征:二阶矩等;
XLD合并算子
union_collinear_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift, MaxAngle, Mode : )
- 合并近似同一直线的XLD
△
union_cocircular_contours_xld(Contours : UnionContours : MaxArcAngleDiff, MaxArcOverlap, MaxTangentAngle, MaxDist, MaxRadiusDiff, MaxCenterDist, MergeSmallContours, Iterations : )
* 合并在同圆的XLD
MaxArcAngleDiff:定义圆上一个轮廓的端点到另一个轮廓的起点之间的最大角距离,以弧度为单位。
MaxArcOverlap:表示等高线可能重叠的最大角度。
MaxTangentAngle:描述圆切线与两条等值线连接线之间的最大夹角。
MaxDistrict:表示两条轮廓线的端点和起点的最大绝对距离(以像素为单位)。
MaxRadiusDiff:描述拟合到轮廓上的两个圆的半径的最大绝对差。
MaxCenterDist:描述两个圆的中心最大欧氏距离。
union_adjacent_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, Mode : )
- 合并端点相近的XLD
XLD转换操作
shape_trans_xld(XLD: XLDTrans : Type : )
- 转换xld轮廓的形状
XLD分割操作
segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )
- 将XLD分割成:直线,直线和圆,直线和椭圆
XLD拟合操作
fit_line_contour_xld
fit_circle_contour_xld
fit_ellipse_contour_xld
fit_rectangle2_contour_xld
trans_from_rgb
功能:转换一个图像从RGB空间转换到任意一个空间
HSV通道
色相(Hue):色彩的基本属性,如红色,黄色,蓝色,值范围0~360
饱和度(Saturation):色彩的纯度,值越高颜色越纯,值越低颜色越浅,它表示所选颜色和该颜色最大纯度之间的比率,范围0~1,当取值为0时只有灰度
明度(Intensity):表示色彩的明亮程度
一般Hue范围情况:
‘Orange’ -------> 10~30
‘Red’ -------> 0~10
‘Blue’ -------> 125~162
‘Green’ -------> 96~128
‘Yellow’ -------> 30~64