问题描述
我正在尝试以编程方式分析如下所示的可视化数据:
检测任何“角落”(绘图上绘制的绿色方块)的算法/方法/过滤器是我所追求的。
黑色虚线(特别是找到它们的斜率)是我感兴趣的数据,对于这个例子,我当前的方法在应用高斯滤波器平滑数据并找到后使用 scipy.signal find_peaks 工作正常黑色虚线的“开始”和“停止”点。
g_filt_voltage = gaussian_filter1d(voltage,100)
maxes,_ = find_peaks(g_filt_voltage,prominence=10)
mins,prominence=10)
corner_times = time[np.sort(np.concatenate((maxes,mins)))]
一旦我有了 corner_times
,我就可以轻松地处理数据以获得我需要的东西,但 find_peaks 方法已被证明是不够的 - 有时数据开始高,有时开始低(当它开始时低,没有检测到拐角,因为没有峰值变化)。我知道一定有另一种方式。
是否有更好的数学概念或替代 Python 函数可以应用于此,以便更轻松、更准确地找到这些“角”点?
编辑:我尝试过使用@AKX 建议的渐变(在原始数据和高斯滤波数据上),但这还不够,它只给 一些角落:
编辑 2: 我也尝试了二阶导数,但有一个有问题的拐点使这个选项不起作用: 对不起,颜色变化,晚上工作
编辑 3: 将画布光栅化为 png,然后使用 opencv harris 角点检测给出了非常好的结果,但不完全是我需要的。它标记了内角和外角,获得这些数据后我不知道如何在光栅化后将其取回并获取数据。仍在寻找数学来做到这一点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)