gpt4 book ai didi

matlab - 检测均匀表面中的错误点

转载 作者:行者123 更新时间:2023-12-02 04:58:41 25 4
gpt4 key购买 nike

在我的项目中,我有一个由算法计算出的 20.000 点的高曲面。该算法有时会出错,会错误地计算小区域内的 1 个或多个点。

这个错误无法在算法中解决,需要事后检测。

错误如下图所示:

enter image description here

如您所见,有一点计算错误,不仅破坏了完整的均匀表面,而且破坏了地 block 的美学(这在项目中也很重要。)

有时会超过一个点,一般不会超过5或6个。误差总是在Z轴上,所以不需要检查X和Y

我一直在绞尽脑汁想找到一个有点“通用”的算法来检测这个点。我想可能会取表面的补丁并表示 Z,然后从方差中检测点...但我认为它不会一直有效。

有什么想法吗?

注意:我不希望有人为我编写代码,只是一个想法。

PD:avobe图片的相关代码:

[x,y] = meshgrid([-2:.07:2]);
Z = x.*exp(-x.^2-y.^2);
subplot(1,2,1)
surf(x,y,Z,gradient(Z))
subplot(1,2,2)
Z(35,35)=Z(35,35)+0.3;
surf(x,y,Z,gradient(Z))

最佳答案

标准技巧是使用拉普拉斯算子,寻找最大的异常值。 (这与 Mohsen 提出的答案没有什么不同,但实际上更容易一些。)你甚至可以用 conv2 来做,所以它会非常有效。

我可以提供几种方法来实现这个想法。一个简单的方法是使用我的 gridfit 工具,它可以在文件交换中找到。 (Gridfit 本质上使用拉普拉斯算子进行平滑操作。)用包含的所有点拟合曲面,然后寻找被拟合扰动最严重的单个点。排除它,然后重新运行拟合,再次寻找最大的异常值。 (使用 gridfit,您可以使用权重为点赋予零权重,这是一种排除一个点或点列表的简单方法。)当所需的最大扰动足够小时,您可以决定停止该过程。一件好事是 gridfit 还会为异常值赋予新值,填补所有漏洞。

第二种方法是直接使用拉普拉斯算子,更多的是一种过滤方法。在这里,您只需计算每个点的值,即左侧、右侧、上方和下方每个邻居的平均值。与其计算出的平均值最不一致的单个值将替换为新值。或者,您可以使用新值与旧值的加权平均值。再次迭代,直到该过程不会生成任何大于某个公差的东西。 (这是我从 Fortran IMSL 库中记忆起的旧异常值检测和校正方案的基础,但可能可以追溯到大约 30 年前。)

关于matlab - 检测均匀表面中的错误点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com