本站所有资源均为高质量资源,各种姿势下载。
本项目实现了一套基于二进小波变换(Dyadic Wavelet Transform)理论的图像边缘检测系统。该系统利用多尺度分析方法,通过计算图像在不同尺度下的梯度模值和幅角,结合模极大值原理来定位边缘。为了提高边缘检测的精度并抑制噪声,程序集成了非极大值抑制(NMS)算法和滞后阈值(Hysteresis Thresholding)处理。
该算法采用了 Algorithme à Trous(无孔算法/平移不变量小波变换),确保分解过程中图像尺寸不发生改变,避免了传统小波变换下采样过程导致的平移时变性,从而更适合边缘检测任务。
main.m 文件放置于 MATLAB 工作路径中。main 函数。本项目核心逻辑封装在 main.m文件及其内部函数中,其处理流程如下:
loadImage 函数尝试加载图像。加载逻辑具有容错机制:
优先尝试读取系统内置的 cameraman.tif。
若失败,尝试读取 peppers.png。
若再次失败,自动生成一个包含圆形和矩形的合成灰度图像。
最后将图像转换为灰度图并归一化到 [0, 1] 区间。dyadic_wavelet_decomp 函数执行。该函数基于 Mallat & Zhong (1992) 的二次样条小波理论:
使用低通滤波器 H = [0.125, 0.375, 0.375, 0.125] 和高通滤波器 G = [-2.0, 2.0]。
采用 A Trous 算法,不进行下采样。随着层数 j 增加,滤波器系数组之间会插入 $2^j - 1$ 个零。
分解过程通过二维可分离卷积实现:
水平细节分量(对应垂直边缘):行方向进行高通滤波,列方向进行低通滤波。
垂直细节分量(对应水平边缘):行方向进行低通滤波,列方向进行高通滤波。
为了减少边界效应,卷积过程使用了对称延拓。non_max_suppression:
遍历图像每个像素,根据计算出的梯度幅角确定搜索方向。
在该方向的前后两个邻域点上,利用 双线性插值 计算精确的模值。
仅当中心像素的模值同时大于这两个邻域插值点的模值时,才保留该点,否则置零。hysteresis_threshold 函数实现双阈值处理:
大于高阈值的点被标记为强边缘。
介于低阈值和高阈值之间的点标记为弱边缘。
通过8邻域搜索,只有与强边缘相连(直接或间接)的弱边缘才会被保留,变为最终边缘的一部分。downsample,而是根据尺度 j 动态构造插入零的滤波器 h_z 和 g_z。这种设计保证了 W1 和 W2 的输出尺寸始终与原图一致,使得后续的边缘定位坐标与原图像素一一对应。cos(theta) 和 sin(theta) 计算单位圆上的偏移量 dx, dy。随后调用 bilinear_interp 函数,根据四个相邻像素的值对目标位置进行加权计算。这种亚像素插值方法显著提高了NMS的精度,使得边缘线条更加平滑、准确。