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)
提取算子的原理基于灰度共生矩阵,灰度共生矩阵含义如下图所示:
(图片来自CSDN)
左侧为原灰度图,右侧为灰度共生矩阵,其横纵坐标值表示灰度,因此0-255灰度图的灰度共生矩阵大小为256*256。共生举证的纵坐标代表左侧,横坐标代表右侧(以方向为0度时为标注,不同方向可由算子中角度参数设置),当一对共生灰度在左右相隔固定步长存在时,则共生矩阵中对应坐标的数值+1。
灰度共生矩阵具有四大特征,对应着cooc_feature_image算子的四个返回值。Energy能量,共生矩阵的元素的平方和;Correlation相关性,表示图像在行/列方向的相关性;Homogeneity局部均匀性,值越大表示图像在全局上变化越小;Contrast反差,越大表示图像越清晰,反之越模糊。