IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Halcon Blob分析流程及案例介绍 -> 正文阅读

[人工智能]Halcon Blob分析流程及案例介绍

提示:本篇文章参考了网上其他文章,如有侵权,请联系作者。


前言

???????Halcon中的Blob分析是最常见、最常用的方法,本篇文章会介绍Blob的相关概念,并通过案例来展示Blob分析的流程。


一、什么是Blob分析

???????图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。
???????Blob,即binary large objec,二进制大型对象,是事务处理过程中遇到的一些大型的、复杂的数据项,必须作为一个完整的数据项看待。如一幅图形、一帧图像、一段语言等。在计算机视觉中的Blob是指图像中的具有相似颜色、纹理等特征所组成的一块连通区域。
???????Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析(该连通域称为Blob)。其过程其实就是将图像进行二值化,分割得到前景和背景,然后进行连通区域检测,从而得到Blob块的过程。简单来说,blob分析就是在一块“光滑”区域内,将出现“灰度突变”的小区域寻找出来。
???????如下图这块布料,表面纹理比较均匀。如果这块布料上面没有瑕疵,那么,我们是检测不到“灰度突变”的;相反,如果在布料生产过程中,由于种种原因,形成孔洞、裂缝,那么,我们就能在这块布料上面检测到纹理,经二值化(Binary Thresholding)处理后的图像中色斑可认为是blob。而这些部分,就是生产过程中造成的瑕疵,这个过程,就是Blob分析。
在这里插入图片描述
???????Blob分析工具可以从背景中分离出目标,并可以计算出目标的数量、位置、形状、方向和大小,还可以提供相关斑点间的拓扑结构。在处理过程中不是对单个像素逐一分析,而是对图像的行进行操作。图像的每一行都用游程长度编码(RLE)来表示相邻的目标范围。这种算法与基于像素的算法相比,大大提高了处理的速度。
???????适用范围:针对二维目标图像和高对比度图像,适用于有无检测和缺陷检测。常用于二维目标图像、高对比度图像、存在/缺陷检测、数值范围和旋转不变性需求。显然,纺织品的瑕疵检测,玻璃的瑕疵检测,机械零件表面缺陷检测,可乐瓶缺陷检测,药品胶囊缺陷检测等很多场合都会用到blob分析。
???????另一方面,Blob分析并不适用于以下图像:
???????1、低对比度图像;
???????2、必要的图像特征不能用2个灰度级描述; ·
???????3、按照模版检测 (图形检测需求)
???????Blob分析的优势是其超灵活性,其来源于HALCON提供的巨大数量的算子。再者,这些方法有这很好的性能。许多blob分析的方法可以与一些其他视觉任务想结合,例如可以作为感兴趣区域的灵活生成的一些预处理步骤。

二、Blob分析流程

1.基本步骤

???????下图是Blob分析的基本步骤,这是一种理想状态,也是最基本的套路,获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)。
???????halcon代码实现如下:
???????read_image(Image,‘particle’)
???????threshold(Image, BrightPixels,120,255)//阈值分割算子
???????connection(BrightPixels,Particles)//断开联通区域
???????area_center(Particles,Area,Row,Column)
???????实际上,提取Blob之前和分析Blob之后也存在重要的步骤。比如,提取Blob之前一般要对图像进行预处理,比如图像的变换和校正、平滑与去噪、以及增强处理;分析Blob之后需要将Blob进行选取,或者将Blob重心的像素值向物理坐标系坐标值的转化。
在这里插入图片描述
???????因此,Blob实现方法需要具体情况具体分析。就拿阈值分割提取Blob而言,是用固定阈值还是动态阈值,这都是根据图片情况进行具体分析的。

2.扩展概念

???????在实际应用中,Blob 的分割会很复杂,需要处理更多步骤。 其原因有多种,比如杂乱或不均匀的照明、图像中有很多杂斑(很难提取目标位)。 此外,对Blob进行后处理以获取客户需要的直观显示数据,例如将特征转换为真实世界单位或结果可视化。
在这里插入图片描述
???????这个过程可以总结为:获取图像->应用ROI->定位ROI->矫正图像->图像预处理->动态获取分割参数->分割图像->处理区域->特征提取->将像素坐标转换到世界坐标->结果显示或者输出。
???????以halcon自带案例ball.hdev为例(开运算),展示分析过程。完整代码如下:

* ball.hdev: Inspection of Ball Bonding
* 
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)*灰度处理 二值化
shape_trans (Bright, Die, 'rectangle2')*形态学处理,一般用于定位,形状转换,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)*再次二值化
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)*用给定的形状特征填充区域:面积为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 := mean(Diameter)
minDiameter := min(Diameter)
dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
disp_message (WindowID, 'D: ' + Diameter$'.4', 'image', Row - 2 * Radius, Column, 'white', 'false')
dev_update_window ('on')

???????最终得到的结果如下图:
在这里插入图片描述

3.常见特征提取

???????1)、区域特征:
??????????????a:面积area;
??????????????b:力矩Moments;
??????????????c:平行于主轴的最小矩形smallest_rectangle1;
??????????????d:任意方向的最小矩形smallest_rectangle2;
??????????????e:最小圆形smallest_circle;
??????????????f:凸包面积convexity;
??????????????g:contlength区域边界长度;
??????????????h:圆形roundness;
??????????????j:圆度circularity;
??????????????k:紧密度compactness;
??????????????l:矩形度rectangularity;
???????2)、灰度特征
??????????????a:简单灰度值特征:区域的平均灰度值;
??????????????b:区域的最小和最大灰度值;

4.常用算子总结

???????1)、图像预处理常用算子:
??????????????a:mean_image:均值滤波
??????????????b:gauss_image:高斯滤波
??????????????c:median_image:中值滤波
???????2)、动态获取分割参数常用算子:
??????????????a:gray_histo_abs:灰度直方图
??????????????b:histo_to_thresh:直方图二值化

5.开运算和闭运算

???????图像分割时,会用到开运算和闭运算,采用不同的分割策略,效果会不一样,这里仅先介绍下概念。
???????1)、开运算 先腐蚀后膨胀;
???????2)、闭运算 先膨胀后腐蚀;
???????3)、腐蚀;
???????4)、膨胀。
???????开运算和闭运算要用到的算子如下:
????????1)、开运算 opening(ConnectedRegions, ConnectedRegions, RegionOpening1)
????????2)、闭运算 closing(RegionOpening1, RegionOpening1, RegionClosing1)
????????3)、腐蚀 erosion1(RegionClosing1, RegionClosing1, RegionErosion1, 1)
????????4)、膨胀 dilation1(RegionErosion1, RegionErosion1, RegionDilation1, 1)
????????5)、圆形结构开运算 opening_circle(ConnectedRegions, RegionOpening, 3.5)
????????6)、圆形结构闭运算 closing_circle(RegionOpening, RegionClosing, 3.5)
????????7)、圆形结构腐蚀 erosion_circle(RegionClosing, RegionErosion, 3.5)
????????8)、圆形结构膨胀 dilation_circle(RegionErosion, RegionDilation, 3.5)


总结

???????这里仅对Blob分析进行了基本介绍,更深入的知识点还需读者自己去查询相关资料、去实践中体会和理解。

参考文献
1、Halcon案例之Blob分析

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:32:32  更:2022-03-24 00:35:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:25:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码