Halcon_blob分析_形态学
一、基本理论
1.定义:以像素的灰度值作为分析单位 团块分析 像素颗粒分析
适应条件:光照稳定 干扰少 对比度明显
基本流程:采集--》预处理(ROI 去噪 几何变换 拉开对比度)-》分割(二值化 形态学 特征选 择)-》计算显示
二值化:根据灰度值范围将像素分为两部分的过程二值化 这个灰度范围值叫做阈值
区域:像素的集合
灰度直方图:对一幅图像的灰度值进行一个概率统计(像素个数)
区域形态学:
1.区域膨胀和区域闭运算是增加区域像素 区域腐蚀和区域开运算减少区域像素
2.在相同的结构元素半径下,区域膨胀比区域闭运算增加多 ,区域腐蚀比区域开运算元素减少的多
3.结构元素半径越大,增加减少的区域像素越多
4.结构元素是什么形状,区k域形态学处理后就越接近什么形状
连通域:具有4邻域或者8邻域关系的区域集合称为一个连通域
特征直方图:对区域进行特征的一个概率统计(区域个数)
颜色模型:RGB HSV(色度 饱和度 亮度)
二、算子
1.二值化算子
a.全局二值化 输入图像 输出区域 最小灰度值 最大灰度值
threshold (ImageReduced, Regions, 13, 43)
b.
binary_threshold (ImageScaled, Region, 'smooth_histo', 'light', UsedThreshold)//二值化--适合黑白分明
输入图像 输出区域 算法(大津阈值(利用求最大平法差的手法) 平滑直方图) 亮暗选择 输出阈值
c.动态阈值
输入图像 输出图像 均值
mean_image (GrayImage, ImageMean, 119, 119) //求均值滤波
输入图像1 输入图像2 输出区域 偏移值 亮暗选择
dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 5, 'dark')//动态阈值
该算子利用了差分思想,适用于光照不均衡状态下使用,需要与均值滤波搭配使用
2.图像增强
输入图像 输出图像 掩模大小(掩模越大图像增强越强) 因子
emphasize (GrayImage, ImageEmphasize, 67, 67, 3)//图像增强
注释: (原图值-平均值) * 因子 + 原图值
计算公式: res := round((orig - mean) * Factor) + orig
3.光照均衡
输入图像 输出图像 掩模大小 因子
illuminate (GrayImage, ImageIlluminate, 101, 101, 0.7)//光照均衡
注释: (固定值127-平均值) * 因子 + 原图值
计算公式: new = round ( (val - mean) * Factor + orig )
直方图均衡
输入图像 输出图像
equ_histo_image (GrayImage, ImageEquHisto)//直方图均衡
4.连通域断开
输入区域 输出多个区域
connection (RegionOpening, ConnectedRegions)//连通域断开
5.区域的特征选择
输入多个区域 输出区域 特征名称 逻辑关系 最小特征值 最大特征值
select_shape (ConnectedRegions, SelectedRegions, ['area','circularity'], 'and', [443.84,0.84601], [2086.35,1])
6.区域排序
输入区域 输出排序后的区域 参考点 递增/递减 行列
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')//*排序区域
7.区域最小外接圆
输入区域 圆心行列坐标 圆的半径
smallest_circle (SortedRegions, Row, Column, Radius)//求区域最小外接圆
8.计算显示
输入窗口句柄 显示的文本(格式化显示) 坐标系选择 文本左上角的行列坐标 文本颜色 文本背景box
disp_message (WindowHandle, D$'4.2f'+' pix', 'image', Row+Radius, Column, 'white', 'false')//显示文本
9.灰度变换
a.线性变换
输入图像 输出图像 k b---》y=kx+b :
什么时候考虑:当你想整体拉亮 拉暗的时候
scale_image (Image, ImageScaled, 19.6154, -1883) //线性变换
b.指数变换
exp_image (Image, ExpImage, 2)//指数变换
c.对数变换
log_image (Image, LogImage, 90)//对数变换
三、区域形态学
1.区域开运算(先腐蚀后膨胀)
输入区域 输出区域 结构元素半径
opening_circle (Region, RegionOpening, 3.5)//区域开运算
2.区域腐蚀
输入区域 输出区域 结构元素半径
erosion_circle (RegionOpening, RegionErosion, 7.5)//区域腐蚀
3.区域闭运算(先膨胀后腐蚀)
4.区域膨胀
输入区域 输出区域 结构元素半径
dilation_circle (ConnectedRegions, RegionDilation, 7.5)//区域膨胀
四、仿射变换
定义:在平面一个物体由一个位置变换到另外一个位置,在变换过程中基本形状不变叫仿射变换,其本质是:矩阵变换
方式:平移(条件:前一个矩阵的列数=后一个矩阵的行数) 旋转 缩放 镜像 错切
1.平移矩阵
*输入矩阵 行的平移量 列的平移量 平移矩阵
hom_mat2d_translate (HomMat2DRotate, 200, -40, HomMat2DTranslate)//求平移矩阵
注:a12代表 1:第几行内容 2:第几列内容
2.旋转矩阵
输入矩阵 旋转角度(弧度) 旋转中心的行列坐标 输出矩阵
hom_mat2d_rotate (HomMat2DIdentity, -(rad(180)-abs(Phi)), Row, Column, HomMat2DRotate)
注:旋转矩阵偏移,注意旋转中心行列坐标(如果先平移了,需要先加上平移后的行列坐标)
旋转角度: 与水平x轴的夹角,逆正顺负
3.缩放矩阵
输入矩阵 行方向缩放比例 列方向的缩放比例 缩放中心行列坐标 输出矩阵
hom_mat2d_scale (HomMat2DTranslate, 4, 0.5, Row+200, Column-40, HomMat2DScale)
4.单位矩阵
hom_mat2d_identity (HomMat2DIdentity) 单位矩阵*任何矩阵都等于其本身
5.刚体变换(平移和旋转矩阵)
参考点变换前的行列坐标 角度 参考点变换后的行列坐标 角度 输出矩阵
vector_angle_to_rigid (Row, Column , Phi,Row+210, Column-10 , rad(180) , HomMat2D)//平移和旋转矩阵
6.区域仿射变换
输入区域 输出区域 输入矩阵 插值算法
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
7.图像的仿射变换
输入图像 输出图像 矩阵 插值算法 是否适应大小
affine_trans_image (Image, ImageAffineTrans, HomMat2DScale, 'constant', 'false')
8.轮廓仿射变换
输入轮廓 输出轮廓 输入矩阵
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)