Halcon案例之BLOB分析

图像处理(image processing)


用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。


Blob分析(Blob Analysis)


在计算机视觉中的Blob是指图像中的具有相似颜色、纹理等特征所组成的一块连通区域。Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析(该连通域称为Blob)。其过程其实就是将图像进行二值化,分割得到前景和背景,然后进行连通区域检测,从而得到Blob块的过程。简单来说,blob分析就是在一块“光滑”区域内,将出现“灰度突变”的小区域寻找出来。举例来说,假如现在有一块刚生产出来的玻璃,表面非常光滑,平整。如果这块玻璃上面没有瑕疵,那么,我们是检测不到“灰度突变”的;相反,如果在玻璃生产线上,由于种种原因,造成了玻璃上面有一个凸起的小泡、有一块黑斑、有一点裂缝,那么,我们就能在这块玻璃上面检测到纹理,经二值化(Binary Thresholding)处理后的图像中色斑可认为是blob。而这些部分,就是生产过程中造成的瑕疵,这个过程,就是Blob分析。Blob分析工具可以从背景中分离出目标,并可以计算出目标的数量、位置、形状、方向和大小,还可以提供相关斑点间的拓扑结构。在处理过程中不是对单个像素逐一分析,而是对图像的行进行操作。图像的每一行都用游程长度编码(RLE)来表示相邻的目标范围。这种算法与基于像素的算法相比,大大提高了处理的速度。


适用范围


针对二维目标图像和高对比度图像,适用于有无检测和缺陷检测。常用于二维目标图像、高对比度图像、存在/缺席检测、数值范围和旋转不变性需求。

显然,纺织品的瑕疵检测,玻璃的瑕疵检测,机械零件表面缺陷检测,可乐瓶缺陷检测,药品胶囊缺陷检测等很多场合都会用到blob分析。



image.png

另一方面,Blob分析并不适用于以下图像:


1.低对比度图像;

2.必要的图像特征不能用2个灰度级描述; ·

3.按照模版检测 (图形检测需求)


主要处理技术


Blob分析主要内容包括但不限于以下几点:

(1)图像分割:将图像中的目标和背景分离。

(2)去噪:消除或减弱噪声对目标的干扰。

(3)场景描述:对目标之间的拓扑关系进行描述。

(4)特征量计算:计算目标的2-D形状特征。


image.png

图像分割(Image Segmentation)


因为 Blob分析是一种对闭合目标形状进行分析处理的基本方法。在进行Blob分析以前,必须把图像分割为构成斑点(Blob)和局部背景的像素集合。Blob分析一般从场景的灰度图像着手进行分析。在Blob分析以前,图像中的每一像素必须被指定为目标像素或背景像素。典型的目标像素被赋值为1,背景像素被 赋值为0。有多种技术可将图像分割为目标像素和背景像素。这些技术包括:二元阈值(Binary Thresholding)、空间量化误差(Spatial~ mtization Error)、软件二元阈值和像素加权(SoftBinary Thresholding and Pixel Weighting)、相关阈值(Relative Thresholds)、阈值图像(Threshold Image)。

image.png

图像分割是图像处理的一大类技术,在Blob分析中拟提供分割技术包括:直接输入、固定硬阈值、相对硬阈值、动态硬阈值、固定软阈值、相对软阈值、像素映射、阈值图像。其中固定软阈值和相对软阈值方法可在一定程度上消除空间量化误差,从而提高目标特征量的计算精度。


自动全局阈值分割方法一:


计算直方图;

寻找出现频率最多的灰度值;

在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:分水岭


连通性分析(Connectivity Analysis)


当图像被分割为目标像素和背景像素后,必须进行连通性分析,以便将目标图像聚合为目标像素或斑点的连接体。

连通性分析的三种类型如下:

*全图像连通性分析(Whole Image ConnectivityAnalysis)在全图像连通性分析中,被分割图像的所有的目标像素均被视为构成单一斑点的像素。即使斑点像素彼此并不相连,为了进行Blob分析,它们仍被视为单一的斑点。所有的Blob统计和测量均通过图像中的目标像素进行计算;

*连接Blob分析(Connected Blob analysis) 连接Blob分析通过连通性标准,将图像中目标像素聚合为离散的斑点连接体。一般情况下,连接性分析通过连接所有邻近的目标像素构成斑点。不邻近的目标像素则不被视为是斑点的一部分;

*标注连通性分析(Labeled Connectivity Analysis) 在 机器视觉应用中, 由于所进行的图像处理过程不同,可能需对某些已被分割的图像进行Blob分析,而这些图像并未被分割为目标像素和背景像素。例如:图像可能被分为四个不同 像素集合,每一集合代表不同的像素值范围。这类分割称为标注连通性分析。当对标注分割的图像进行连通性分析时,将连接所有具有同一标注的图像。标注连通分 析不再有目标和背景的概念。


image.png

形态学操作:形态学操作的目的是去除噪声点的影响。

特征值计算:对每个目标进行特征量计算,包括面积、周长、质心坐标等特征。

特征提取


1)区域特征

面积area,力矩Moments,平行于主轴的最小矩形smallest_rectangle1,任意方向的最小矩形smallest_rectangle2,

最小圆形smallest_circle,convexity:凸包面积,contlength:区域边界长度

形状特征roundness,circularity,compactness,rectangularity


2)灰度特征

简单灰度值特征:区域的平均灰度值

区域的最小和最大灰度值



场景描述:对场景中目标之间的拓扑关系进行描述。

分析过程

Blob分析的主要过程(常用套路)

获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)

halcon代码实现:

read_image(Image,'particle')
threshold(Image, BrightPixels,120,255)
connection(BrightPixels,Particles)
area_center(Particles,Area,Row,Column)

image.png

Blob分析拓展


在实际应用中,需要处理更多步骤,因为很多实际因素,目标信息很难处理。比如图像中有很多杂斑(很难提取目标位),光照不均等。

还有Blob分析需要后期处理。比如将特征信息转换成实际坐标信息,显示目标物等。

获取图像->应用ROI->定位ROI->矫正图像->图像预处理->动态获取分割参数->分割图像->处理区域->特征提取->将像素坐标转换到世界坐标->结果显示或者输出


图像预处理常用算子:


mean_image:均值滤波

gauss_image:高斯滤波

median_image:中值滤波


动态获取分割参数常用算子:


gray_histo_abs:灰度直方图

histo_to_thresh:直方图二值化

a1111.jpg

应用举例

image.png

找出图片的毛刺

image.png

进一步对上述"BLOB分析之图二"进行以下形态学处理及特征值处理,

完整代码如下:

* ball.hdev: Inspection of Ball Bonding
* BLOB分析案例
dev_update_window ('off')
dev_close_window ()
dev_open_window (0, 0, 728, 512, 'black', WindowID)
read_image (Bond, 'die/die_03')
dev_display (Bond)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
*灰度处理 二值化
threshold (Bond, Bright, 100, 255)
*形态学处理 一般用于定位,形状转换,rectangle2带方向的矩形
shape_trans (Bright, Die, 'rectangle2')
dev_set_color ('green')
dev_set_line_width (3)
dev_set_draw ('margin')
dev_display (Die)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*区域锁定
reduce_domain (Bond, Die, DieGrey)
*再次二值化
threshold (DieGrey, Wires, 0, 50)
*用给定的形状特征填充区域:面积为1~100的区域
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
dev_display (Bond)
dev_set_draw ('fill')
dev_set_color ('red')
dev_display (WiresFilled)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*形态学处理:此处为开运算/(也可以用腐蚀),减少像素,circle--对圆形作用最大
*形态学 腐蚀
*erosion_circle (WiresFilled, RegionErosion, 15.5)
*形态学 膨胀
*dilation_circle (RegionErosion, RegionDilation, 15.5)
*形态学 开运算(效果同上 先腐蚀后膨胀)
opening_circle (WiresFilled, Balls, 15.5)
dev_set_color ('green')
dev_display (Balls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*将二值化分开的区域划分为不同的连通区域,断成不同的区域,方便后面作特征值提取处理
connection (Balls, SingleBalls)
*特征值提取
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
dev_display (Bond)
dev_set_colored (12)
dev_display (FinalBalls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
smallest_circle (FinalBalls, Row, Column, Radius)
NumBalls := |Radius|
Diameter := 2*Radius
meanDiameter := sum(Diameter)/NumBalls
mimDiameter := min(Diameter)
dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
for i := 1 to NumBalls by 1
    if (fmod(i,2)=1)
        disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]-2.7*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')
    else
        disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]+1.2*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')
    endif
endfor
* dump_window (WindowID, 'tiff_rgb', './ball')
dev_set_color ('green')
dev_update_window ('on')
disp_continue_message (WindowID, 'black', 'true')
stop ()
dev_close_window ()

最终得到结果如下:

image.png



————————————————

版权声明:本文为CSDN博主「山水之间2018」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Gavinmiaoc/article/details/79407685



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864