Halcon 曲线拟合时怎么过滤掉异常点

问题遇到的现象和发生背景

通过多点拟合曲线,但想要过滤掉异常凸起的点.
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
Rows := [150,151,154,157,159,58,160,165,160,165,160,160,163,160]
Cols := [50,70,92,119,142,175,200,253,300,352,377,400,426,450]
gen_cross_contour_xld (Cross, Rows, Cols, 12, 0.785398)
gen_nurbs_interp (Rows, Cols, [0,-10,0,10], 3, CtrlRows, CtrlCols, Knots)
gen_contour_nurbs_xld (Contour, CtrlRows, CtrlCols, Knots, 'auto', 3, 5, 5)
dev_display (Contour)
dev_display (Cross)

遇到的现象和发生背景,请写出第一个错误信息

求好的可以过滤掉凸起点的方法.

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

采用了平滑处理,但效果不好.

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

计算曲线拟合之前,对原始数据进行异常值过滤就行了。比如说,用算法(如中位数绝对偏差法)来识别异常点,然后在拟合曲线之前删除它们。在进行异常值过滤之前,你要从原始数据中复制出 Rows 和 Cols 变量。然后,用异常值过滤算法,识别和删除异常点,将新的 Rows 和 Cols 变量传递给曲线拟合函数。

可以尝试使用滤波器来过滤掉异常凸起的点——滤波器的作用是可以通过计算每个点的梯度来检测凸起点,并将其过滤掉,还可以使用曲线拟合算法,如最小二乘法,来拟合曲线,并过滤掉异常凸起的点。

该回答引用ChatGPT
一种常用的过滤异常点的方法是RANSAC(随机样本一致性)算法。该算法通过随机选择一组数据点,然后通过对这些点的拟合来确定是否有一组点是异常的,并通过重复该过程多次来确定最终的拟合模型。

如果不想使用RANSAC,也可以使用曲线拟合方法进行平滑处理,例如三次样条插值法或者样条曲线拟合法。这些方法通过对原始数据进行平滑处理来过滤掉异常点,但需要选择合适的平滑参数。

在使用 Halcon 进行曲线拟合时,可以通过以下步骤过滤掉异常点:

首先,使用 Halcon 函数对数据进行预处理,以获得点云数据。

然后,使用 Halcon 函数对数据进行分析,确定哪些点是异常点,也就是设定阈值,超出阈值范围的为异常点。

接着,使用 Halcon 函数从数据中删除异常点,很好操作。

最后,使用 Halcon 函数对剩下的数据进行曲线拟合。

具体的函数和代码实现请参考 Halcon 官方文档或相关资料。