基于模糊差影与 Hu 不变矩的可见光飞机目标识别系统
项目简介
本项目实现了一个针对可见光图像中飞机目标的自动化识别与检测系统。系统采用经典的计算机视觉与图像处理算法,旨在解决复杂背景、光照不均及噪声干扰下的目标提取问题。核心算法结合了模糊集理论进行图像增强,利用自适应阈值进行分割,并通过具有几何不变性的 Hu 矩特征进行目标识别。所提供的代码包含了一个完整的端到端演示,从模拟图像生成到最终的目标识别可视化的全过程。
功能特性
- 合成数据生成:内置图像合成模块,能够动态生成带有梯度光照背景、高斯噪声、椒盐噪声以及随机旋转角度的模拟飞机图像,无需外部数据集即可运行演示。
- 模糊图像增强:应用模糊集理论,通过非线性变换增强图像对比度,有效突显目标边缘。
- 鲁棒的边缘提取:采用模糊差影法(Fuzzy Difference),通过计算增强图像与平滑图像的差分,抑制背景并提取清晰的目标轮廓。
- 自适应分割:针对光照不均匀场景,使用基于局部统计特性的自适应阈值算法,而非全局固定阈值,提高了分割的准确性。
- 形态学滤波:包含开运算、闭运算、空洞填充及小面积去除,有效净化二值图像,去除噪点。
- 几何不变特征识别:计算目标的七阶 Hu 不变矩,确保识别算法对目标的平移、旋转及缩放具有不变性。
系统要求
- MATLAB R2018b 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 直接在 MATLAB 环境中运行主程序。
- 程序将自动执行以下流程:生成模拟图像 -> 预处理 -> 分割 -> 特征提取 -> 识别判定。
- 运行结束后,会弹出一个包含 6 个子图的窗口,分别显示处理过程的各个阶段及最终识别结果和特征数据。
---
核心算法与代码实现逻辑
本项目的主程序通过以下六个关键步骤实现目标识别:
1. 图像获取与场景模拟
程序首先调用合成函数生成测试图像。该过程模拟了真实的成像环境:
- 构建具有亮度梯度的背景,模拟光照不均。
- 在背景中叠加高亮度的“十字形”几何组合体代表飞机,并对其进行旋转(如旋转 30 度),以验证算法的旋转不变性。
- 向图像中混合高斯噪声和椒盐噪声,模拟传感器噪声和传输干扰。
- 最终输出 RGB 图像用于显示,灰度图像用于处理。
2. 基于模糊差影的图像增强
为了解决低对比度问题,代码实现了模糊增强算法:
- 模糊化:首先将灰度图像归一化至 [0, 1] 区间,作为模糊隶属度。
- 非线性变换:利用基于 S 型曲线(此处为简化版的 Pal & King 算法,使用平方逻辑)的迭代变换。对隶属度大于 0.5 的像素进一步拉升亮度,对小于 0.5 的像素进一步压低亮度,经过两次迭代极大地增强了对比度。
- 差影计算:对增强后的图像应用高斯滤波生成平滑图像,然后计算增强图像与平滑图像的绝对差值。这一步能够有效抵消背景(低频分量),保留并突显边缘与纹理(高频分量),得到模糊差影图。
3. 上下文感知的自适应分割
在分割阶段,代码摒弃了 Otsu 等全局阈值方法,转而使用自适应阈值处理:
- 动态计算局部窗口大小(约为图像高度的 1/8)。
- 利用
adaptthresh 函数根据每个像素邻域的平均灰度计算局部阈值。 - 这种方法使得系统即使在背景亮度从左至右逐渐变化的梯度光照下,也能准确地将目标与背景分离。
4. 形态学噪声处理
初始分割后的二值图像通常包含噪点和断裂。代码通过以下形态学操作链进行优化:
- 开运算:通过圆盘结构元素腐蚀再膨胀,去除细小的背景噪点。
- 闭运算:先膨胀再腐蚀,平滑目标边缘并弥合细微断裂。
- 空洞填充:填充目标内部的黑色封闭区域,确保机身区域完整。
- 面积滤波:移除像素面积小于 500 的连通域,彻底过滤掉非目标的孤立噪声块。
5. Hu 不变矩计算与特征匹配
这是系统的识别核心。程序会对二值图像中的连通域进行标签化,并逐一提取特征:
- 特征提取:调用内部子函数计算目标的 七阶 Hu 不变矩。这 7 个数值是通过归一化中心矩线性组合得到的,理论上对于图像的平移、缩放和旋转保持数值不变。
- 模式匹配:代码中预设了标准飞机的 Hu 矩模板(主要关注前两个矩)。
- 判决逻辑:
* 计算当前目标的 Hu 矩(主要取前两阶)与标准模板的欧氏距离。
* 同时检查目标区域的面积是否满足最小阈值(>1000)。
* 只有当特征距离小于设定的阈值(0.2)且面积达标时,才判定为“飞机目标”。
6. 结果可视化
系统在输出图像上进行直观标记:
- 目标确认:识别成功的飞机用绿色边框框选,并显示置信度及中心点。
- 干扰排除:识别为非飞机的物体(如果有)将用红色虚线框选。
- 数据面板:在界面的右下角区域,动态输出识别到的目标 ID、判定结果以及计算出的具体 Hu 矩数值,便于分析特征稳定性。
---
关键函数说明
compute_hu_moments (内部子函数)
该函数是从零实现 Hu 矩计算的核心模块,不依赖 MATLAB 高级封装库,逻辑严密:
- 坐标提取:获取二值目标的所有像素坐标。
- 基础矩计算:计算零阶矩(面积)及一阶矩(用于定位质心)。
- 中心矩计算:基于质心坐标,计算一直到三阶的中心矩(mu20, mu02, mu11, mu30 等),消除了平移影响。
- 归一化:利用零阶矩对中心矩进行归一化,消除了尺度缩放的影响。
- 不变量构造:根据 Hu 提出的经典公式,组合归一化中心矩,生成 phi1 至 phi7 七个不变矩分量。
generate_synthetic_aircraft_image (内部子函数)
用于生成验证数据的辅助函数:
- 通过
meshgrid 创建线性梯度背景。 - 利用矩阵索引手动构建机身、机翼和尾翼的几何形状。
- 使用
imrotate 对目标进行旋转,验证后续算法的旋转不变性。 - 通过
cat 函数合成伪彩色 RGB 图像,使其视觉效果接近真实可见光图像。