1. 介绍图像处理流程 ( 举例 ball.hdev )
获取图像
图像分割
区域处理
特征提取
秘诀:定位特征,逐步求精
2. 图像分割介绍
1) 灰度直方图
横坐标是像素,纵坐标是对应的像素点个数。
2) 阈值分割 ( 常用 threshold,binary_threshold,mean_image + dyn_threshold,其他 fast_threshold,auto_threshold,var_threshold )
threshold: 适用于环境比较稳定的情况
binary_threshold: 自动全局阈值分割,适用于灰度直方图存在两个波峰的情况。(比如黑和白)
不需要自己设置参数,是软件自己选择的。
软件是如何选择的?:选择两个峰值中间的波谷
mean_image + dyn_threshold:
mean_image: 均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
通常情况下,我们会以该当前像素为中心,对行数和列数相等的一块区域内的所有像素点的像素取平均值。
例如,我们可以以当前像素点的像素周围3x3区域内所有像素点的像素取平均值,也可以对周围5x5区域内所有像素点的像素值取平均值。
5x5区域进行均值滤波,226变成126
一般来说,会选择2D+1作为均值滤波的n(D为所需区域的宽度)
dyn_threshold: 动态阈值分割,和周围相比,原来的灰度值比平均滤波后的灰度值暗或亮超过指定值,则选中。
fast_threshold: 使用全局阈值分割图像,非自动。
auto_threshold: 使用多重阈值分割单通道图像。首先确定灰度值的绝对直方图。然后,从直方图中提取相关的最小值,依次作为阈值操作的参数。字节图像的阈值为0~255,以及从直方图中提取的所有最小值(直方图用标准差Sigma的高斯滤波器平滑后)。对于每个灰度值区间,生成一个区域。因此,区域的数量就是最小值+ 1的数量。
3) 其他分割 ( 边缘分割,区域增长,分水岭分割 )
3. 区域集合运算及变换
1) 集合运算 ( 常用 union1,union2,difference,intersection )
union1: 把所有的输入区域合并为一个区域
union2: 将两个区域合并成一个整体,仅限两个
difference: 两个区域的差
intersection: 两个区域的交集
2) 区域变换 ( 常用 connection,fill_up,shape_trans,skeleton )
connection: 打散
fill_up: 填充区域
shape_trans: 变换区域的形状 out_circle外接圆、convex凸性(将凸起的最高点连接起来)、ellipse椭圆形
skeleton: 选骨架(一个像素)
4. 形态学 ( fin.hdev,dyn_threshold.hdev,hull.hdey,rin .hdev )
1) opening,closing,dilation,erosion,boundary ( circles.hdev )
dilation: 膨胀是对选区进行“扩大”的一种操作。其原理是使用一个自定义的结构元素,在待处理的二值图像上进行类似于“滤波”的滑动操作,然后将二值图像对应的像素点与结构元素的像素进行对比,得到的并集为膨胀后的图像像素。左图为二值化后的图像,右图为使用中间的结构元素对图像进行膨胀,得到的结果为“膨胀”了一圈的图像。
erosion: 腐蚀操作是对所选区域进行“收缩”的一种操作,可以用于消除边缘和杂点。腐蚀区域的大小与结构元素的大小和形状相关。其原理是使用一个自定义的结构元素,如矩形、圆形等,在二值图像上进行类似于“滤波”的滑动操作,然后将二值图像对应的像素点与结构元素的像素进行对比,得到的交集即为腐蚀后的图像像素。左图为二值化后的图像,右图为使用中间的结构元素对图像进行腐蚀,得到的结果为“收缩”了一圈的图像。
opening: 开运算(先收缩再膨胀),将圆或矩形放进区域,放得下的区域留下,放不下的舍去
closing: 闭运算(先膨胀再收缩)
boundary: 提取边缘区域
5. 特征提取
1) area_center,select_shape,inner_,smallest_,orientation_region
area_center: 获取区域面积和中心坐标
select_shape: 根据形状特征选择区域
inner_:最大内接圆
smallest_: 最小外接圆
orientation_region:计算区域的方向
2) region_features: 计算区域的形状特征