1图像、视频流的获取

利用图像助手可以很方便的选取图片和读取视频流。

2图像预处理

2.1去噪

空间域:
	中值滤波:median_image
	均值滤波:mean_image
	高斯滤波:guass_filter
频域:
	低通滤波:gen_lowpass
	高通滤波:gen_highpass
	带通滤波:gen_bandpass

2.2图像增强

灰度缩放:scale_image(in,out,mult,add)  g’=g*mult+add(因此可以用于将两图片的平均灰度调平,降低灰度变换的影响)
增强对比度:emphasize,《数字图像处理》中所说的高提升滤波操作,增强边缘的效果
灰度的形态学操作:gray_opening/gray_closing分别降低/增加灰度
直方图均衡:equ_histo_image将灰度均匀分布在0—255之间
锐化:shock_filter使用canny算子对图片锐化(效果十分明显)

3Blob分析

基本流程:rgb→gray→threshold→connection→select_shape
边缘检测算子:sobel_amp()利用sobel算子提取边缘(一阶微分算子)
凸包/矩形计算:
	凸包:shape_trans(Region : RegionTrans : “convex” : )
	垂直外接矩形:smallest_rectangle1()
	倾斜外接矩形:samllest_rectangle2()
遮罩提取:reduce_domain()(注意reduce_domain实质只是在遮罩,真实
图片并未裁剪下来,在对返回图片进行旋转和直线拟合时,这种问题就会暴
露。可以通过两种方法解决:1.将原图和mask同步进行旋转在reduce_domain;
2.gen_image_const()生成画布,将返回的图片paint_gray()在画布上)

4形态学操作

膨胀:dilation_circle/rectangle
腐蚀:erosion_circle/rectangle
开操作:opening_circle/rectangle
闭操作:closing_circle/rectangle
顶帽操作:top_hat
底帽操作:bottom_hat

5仿射变换

5.1仿射变换

获取仿射变换矩阵的两种方式:
A.直接生成
	hom_mat2d_identity()生成变换矩阵
	hom_mat2d_translate()平移矩阵
	hom_mat2d_rotate()对固定点旋转矩阵
	hom_mat2d_scale()对固定点缩放矩阵
B.根据已知两代(X,Y,R)求得(无法进行缩放)
	vector_angle_to_rigid( : : x1, y1, a1, x2, y2, a2 : HomMat2D)
C.根据获得的矩阵实行仿射变换
	affine_trans_image()

5.2透视变换

获取透视变换矩阵:
	hom_vector_to_proj_hom_mat2d( : : Px, Py, Pw, Qx, Qy, Qw, Method : HomMat2D)
其输入Px,Py为对应点变换前X,Y坐标;Qx,Qy为对应点变换后X,Y坐标,输出为HomMat2D矩阵
执行透视变换:
	projective_trans_image()传入图片,变换矩阵,设置内插法,返回变换后的图片

6字符识别

6.1对A~Z | 0~9的识别

read_ocr_class_mlp()读取自带的文字识别器
	do_ocr_multi_class_mlp()执行识别操作

6.2对汉字的识别(利用OCR机器学习完成)

A.生成字符识别训练文件
	append_ocr_trainf()将图片:字符的键值对存在.trf文件中(在生成之后,可以通过Halcon打开查看,
通过Halcon可		以将图片自动进行一系列旋转、扭曲变换,增强识别器的鲁棒性。但是,生成后
的图片需要继续宁人工筛选,因为像“理”这种经过裁剪可能变成“王”“里”,具有误导性,需要删除)
B.读取训练文件并创建识别器训练
	read_ocr_trainf_names()根据路径读取训练文件
	create_ocr_class_mlp()创建识别器
	trainf_ocr_class_mlp()训练识别器
	write_ocr_class_mlp()将训练器序列化,格式为.omc
C.反序列化识别器,执行识别
	read_ocr_class_mlp()根据路径读取识别器
	do_ocr_multi_class_mlp()执行识别操作

7颜色识别

1.HSV域识别
	decompose3()	        RGB→R/G/B
	trans_from_rgb()		R/G/B→H/S/V
2.通过mlp训练器识别
	create_class_mlp()          	创建训练网络
	add_samples_image_class_mlp()	添加训练样本
	train_class_mlp()		        训练网络
	classify_image_class_mlp()	    利用神经网络识别

8纹理识别

识别原理同颜色识别中利用mlp识别一样,区别在于对纹理的提取。纹理的提取算子:

cooc_feature_image(ROI,Img::LdGray,Dir:Energy,Correlation,Homogeneity, Contrast)

提取算子的原理基于灰度共生矩阵,灰度共生矩阵含义如下图所示:

halcon深度学习实例 halcon基础知识_图像识别


(图片来自CSDN)

左侧为原灰度图,右侧为灰度共生矩阵,其横纵坐标值表示灰度,因此0-255灰度图的灰度共生矩阵大小为256*256。共生举证的纵坐标代表左侧,横坐标代表右侧(以方向为0度时为标注,不同方向可由算子中角度参数设置),当一对共生灰度在左右相隔固定步长存在时,则共生矩阵中对应坐标的数值+1。

灰度共生矩阵具有四大特征,对应着cooc_feature_image算子的四个返回值。Energy能量,共生矩阵的元素的平方和;Correlation相关性,表示图像在行/列方向的相关性;Homogeneity局部均匀性,值越大表示图像在全局上变化越小;Contrast反差,越大表示图像越清晰,反之越模糊。