CurveMatchingToolbox (MATLAB曲线匹配与分析工具箱)
项目简介
CurveMatchingToolbox 是一个基于 MATLAB 开发的综合性曲线分析系统,专注于解决二维曲线的几何配准、相似度评估及可视化问题。该项目通过集成多种经典的几何算法,能够处理不同采样率、存在噪声干扰以及经受过刚性或非刚性变换的曲线数据。
系统虽然设计用于通用的曲线分析(如手写签名、轨迹分析),但当前演示通过生成合成的螺旋线数据,模拟了曲线在实际应用中可能遇到的旋转、平移、缩放、局部扭曲及噪声干扰,并展示了如何通过一系列算法将待匹配曲线恢复并与基准曲线对齐。
功能特性
基于代码实现的具体功能包括:
- 数据生成与仿真:能够自动生成基准螺旋线,并构建包含随机刚性变换(旋转、平移、缩放)、非线性时间重采样(模拟局部扭曲)及高斯噪声的测试数据。
- 高级预处理:
*
平滑去噪:使用 Savitzky-Golay 滤波器去除信号噪声。
*
重采样:基于累计弧长的均匀重采样,用于标准化曲线的点密度。
*
Procrustes 分析 (普氏分析):实现基于 SVD 的粗配准,可同时计算并校正旋转、平移和缩放差异。
*
ICP (迭代最近点) 算法:实现基于最近邻搜索的精配准,通过迭代优化进一步减小刚性误差。
*
DTW (动态时间规整):计算由欧氏距离驱动的非线性时间对齐路径及累积代价。
*
Frechet 距离:用于评估两条曲线形状相似度的“遛狗距离”。
*
Hausdorff 距离:计算集合间的最大不匹配程度(最大最小距离)。
- 综合可视化:提供包含5个子图的交互式分析面板,展示从预处理到配准、再到误差分析的全过程。
系统要求
- MATLAB R2018b 或更高版本
- Signal Processing Toolbox (用于
sgolayfilt 函数)
使用方法
直接运行主脚本即可启动全流程分析。系统将依次执行数据生成、预处理、配准计算和结果绘制,并在控制台输出具体的变换参数(缩放因子、旋转角度)及最终的距离度量指标。
实现逻辑与工作流程详解
系统的工作流程严格遵循以下五个步骤:
1. 数据生成与初始化
程序首先生成一个标准的参数化螺旋线作为
基准曲线 (Reference)。随后,通过以下步骤构建
待匹配曲线 (Target):
- 应用 30 度的旋转矩阵。
- 应用 1.2 倍的缩放因子。
- 应用向量
[2, -3] 的平移。 - 非线性扭曲:通过随机生成的索引对待匹配曲线进行非均匀重采样(使用
pchip 插值),模拟采样率变化或局部变形。 - 加噪:叠加高斯白噪声。
2. 数据预处理
为了提高配准精度,对待匹配曲线执行两步预处理:
- 平滑:调用
sgolayfilt(三阶,帧长11)对含噪数据进行平滑处理,保持波形特征的同时去除高频噪声。 - 一致性重采样:自定义实现的
resample_by_arclength 函数计算曲线的累积弧长,并使用 makima(修正Akima分段三次插值)算法将两条曲线统一重采样为 100 个等间距点。
3. 刚性配准分析
配准过程采用“粗配准 + 精配准”的策略:
* 首先通过中心化消除平移差异。
* 通过均方根距离比计算缩放因子。
* 通过 SVD 分解计算最优旋转矩阵,并处理反射问题(行列式校正)。
* 应用得到的变换将待匹配曲线变换到基准坐标系下。
* 以 Procrustes 的结果作为初值。
* 迭代执行:寻找最近点对 -> SVD 计算刚性变换 -> 更新位置 -> 检查误差收敛。
* 此步骤仅优化旋转和平移,不再调整缩放。
4. 相似度度量计算
在完成空间对齐(ICP结果)后,计算三种几何距离以量化相似度:
- DTW:计算两条曲线点序列之间的最优非线性匹配路径,允许时间轴上的伸缩。
- 离散 Frechet 距离:计算保持端点顺序情况下的最大偏离距离下界。
- Hausdorff 距离:计算单向和双向的最大最小欧氏距离,用于捕捉轮廓的最坏情况差异。
5. 结果可视化
系统生成名为 "Curve Matching Toolbox Analysis" 的图表,包含:
- 数据预处理对比:展示原始含噪点云、基准线及平滑重采样后的曲线。
- 空间配准结果:叠加显示基准线、未配准原线、Procrustes 粗配准结果及 ICP 精配准结果。
- DTW 对应关系:将曲线在 Y 轴分离,绘制部分匹配连线以展示 DTW 如何处理局部时间扭曲。
- DTW 代价矩阵:以热力图形式展示累积代价矩阵及最优规划路径。
- 误差分析摘要:
* 柱状图:展示最终对齐后点对点的欧氏距离分布,并高亮标记 Hausdorff 距离(最大误差)。
* 折线图:展示 ICP 迭代过程中的均方误差收敛曲线。
关键算法实现细节
基于弧长的重采样
该模块不依赖采样点的索引,而是计算相邻点间的欧氏距离并生成累积弧长向量。通过在归一化的总弧长上选取等分点,利用插值算法重建曲线。这确保了无论原始数据的采样密度如何变化,输出的曲线点在几何空间上都是均匀分布的。
Procrustes 分析
实现了一个简化版的 Procrustes 算法。核心逻辑是通过奇异值分解(SVD)求解
H = Y' * X 来确定旋转矩阵,利用数据的范数比值确定缩放因子本质,并显式处理了数据的中心化和去中心化还原过程。
迭代最近点 (ICP)
实现了标准的 Point-to-Point ICP。
- 对应关系查找:使用全矩阵距离计算 (
pdist2) 寻找源点云中每个点在目标点云中的最近邻。 - 变换更新:每一轮迭代计算匹配点集重心的偏差,并通过 SVD 再次求解刚性旋转和平移向量。
- 收敛条件:监控均方误差(MSE)的变化率,当误差改善小于
1e-5 或达到最大迭代次数时停止。
动态时间规整 (DTW)
基于经典的动态规划实现。构建大小为
NxM 的代价矩阵,其中
(i, j) 处的代价等于当前点对的欧氏距离加上左、下、左下三个方向累积代价的最小值。最终输出的距离经过了路径长度的归一化处理。