斑点分析工具介绍#
章节目标#
了解什么场景下应该选用斑点分析工具
了解斑点分析工具中配置器和算子的连接关系
了解斑点分析工具中的配置器和算子
如何设置推理参数
支持的使用场景#
形状检测和分析:斑点分析通过将不同灰度范围内的图像看成感兴趣区域(即斑点),通过一系列操作(如形态学、连通等)操作不断调整区域的形态和数量,最终筛选出一系列符合条件的区域。当前该工具内部只支持对单通道或三通道Depth8U类型的图像进行处理,对于其他图像类型,可以自行用pipeline或脚本转换为能处理的图像类型。
适应场景:背景比较简单,或目标灰度与背景可完全区分的场景,如金属、玻璃、塑料等材料的划痕、污点、气泡等,或在食品、药品等领域,用于检测粉末、液体中的颗粒大小等。
不适应场景:斑点特征模糊或重叠、复杂背景干扰或非刚性物体。
斑点分析工具中配置器和算子的连接关系#
详细参数定义及各配置器输入输出请参考 工具及详细流程图
斑点分析工具中的配置器#
斑点分析参数配置器(blob_analysis.conf)#
- 描述:用于配置斑点分析工具推理中的各项参数(
visionflow::param::BlobAnalysisParameters),具体含义如下: image_page:图像页
use_full_script:是否完全使用脚本
blob_analysis_pipeline:斑点分析流程(不使用脚本时生效)
result_item:斑点分析输出项(不使用脚本时生效)
script:斑点分析脚本(使用脚本时生效)
- 描述:用于配置斑点分析工具推理中的各项参数(
每项都支持get()获取属性和set()设置属性。
斑点分析工具中的算子#
推理算子(oper::blob_analysis)#
- 描述:对输入图像进行斑点分析,有两种运行模式可以选择:
使用斑点分析流程:由输入图像’image’和视图’views’搭建计算流程,最终得到输出项。输出项的类型必须为
visionflow::rle::MultiRleRegion。 将输入的视图减去掩码,与输出区域相交得到最终缺陷区域,再转换成visionflow::props::PolygonRegionList类型输出。使用脚本:用户直接写一段可执行的Python脚本,并输出
visionflow::props::PolygonRegionList类型的对象。其中blob_analysis 函数必须存在,其参数为’image’和’views’,计算过程完全由用户指定,只要输出的类型符合要求即可。
如何设置推理参数#
斑点分析的推理参数与其他工具完全不同,它不是几个简单值的设置,而是需要自行搭建检测流程。
使用斑点分析流程:首先先设置使用脚本为否。然后设置最终输出的区域,最终输出的区域result_item有且只有一个,且只会计算这个区域依赖的中间结果,不依赖的不计算。 然后搭建斑点分析的检测流程,一般第一步是图像二值化,支持多种类型二值化(可以参考visionflow::img命名空间下的二值化算子及所需参数), 提取图像中感兴趣的区域。用一个名字指定该区域,接着进行形态学、连通、筛选等操作(可以参考VisionFlow官网 https://visionflow.aqrose.com -详细使用教程-区域操作和分析一节, 也可以参考visionflow::rle命名空间下的函数及所需参数),每个得到的区域都用一个名字表示。最终通过一系列操作得到最终输出的区域result_item。
示例如下:
visionflow::param::BlobAnalysisParameters param;
param.set_use_full_script(false);
param.get_blob_analysis_pipeline()
.add_item("region1", "visionflow.rle.RleRegion")
.set_arg("region1", "img", "image")
.set_arg("region1", "low", "128")
.set_arg("region1", "high", "255")
.set_arg("region1", "invert", "False");
param.get_blob_analysis_pipeline()
.add_item("result", "visionflow.rle.erosion_rectangle")
.set_arg("result", "region", "$", "region1")
.set_arg("result", "ksize", "visionflow.geometry.Size2i(3, 3)");
param.set_result_item("result");
该代码实现了一个简单的斑点分析流程,首先对图像进行二值化得到region1区域,然后对region1进行腐蚀操作得到最终结果result。
使用脚本:使用Python脚本工具,设置使用脚本为是,直接编写代码。这个脚本要求blob_analysis函数必须存在,输入为image和views,输出是PolygonRegionList类型。函数里面内容不限,用户可以使用VisionFlow提供任意函数。最后把脚本设置进斑点分析的参数即可。
示例如下:
visionflow::param::BlobAnalysisParameters param;
param.set_use_full_script(true);
const std::string script = R"(
import visionflow as vf
from visionflow import props as prop
from visionflow import rle as rl
from visionflow import geometry as geo
def blob_analysis(image: prop.Image, views: prop.ViewList) -> prop.PolygonRegionList :
region_all = rl.RleRegion(image.image(), 100, 200)
region_vec = rl.connection(region_all)
multi_polys = rl.find_contours(region_vec, False)
ply_region_list = prop.PolygonRegionList()
for multi_poly in multi_polys:
for poly in multi_poly:
region = vf.PolygonRegion(geo.Polygon2f(poly), "NG")
ply_region_list.add(region)
return ply_region_list
)";
param.set_script(script);