基于MATLAB与HU不变矩的树叶识别语音播报系统
项目简介
本项目是一个基于MATLAB开发环境的综合性图像识别系统,旨在通过计算机视觉技术自动识别树叶种类(如荷叶、樟树叶、枫叶等)。系统核心算法采用具有平移、旋转和尺度不变性的HU不变矩(Hu Moments)特征提取技术,结合最小欧氏距离分类器进行模式识别。项目配备了完整的人机交互界面(GUI),支持图像载入、实时预处理显示、识别结果文本输出以及基于Windows系统的TTS(文本转语音)语音播报功能。
功能特性
- 人机交互界面 (GUI):提供简洁的操作面板,包含原始图像显示区、处理过程显示区、功能按钮区和系统日志状态栏。
- 图像预处理流水线:自动完成灰度化、Otsu自适应二值化、背景/前景颜色纠正、形态学去噪(开运算、孔洞填充)以及最大连通域提取。
- 几何特征提取:利用HU不变矩算法提取树叶形状的7个不变矩特征,有效对抗图像平移、旋转和缩放带来的干扰。
- 模拟样本数据库:为了保证程序无需外部数据文件即可运行,代码内部通过几何算法生成了模拟的特征数据库(包含荷叶、樟树叶、枫叶三种典型形态)。
- 相似度匹配与分类:采用对数变换后的特征向量计算欧氏距离,通过比对距离最小值判定树叶类别,并包含阈值判定机制以过滤未知样本。
- 语音播报反馈:集成Windows系统自带的
.NET System.Speech库,实现识别结果的中文语音朗读。
系统要求
- 操作系统:Windows (语音播报功能依赖于Windows的.NET框架,其他系统可能无法语音播报但可显示文本结果)。
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱支持:Image Processing Toolbox (图像处理工具箱)。
使用方法
- 在MATLAB中打开包含代码的脚本文件。
- 运行
main 函数,系统将初始化模拟数据库并启动GUI界面。 - 点击界面上的 “加载图像” 按钮,选择本地的树叶图像文件(支持jpg, png, bmp格式)。
* *注:系统会显示原始图像并自动清除上一次的处理结果。*
- 点击 “识别与播报” 按钮:
* 系统将执行预处理,并在右侧窗口显示提取出的二值化叶片轮廓。
* 日志窗口将实时显示计算过程和匹配距离。
* 识别结果将显示在界面中央,并伴随自动语音朗读(如:“识别结果是:枫叶”)。
核心算法与代码实现细节
本项目的所有功能逻辑均封装在一个.m文件中,以下是对主要模块的详细代码逻辑分析:
1. 图像预处理与目标分割
在识别回调函数中,系统执行严格的预处理步骤以确保特征提取的准确性:
- 灰度与二值化:首先判断图像是否为彩色,若是则转换为灰度图。接着使用
graythresh 计算全局阈值,并通过 imbinarize 进行二值化。 - 智能反色:通过检测图像四个角的像素值,自动判断背景颜色。如果背景为白色(大部分像素为1),则对二值图像取反,确保后续处理中“叶片”为白色前景,“背景”为黑色。
- 形态学操作:
* 使用
imfill 填充叶片内部的孔洞(如虫洞或纹理导致的空隙)。
* 使用
imopen 配合圆形结构元素去除边缘毛刺和噪点。
* 使用
bwareaopen 移除面积小于500像素的微小干扰块。
- 最大连通域提取:利用
bwconncomp 计算所有连通区域,假设图像中面积最大的区域为待识别的树叶,将其从背景中分离出来,排除杂乱背景干扰。同时利用 bwboundaries 提取并在界面上绘制红色边缘轮廓。
2. HU不变矩特征提取
这是系统的核心算法模块,由独立的计算函数实现。该算法将二值图像作为二维密度函数处理:
- 普通矩与质心:首先计算零阶矩(面积)和一阶矩,进而求得图像的质心坐标。
- 中心矩计算:基于质心坐标计算二阶和三阶中心矩,通过减去质心坐标消除了平移的影响。
- 归一化中心矩:利用零阶矩对中心矩进行归一化处理,消除了图像缩放(尺度)的影响。
- HU矩构造:根据Hu提出的代数不变量理论,利用归一化中心矩构造出7个不变矩($t_1$ 至 $t_7$)。这7个值在图像发生旋转、平移或缩放时保持基本不变。
3. 数据匹配与识别逻辑
- 特征变换:由于HU矩的7个分量数值范围差异极大(跨越多个数量级),直接计算距离会导致数值大的分量主导结果。代码中采用了符号对数变换
sign(x) * log10(abs(x)) 对特征向量进行压缩,使各分量处于同一量级。 - 欧氏距离判决:系统遍历内置数据库,计算待识别图像特征向量与数据库中各类叶片特征向量之间的欧氏距离。
- 阈值机制:
* 找出最小距离对应的类别。
* 设定经验阈值为
2.5。如果最小距离超过该阈值,系统判定为“未知类型”,避免强制错误分类;否则,判定为该类别。
4. 模拟数据库初始化
为了演示方便,系统不依赖外部文件训练,而是通过
initLeafDatabase 函数利用几何生成方法创建“虚拟样本”:
- 荷叶:通过圆方程生成圆形二值图像。
- 樟树叶:通过椭圆方程生成细长椭圆,并进行旋转操作以验证旋转不变性。
- 枫叶:通过矩阵操作组合矩形块和对角线条,并在形态学处理后模拟出星形/十字形的叶片结构。
系统计算这些生成图像的HU矩并存储在内存结构体
leafDB 中作为比对基准。
5. 语音合成模块
语音功能通过直接调用Windows系统的.NET接口实现:
- 代码加载
System.Speech 程序集。 - 创建
SpeechSynthesizer 对象。 - 设置音量并调用
SpeakAsync 方法实现非阻塞式的中文语音播报。 - 采用
try-catch 结构包裹,确保在非Windows环境下程序不会报错,而是降级为系统蜂鸣声提示。