Blob分析

来源:互联网 发布:手机淘宝排行榜模版 编辑:程序博客网 时间:2024/06/01 10:35


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);


0 0
原创粉丝点击