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)