Python多对象二维散点数据典型轮廓曲线拟合方案咨询
轮廓平均拟合解决方案
你遇到的问题本质是全局多项式拟合的固有缺陷:低阶多项式自由度不足无法捕捉多拐点的轮廓形状,高阶多项式会因全局拟合的约束出现两端震荡/过拟合。最优方案是先对齐所有轮廓样本做平均降噪,再用局部拟合的样条曲线生成最终的映射函数,具体实现步骤和代码如下:
实现步骤
- 对每组独立采集的轮廓点做参数化重采样:以曲线累计长度为参数
t,将每组的t归一化到[0,1]区间,统一采样N个点,完成所有轮廓的空间对齐 - 对所有组同一
t位置的x、y坐标取均值,得到去噪后的平均轮廓离散点 - 对平均后的离散点做平滑样条拟合,可通过平滑参数控制拟合精度,不会出现全局震荡问题
可运行代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import interp1d, UnivariateSpline # 读取数据 data = pd.read_csv('/content/sample_data.csv') capture_numbers = data['capture_number'].unique() n_sample = 50 # 每组统一重采样的点数 x_list = [] y_list = [] # 步骤1:每组轮廓参数化重采样对齐 for cap in capture_numbers: subset = data[data['capture_number'] == cap].sort_values('x') x = subset['x'].values y = subset['y'].values # 计算曲线累计长度作为参数t dist = np.cumsum(np.sqrt(np.diff(x)**2 + np.diff(y)**2)) dist = np.insert(dist, 0, 0) t = dist / dist[-1] # 归一化到0-1 # 统一重采样到n_sample个点 t_interp = np.linspace(0, 1, n_sample) x_interp = interp1d(t, x, kind='linear')(t_interp) y_interp = interp1d(t, y, kind='linear')(t_interp) x_list.append(x_interp) y_list.append(y_interp) # 步骤2:计算平均轮廓 x_mean = np.mean(np.array(x_list), axis=0) y_mean = np.mean(np.array(y_list), axis=0) # 步骤3:样条拟合(如果需要y关于x的映射,先把平均点按x排序) sort_idx = np.argsort(x_mean) x_sorted = x_mean[sort_idx] y_sorted = y_mean[sort_idx] # s是平滑参数,越大越平滑,越小越贴合离散点,可根据需求调整 spline = UnivariateSpline(x_sorted, y_sorted, s=200) # 可视化对比 xs = np.linspace(min(data.x), max(data.x), 200) plt.figure(figsize=(10,6)) # 原始散点 plt.scatter(data.x, data.y, s=5, alpha=0.3, label='原始散点') # 样条拟合结果 plt.plot(xs, spline(xs), c='r', linewidth=2, label='平均轮廓样条拟合') # 原来的10阶多项式拟合对比 p_10 = np.polyfit(data.sort_values('x').x, data.sort_values('x').y, 10) plt.plot(xs, np.polyval(p_10, xs), c='c', linestyle='--', label='10阶多项式拟合') plt.legend() plt.show() # 直接调用spline函数即可得到任意x对应的y值,示例: # print(spline(-50))
方案优势
- 先做轮廓对齐再平均,天然过滤了单组采集的随机误差,得到的是所有样本的典型形状
- 样条拟合为局部拟合,不会出现高阶多项式的端点震荡问题,平滑度可通过参数
s灵活调整 - 最终输出的
spline是可直接调用的函数,输入任意x即可得到对应的y值,满足你需要的x映射函数需求
内容的提问来源于stack exchange,提问作者Eric Lau
相关产品推荐
相关产品推荐

