基于小波模极大值的 Canny 边缘检测与图像重构系统
1. 项目介绍
本系统是一个基于 MATLAB 开发的高级图像处理平台,旨在融合 Canny 边缘检测算子的经典机理与小波变换的多尺度分析理论。与传统的边缘检测方法不同,本项目利用二次样条小波变换来替代高斯导数,通过计算小波模极大值来精确捕捉图像边缘。
更为核心的创新点在于系统的图像重构能力。系统不仅能提取边缘,还能利用这些稀疏的边缘特征(模极大值点),通过交替投影算法(POCS)反向恢复出原始图像。这一过程验证了边缘信息在图像特征表示中的完备性,适用于图像编码、特征提取及医学影像分析等领域。
2. 系统功能与特性
- 多尺度小波梯度分析:利用非下采样小波变换(SWT)思想,结合二次样条小波滤波器,提取图像在不同尺度下的水平和垂直梯度分量。
- 高精度边缘定位:通过计算小波梯度的模值与幅角,精确定位边缘位置。主要聚焦于尺度 2 的特征,以在抑制噪声和保留细节间取得平衡。
- 改进的 Canny 边缘检测流程:
*
非极大值抑制 (NMS):沿梯度方向剔除伪边缘,将宽边缘细化为单像素宽。
*
双阈值与滞后连接:自适应计算高低阈值,通过 8 邻域连通性分析,将弱边缘连接至强边缘,形成闭合的边缘轮廓。
- 基于边缘的图像重构:采用投影到凸集(POCS)的迭代算法,仅利用边缘位置的小波系数约束,通过交替投影重建原始灰度图像。
- 全流程可视化:系统自动展示原图、梯度模值图、模极大值图、最终二值化边缘图、重构图像及误差残差图。
3. 系统要求与使用方法
系统要求
- MATLAB R2016b 或更高版本
- Image Processing Toolbox(用于图像读取、调整大小及基础滤波函数)
使用方法
- 确保代码文件在 MATLAB 路径中。
- 在命令行窗口输入主函数名称运行程序。
- 系统将弹出文件选择对话框:
*
选择图像:支持 JPG, PNG, BMP, TIF 格式。
*
取消选择:若用户取消,系统将自动生成 Shepp-Logan Phantom 合成图像作为测试输入。
- 程序将自动执行分解、检测、连接及重构过程,并在最后显示包含 6 个子图的结果窗口。
4. 算法核心与实现逻辑详解
本节详细解析主程序及各功能模块的实际代码实现逻辑。
4.1 图像预处理与初始化
程序启动后首先清理工作区。通过
uigetfile 获取用户图片。
- 格式转换:如果输入是彩色图像(RGB),自动转换为灰度图像。随后将数据类型转换为 double 型以便于数值计算。
- 尺寸归一化:为了保证处理效率,如果图像长或宽超过 512 像素,系统会按比例缩小图像,长边限制为 512 像素。
4.2 基于多尺度小波的梯度计算
这是算法的第一步,由
wavelet_gradient 函数协同
upsample_filter 实现。
- 滤波器设计:代码中定义了 Mallat 算法中的二次样条小波滤波器。
* 低通平滑滤波器 H = [0.125, 0.375, 0.375, 0.125]
* 高通微分滤波器 G = [2, -2](对应一阶导数算子)
- À Trous 算法(多孔算法):为了实现非下采样变换,代码不对图像进行降采样,而是根据当前分解尺度 $j$,对滤波器进行插值(插零)。例如在尺度 2,滤波器系数之间会插入 0。
- 梯度提取:
*
水平分量 Wx:原图先列方向与 H 卷积(平滑),再行方向与 G 卷积(微分)。
*
垂直分量 Wy:原图先行方向与 H 卷积(平滑),再列方向与 G 卷积(微分)。
- 该过程循环执行,默认分解层数 $J=3$,所有尺度的梯度分量被存储在元胞数组中。
4.3 小波模极大值检测
此模块对应 Canny 算法中的梯度计算与非极大值抑制步骤,但在小波域进行。
- 模值与角度计算:选取尺度 2 的分量作为主分析对象。计算梯度的模(Modulus)和梯度的方向(Angle)。角度被转换为角度制。
- 非极大值抑制 (NMS):由
non_max_suppression 函数实现。
*
方向量化:将梯度方向量化为 4 个主要方向(0°, 45°, 90°, 135°)。
*
极值判断:遍历图像像素,根据当前点的梯度方向,比较该点模值与其沿梯度方向的两个邻域像素的模值。只有当中心点模值同时大于两个邻域点时,才保留该点为模极大值点,否则置零。
4.4 边缘细化与连接
为了获取连续且干净的二值化边缘,系统执行
hysteresis_thresholding 函数。
- 自适应阈值:计算全图模平均值,设定低阈值为平均值的 0.5 倍,高阈值为平均值的 1.5 倍。
- 双阈值分类:
*
强边缘:模值高于高阈值的点,直接标记为边缘。
*
弱边缘:模值介于高低阈值之间的点,作为候选。
- 滞后连接 (Hysteresis):通过 8 邻域搜索,重复迭代检查。如果一个弱边缘点通过 8 邻域连接到了任何一个即存的强边缘点(或已确认的边缘点),则该弱边缘点被“升级”为确定的边缘。此过程循环直到没有新的弱边缘点可以被连接。
4.5 基于交替投影 (POCS) 的图像重构
这是系统的核心逆问题求解模块,由
reconstruction_pocs 函数实现。其目标是利用稀疏的边缘信息恢复稠密的图像数据。
- 掩膜生成:首先提取各尺度下的模极大值位置。设定阈值(最大模值的 5%),生成保留重要边缘位置的掩膜(Mask)。
- 初始化:构建一个初始猜测图像(全为 0.5 的灰度图)。
- 迭代过程(默认 20 次):
1.
正向变换:计算当前重构图像在各尺度下的小波系数。
2.
投影约束 1(模极大值一致性):在所有尺度上,强制将当前图像在 Mask 位置的小波系数替换为原始图像对应位置的系数;Mask 以外的区域保持当前迭代值不变(或根据实现策略衰减)。
3.
逆变换近似:利用
inverse_wavelet_approx 函数,通过伴随算子或逆滤波器组,从修正后的小波系数合成图像。
4.
投影约束 2(值域约束):强制像素值截断在 [0, 1] 范围内,防止数值溢出。
- 质量评估:计算重构图像与原图的均方误差(MSE)和峰值信噪比(PSNR)。
4.6 结果可视化
主程序最后创建一个包含 6 个子图的窗口:
- 原始输入图像
- 小波梯度模值图(伪彩色显示,展示梯度强度)
- 小波模极大值图(NMS 处理后的细化脊线)
- 最终 Canny 边缘(经过双阈值和连接后的二值图)
- 重构图像(标题显示 PSNR 数值)
- 重构误差图(展示原图与重构图的差值绝对值,用于分析高频信息的丢失情况)