基于宽度约束的二值图像区域标记程序
项目简介
本项目不仅仅是一个常规的连通域标记工具,而是一个专注于形态特征分析的图像处理系统。它专门针对二值图像中目标的“几何宽度”进行深度计算与筛选。
传统的图像分割往往基于面积(Area)大小进行过滤,无法有效区分“细长的裂纹”与“圆形的斑点”(即使它们面积相同)。本程序引入了基于距离变换场(Distance Transform)与骨架化(Skeletonization)相结合的宽度估算算法,能够精确量化具有管状、线状或不规则形状的连通区域的平均厚度。
该工具非常适用于工业探伤(裂纹筛选)、生物医学图像分析(血管或神经突起检测)以及文档分析等场景,能够自动剔除过细的噪声干扰或过粗的背景团块,仅保留符合特定宽度要求的感兴趣区域(ROI)。
功能特性
- 自动合成测试数据:内置数据生成器,可自动创建包含细线(模拟划痕)、标准宽度物体(模拟目标)和粗大团块(模拟污渍)的复杂测试图像,并包含S形曲线以验证对复杂形状的处理能力。
- 距离变换场分析:利用欧氏距离变换算法,计算前景中每个像素点到最近背景像素的距离,为宽度计算提供其物理基础。
- 高精度宽度估算:
* 采用混合策略计算宽度:对于线状物体,提取形态学骨架并采样骨架上的距离变换值;对于无骨架的团块,利用最大内切圆直径作为退化处理。
* 相比单纯的外接矩形短轴,此方法对弯曲、S形或不规则走向的物体能够提供更接近真实视觉感知的平均宽度。
- 智能阈值筛选:支持设定最小宽度和最大宽度阈值(默认 [8, 25] 像素),自动判定区域状态(Pass/Reject)。
- 多维可视化展示:提供四分屏视图,涵盖原始图像、特征热力图、分析标注图(带数值与颜色状态编码)以及最终分割结果。
- 详细统计报告:在控制台输出完整的分析报表,包含每个区域的ID、精确宽度值、判定状态及中心坐标。
算法实现原理
程序的核心逻辑严格遵循以下处理管线:
1. 预处理与特征场构建
系统首先对输入的二值图像执行形态学开运算(
bwareaopen),去除微小的像素噪声(小于5像素的孤立点)。随后,核心步骤是执行距离变换(
bwdist),生成一张灰度图,图中每个像素的值代表该点距离物体边缘的一半宽度(半径)。
2. 连通域遍历与宽度解算
程序通过
bwlabel 识别所有独立区域,并针对每个区域执行以下特有的宽度计算逻辑:
- 局部掩膜提取:从全局图像中隔离出当前连通域。
- 骨架提取:利用
bwmorph 函数提取当前区域的形态学骨架(细化至1像素宽的中心线)。 - 宽度测算:
*
常规情况:将骨架位置作为采样点,读取距离变换图中对应的数值。由于距离变换值代表半径,算法计算这些采样点的
平均值并乘以2,从而得出该区域的平均几何宽度。
*
特殊情况:如果区域过于规则(如小正方形)导致骨架提取结果为空,算法将自动退化为搜索该区域内的最大距离值,即以最大内切圆直径作为宽度。
3. 分类与筛选
计算出的“估算宽度”将与预设的
minWidth 和
maxWidth 进行比对:
- Pass(通过):宽度在范围内(如裂纹、特定线路)。在结果图中以绿色边框和白色文字标记。
- Reject(剔除):过细(如划痕)或过粗(如大块污渍)。在结果图中以红色标记。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
* 必须包含
bwdist,
bwmorph,
regionprops,
bwlabel 等核心函数。
使用方法
- 启动
直接运行主程序即可。程序内部已配置好环境初始化代码(
clear,
clc),无需额外清理。
- 结果解读
运行结束后,系统会弹出一个包含四个子图的窗口:
*
左上:生成的原始二值图像(包含各种干扰项)。
*
右上:距离变换伪彩色图(Jet色图),颜色越红代表区域越宽(距离边缘越远)。
*
左下:所有检测到的区域。每个区域中心标注了其计算出的宽度。
绿色文字/边框表示符合要求,
红色表示被剔除。
*
右下:最终筛选结果。仅显示保留下来的区域,背景被置为暗灰色以增强对比度,保留区域采用 Spring 色图显示。
- 控制台输出
命令窗口(Command Window)将打印详细的统计表格,列出所有检测对象的ID、计算宽度、通过状态以及质心坐标,并在最后统计通过筛选的总数量。
- 参数调整
若需处理自己的图像或调整筛选标准,可修改代码开头的参数设置部分:
* 修改
params.minWidth 和
params.maxWidth 调整宽度接受范围。
* 若要处理外部图片,需替换数据生成部分的代码,改为
imread 读取图像并转换为二值格式。