我将给出下面的numpy/scipy代码,因为我几乎没有Matlab的经验。
如果你的曲线足够平滑,你可以将你的转折点识别为那些最高的curvature。将点索引号作为曲线参数,并使用central differences scheme,可以使用以下代码计算曲率import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage
def first_derivative(x) :
return x[2:] - x[0:-2]
def second_derivative(x) :
return x[2:] - 2 * x[1:-1] + x[:-2]
def curvature(x, y) :
x_1 = first_derivative(x)
x_2 = second_derivative(x)
y_1 = first_derivative(y)
y_2 = second_derivative(y)
return np.abs(x_1 * y_2 - y_1 * x_2) / np.sqrt((x_1**2 + y_1**2)**3)
您可能需要先平滑曲线,然后计算曲率,然后确定最高曲率点。以下函数正是这样做的:def plot_turning_points(x, y, turning_points=10, smoothing_radius=3,
cluster_radius=10) :
if smoothing_radius :
weights = np.ones(2 * smoothing_radius + 1)
new