基础知识
Blob分析
1、意义
Blob分析是对图像中相同像素的连通域进行分析,该连通域称为Blob。
Blob分析可为机器视觉应用提供图像中的斑点的数量、位置、形状和方向,还可以提供相关斑点间的拓扑结构。
2、适用范围
仅针对二维目标图像和高对比度图像,适用于有无检测和缺陷检测。
纺织品的瑕疵检测,玻璃的瑕疵检测,机械零件表面缺陷检测,可乐瓶缺陷检测,药品胶囊缺陷检测等很多场合都会用到blob分析。
3、Blob分析的主要过程
获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)
halcon代码实现:
read_image(Image,'particle')
threshold(Image, BrightPixels,120,255)
connection(BrightPixels,Particles)
area_center(Particles,Area,Row,Column)
4、Blob分析延伸
在实际应用中,需要处理更多步骤,因为很多实际因素,目标信息很难处理。比如图像中有很多杂斑(很难提取目标位),光照不均等。
还有Blob分析需要后期处理。比如将特征信息转换成实际坐标信息,显示目标物等。
获取图像->应用ROI->定位ROI->矫正图像->图像预处理->动态获取分割参数->分割图像->处理区域->特征提取->将像素坐标转换到世界坐标->结果显示或者输出
图像预处理常用算子:
mean_image:均值滤波
gauss_image:高斯滤波
median_image:中值滤波
动态获取分割参数常用算子:
gray_histo_abs:灰度直方图
histo_to_thresh:直方图二值化
5、分割图像
threshold算子,最简单,最快速,使用频率最高的方法,适用于目标体和背景之间存在一定的灰度差的场景
自动全局阈值分割方法一:
计算直方图;
寻找出现频率最多的灰度值;
在threshold中使用与最大值有一定的距离的值作为阀值;
halcon代码实现:
gray_histo(Image,Image,AbsoluteHisto,RelativeHisto)
PeakGray := sort_index(AbsoluteHisto)[255]
threshold(Image,Region,0,PeakGray -25)
自动全局阈值分割方法二:
多次迭代平滑;
查找两个波峰;
使用threshold找到两波峰之间的最小值
bin_threshold(Image,Region)
常用图像分割算子:
threshold:全局阈值二值化
bin_threshold:自动阈值二值化
dyn_threshold:本地阈值二值化
watersheds:分水岭
6、特征提取
1)区域特征
面积area,力矩Moments,平行于主轴的最小矩形smallest_rectangle1,任意方向的最小矩形smallest_rectangle2,
最小圆形smallest_circle,convexity:凸包面积,contlength:区域边界长度
形状特征roundness,circularity,compactness,rectangularity
2)灰度特征
简单灰度值特征:区域的平均灰度值
区域的最小和最大灰度值
7、c++应用实例
Hobject rect;
gen_rectangle1(&rect, m_pStToolParam_BwArea->rcROIRect.Row1,m_pStToolParam_BwArea->rcROIRect.Col1,
m_pStToolParam_BwArea->rcROIRect.Row2,m_pStToolParam_BwArea->rcROIRect.Col2);
HTuple S1,S2;
count_seconds(&S1);
threshold(ImageROI,&ConnectedRegions);
area_center(ConnectedRegions,&(m_pStToolParam_BwArea->tArea),&(m_pStToolParam_BwArea->tPosRow),
&(m_pStToolParam_BwArea->tPosCol));
disp_obj(Region,*pWnd);
---------------------
作者:天上人间555
来源:CSDN
原文:https://blog.csdn.net/surui_555/article/details/47837167
版权声明:本文为博主原创文章,转载请附上博文链接!