BLOB图像处理技术

一、Blob 理论

Blob:即计算机视觉图像中的具有相似颜色、纹理等特征所组成的一块连通区域。
Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析。
其过程其实就是将图像进行二值化分割得到前景和背景,然后进行连通区域检测,从而得到Blob块的过程。

简单来说,blob分析就是在一块“光滑”区域内,将出现“灰度突变”的小区域寻找出来。举例来说,假如现在有一块刚生产出来的玻璃,表面非常光滑,平整。如果这块玻璃上面没有瑕疵,那么,我们是检测不到“灰度突变”的;相反,如果在玻璃生产线上,由于种种原因,造成了玻璃上面有一个凸起的小泡、有一块黑斑、有一点裂缝,那么,我们就能在这块玻璃上面检测到纹理,经二值化(Binary Thresholding)处理后的图像中色斑可认为是blob。而这些部分,就是生产过程中造成的瑕疵,这个过程,就是Blob分析。Blob分析工具可以从背景中分离出目标,并可以计算出目标的数量、位置、形状、方向和大小,还可以提供相关斑点间的拓扑结构。在处理过程中不是对单个像素逐一分析,而是对图像的行进行操作。图像的每一行都用游程长度编码(RLE)来表示相邻的目标范围。这种算法与基于像素的算法相比,大大提高了处理的速度。
在这里插入图片描述
适用范围
针对二维目标图像和高对比度图像,适用于有无检测和缺陷检测。常用于二维目标图像、高对比度图像、存在/缺席检测、数值范围和旋转不变性需求。

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

Blob分析并不适用于以下图像:

  1. 低对比度图像;
  2. 必要的图像特征不能用2个灰度级描述; ·
  3. 按照模版检测 (图形检测需求)

主要处理技术
Blob分析主要内容包括但不限于以下几点:
(1)图像分割:将图像中的目标和背景分离。
(2)去噪:消除或减弱噪声对目标的干扰。
(3)场景描述:对目标之间的拓扑关系进行描述。
(4)特征量计算:计算目标的2-D形状特征。

二、图像分割(Image Segmentation)

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

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

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

    计算直方图;
    寻找出现频率最多的灰度值;
    在threshold中使用与最大值有一定的距离的值作为阀值;
    halcon代码实现:

    gray_histo(Image,Image,AbsoluteHisto,RelativeHisto)
    PeakGray := sort_index(AbsoluteHisto)[255]
    threshold(Image,Region,0,PeakGray -25)

  2. 自动全局阈值分割方法二:
    多次迭代平滑;
    查找两个波峰;
    使用threshold找到两波峰之间的最小值
    bin_threshold(Image,Region)

  3. 常用图像分割算子:
    threshold:全局阈值二值化
    bin_threshold:自动阈值二值化
    dyn_threshold:本地阈值二值化
    watersheds:分水岭

2.1 连通性分析(Connectivity Analysis)

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

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

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

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

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

BLOB分析之图一

  • 形态学操作:形态学操作的目的是去除噪声点的影响。
  • 特征值计算:对每个目标进行特征量计算,包括面积、周长、质心坐标等特征。
  • 特征提取
    • 区域特征
      面积area,力矩Moments,平行于主轴的最小矩形smallest_rectangle1,任意方向的最小矩形smallest_rectangle2,
      最小圆形smallest_circle,convexity:凸包面积,contlength:区域边界长度
      形状特征roundness,circularity,compactness,rectangularity

    • 灰度特征
      简单灰度值特征:区域的平均灰度值
      区域的最小和最大灰度值
      浅谈机器视觉之BLOB图像处理技术

在这里插入图片描述

BLOB分析之图二

  • 场景描述:对场景中目标之间的拓扑关系进行描述。
  • 分析过程
  • Blob分析的主要过程(常用套路):
    获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)

halcon代码实现:
read_image(Image,‘particle’)
threshold(Image, BrightPixels,120,255)
connection(BrightPixels,Particles)
area_center(Particles,Area,Row,Column)

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

还有Blob分析需要后期处理。比如将特征信息转换成实际坐标信息,显示目标物等。
获取图像 -> 应用ROI -> 定位ROI -> 矫正图像 -> 图像预处理 -> 动态获取分割参数 -> 分割图像 -> 处理区域 -> 特征提取 -> 将像素坐标转换到世界坐标 -> 结果显示或者输出

图像预处理常用算子:

  • mean_image:均值滤波
  • gauss_image:高斯滤波
  • median_image:中值滤波

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

  • gray_histo_abs:灰度直方图
  • histo_to_thresh:直方图二值化

在这里插入图片描述

Python可以使用多种库和工具来处理图像并进行特定标识的识别。其中最常用的库是OpenCV和PIL(Python Imaging Library)。 首先,我们需要安装这些库。可以使用pip命令在终端中安装它们。例如,使用以下命令安装OpenCV: ```python pip install opencv-python ``` 接下来,我们可以使用OpenCV库来读取和处理图像。使用以下代码可以读取图像: ```python import cv2 img = cv2.imread('image.jpg') ``` 在图像识别中,我们通常使用机器学习算法,如卷积神经网络(CNN)。可以使用一些预训练好的CNN模型,如AlexNet、VGGNet或ResNet,来识别特定标识。 ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg') # 预处理图像(例如,调整大小、裁剪、归一化等) # ... # 加载预训练好的模型 model = cv2.dnn.readNetFromCaffe('model.prototxt', 'model.caffemodel') # 构建一个blob来输入网络 blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(224, 224), mean=(104, 117, 123)) # 设置输入blob model.setInput(blob) # 进行前向传播以获取输出 output = model.forward() # 根据输出进行识别和判断 # ... ``` 在这个过程中,我们可以使用如图像预处理、模型加载、输入设置和前向传播等功能来实现图像识别。根据具体的特定标识,我们可能需要对模型进行微调或训练自己的模型来获得更好的识别结果。 当然,以上只是一个简单的例子,实际应用中可能涉及更复杂的处理和算法。Python在图像处理和识别领域具有广泛的应用,可以通过探索相关的库和技术来进一步学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值