如何使用 C++ 将点拟合到曲线?
Posted
技术标签:
【中文标题】如何使用 C++ 将点拟合到曲线?【英文标题】:How can i fit points to curve using c++? 【发布时间】:2016-01-15 07:12:01 【问题描述】:图片上有一个椭圆,如下图。
我通过使用 opencv 得到了轮廓的点。但是你可以看到图片,因为分辨率低,轮廓上有一条直线。我怎样才能让它像蓝线一样适合曲线?
【问题讨论】:
您在寻找矢量化算法吗? 【参考方案1】:解决您的问题的方法之一是将您的形状矢量化(从简单的强度空间移动到矢量空间)。
我不了解该领域的最新技术。但是,根据学校信息,我可以建议此解决方案。
Bezier curves,你可以尝试使用简单的贝塞尔曲线来模拟你的形状。这不是一个很难的操作,你可以在谷歌上搜索几十个。然后,您可以根据需要调整它的大小,然后将其渲染为简单的图像。 请注意,您也可以Splines 代替贝塞尔曲线。
另一种方法会更简单但效率较低。既然你提到了 OpenCV,你可以在点上应用cv::fitEllipse。请注意,这将返回一个包含椭圆的RotatedRect
。您可以像这样简单地推断出您的椭圆:
Center = Center of RotatedRect.
Longest Radius = The Line which pass from the center and intersect with the two small sides of the RotatedRect.
Smallest Radius = The Line which pass from the center and intersect with the two long sides of the RotatedRect.
获得椭圆参数后,您可以根据需要调整其大小,然后使用cv::ellipse 将其重新绘制成您想要的大小。
我知道这是一个伪答案。但是,我认为每件事都很容易应用。如果您在实施时遇到任何问题,请给我评论。
【讨论】:
感谢您的评论。我将尝试样条曲线和贝塞尔曲线。我曾经问过我朋友这个问题。他告诉我最小二乘曲线拟合是解决我的问题的好方法。我不确定样条线、贝塞尔曲线和最小二乘法,这在我的情况下是最好的。以上是关于如何使用 C++ 将点拟合到曲线?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 scikit-learn 将多项式曲线拟合到数据中?