MATLAB信号处理工具箱:Curvelet与Ridgelet变换源码
项目介绍
本项目开发了一套基于MATLAB的高级信号处理工具箱,专注于实现和演示 Curvelet变换(曲波变换) 与 Ridgelet变换(脊波变换) 。该项目旨在解决传统小波变换在处理图像中的线奇异性和面奇异性(如平滑曲线边缘、直线轮廓)时的不足。
本项目不依赖第三方大型复杂的变换库,而是通过原生MATLAB代码实现了核心变换算法,适合用于理解多尺度几何分析(Multiscale Geometric Analysis)的底层原理,并验证其在低信噪比环境下的图像去噪能力。
主要功能特性
1. 脊波变换 (Ridgelet Transform)
- 核心原理:结合 Radon 变换与一维小波变换。
- 实现方式:利用 Radon 变换将二维图像中的直线奇异性映射为 Radon 域的点奇异性,随后对投影数据进行一维小波处理。
- 小波基:内置了手工实现的 Haar 小波分解与重构算法。
- 应用场景:特别适用于处理具有明显直线特征的纹理或边缘。
2. 曲波变换 (Curvelet Transform)
- 核心原理:基于频域的各向异性几何分析。
- 实现方式:采用简化的快速离散 Curvelet 变换 (FDCT) 思想。通过在频域构建径向(尺度)和角向(方向)的楔形掩膜(Wedge Masks)来分割频谱。
- 特性:实现了多尺度、多方向的分解,并引入高斯平滑掩膜以减少频域截断带来的吉布斯振铃效应。
3. 图像去噪与增强
- 提供了基于硬阈值(Hard Thresholding)的去噪演示。
- Ridgelet 去噪:在 Radon-Wavelet 域进行阈值处理。
- Curvelet 去噪:在频域楔形分块系数上进行自适应阈值处理,不仅保留了低频结构,还有效去除了高频噪声。
4. 数据生成与评估
- 合成数据生成:内置测试图像生成器,可创建包含直线、圆形和带状纹理的混合几何图像,专门用于对比两种变换的特性。
- 评价指标:计算峰值信噪比 (PSNR) 和结构相似性 (SSIM) 以量化重建质量。
- 可视化:提供去噪效果对比图及 Curvelet 变换系数的分布图。
系统要求
- MATLAB R2016b 或更高版本
- Image Processing Toolbox (必须,用于
radon, iradon, fspecial, imfilter 等函数)
使用方法
直接运行 main.m 脚本即可启动演示流程。脚本将自动执行以下步骤:
- 初始化环境并生成含噪测试图像。
- 执行 Ridgelet 变换去噪流程。
- 执行 Curvelet 变换去噪流程。
- 在控制台输出 PSNR 和 SSIM 评估结果。
- 弹出图形窗口展示对比结果及变换系数。
核心算法与实现逻辑详解
1. 主程序流程 (main)
程序首先生成一张 256x256 的合成图像,包含直线和圆形结构,模拟多维信号中的不同奇异性特征。随后添加高斯白噪声 ($sigma=20$)。
- Ridgelet 处理流:调用
ridgelet_transform -> 计算阈值 (3倍中值) -> 阈值截断 -> 调用 iridgelet_transform 重构。 - Curvelet 处理流:设置4个尺度和16个方向 -> 调用
fdct_wrapping_simple -> 对高频尺度系数进行阈值处理 (低频保持不变) -> 调用 ifdct_wrapping_simple 重构。 - 结果展示:绘制四子图(原图、噪图、Ridgelet结果、Curvelet结果)并显示量化指标。
2. Ridgelet 变换模块
- 正变换 (
ridgelet_transform):
1. 对图像进行 0 到 179 度的 Radon 变换,得到正弦图 (Sinogram)。
2. 对正弦图的每一列(即每个角度的投影)执行一维 Haar 小波三级分解 (
my_dwt_haar)。
- 逆变换 (
iridgelet_transform):
1. 对处理后的系数执行一维 Haar 小波重构 (
my_idwt_haar)。
2. 利用滤波反投影算法 (Filtered Back-Projection)
iradon 将数据从 Radon 域还原回图像域。
- 自定义小波 (
my_dwt_haar / my_idwt_haar):
* 不依赖 MATLAB Wavelet Toolbox,而是手动构建 Haar 滤波器组(低通
[1 1],高通
[1 -1])并利用卷积 (
conv) 和下采样/上采样实现离散小波变换。
3. Curvelet 变换模块 (频域平铺实现)
代码实现了一种基于频域楔形平铺(Frequency Wedge Tiling)的简化版 FDCT。
- 正变换 (
fdct_wrapping_simple):
1.
频域中心化:对图像进行 2D FFT 并移位。
2.
极坐标网格:构建频域的极坐标系 $(R, theta)$。
3.
多尺度分割:利用同心圆环将频率分为低频(Core)和不同层级的高频带。
4.
多方向分割:在每个高频尺度上,利用角度切分将圆环细分为楔形块。
5.
掩膜平滑:使用
my_smooth_mask 对二值化的楔形掩膜进行高斯模糊,以防止硬截断导致的强烈的时域振铃。
6.
系数提取:将原始频谱与楔形掩膜相乘,通过 IFFT 变换回空域得到各尺度、各方向的 Curvelet 系数。
- 逆变换 (
ifdct_wrapping_simple):
1. 将处理后的系数变换回频域。
2. 利用对应的掩膜将各分量累加。
3.
加权校正:计算所有掩膜的能量和 (
W_sum),对累加后的频谱进行归一化,以消除掩膜重叠带来的幅值失真。
4. 最后执行 IFFT 得到重构图像。
4. 辅助工具
- 阈值函数 (
simple_hard_threshold):实现标准的硬阈值逻辑,将绝对值小于阈值的系数置零。 - 生成测试图 (
generate_test_image):使用网格坐标生成包含实心圆(测试曲线适应性)、矩形块和倾斜直线(测试直线适应性)的灰度图像。 - PSNR计算:基于均方误差 (MSE) 计算峰值信噪比。
代码结构分析
*
Main Function: 负责流程控制、参数定义和可视化。
*
Local Functions: 所有的变换算法和辅助函数均作为局部函数(Local Functions)定义在脚本下方,实现了代码的封装和单文件独立运行能力。