从曲线中提取点

extract dots from curves

我有一张黑白曲线图片,我想提取代表每条曲线的最小点。点由直线连接。这是我想要的示例:

如果我能知道点的优先级,尤其是在并列部分,这将很有用。我正在使用 c++ 和 opencv。 我应该使用什么算法来解决这个问题?

OpenCV 为此 cv::approxPolyDP.

提供了简单易用的函数
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)

一个简单的例子:

std::vector<cv::Point> curve;
//fill curve
std::vector<cv::Point> approximated_polyline;
cv::approxPolyDP(Mat(curve), approximated_polyline, 3, false);

关键点检测算法应该有所帮助。 This page provides a brief history and opens up a wide array of literature to read and experiment. It might also be worthwhile to refer this 对局部不变特征检测器的调查。