gpt4 book ai didi

c# - C#检测黑白图像中的多边形点

转载 作者:行者123 更新时间:2023-12-02 17:41:57 26 4
gpt4 key购买 nike

我必须检测C#中黑色背景上的白色多边形的所有点。这是几个示例的图像。我认为这不太困难,但是我无法通过所有变体正确地检测到这一点。我的代码太多了,无法在这里发布,但是基本上我遍历了每一面,寻找它何时从黑色变为白色。我应该使用Open CV吗?我希望可以在C#中实现的简单算法。有什么建议么?谢谢。

enter image description here

最佳答案

在您的情况下,我会这样做:

  • 预处理图像

    因此,请消除颜色中的噪点(例如 JPG 失真等)并二值化图像。
  • 选择圆周像素

    只需遍历所有像素,并将至少有一个黑色邻居的每个白色像素设置为不同的颜色即可代表您的周围 ROI 蒙版,或将像素位置添加到点列表中。
  • 应用连接的组件分析

    因此,您需要找出这些点的顺序(如何连接在一起)。最简单的方法是从第一个找到的像素开始对 ROI 进行洪泛归档,直到所有 ROI 被填充,并记住填充点的顺序(类似于 A * )。在某个时刻应该有2条不同的路径,并且两者都应最后结合。因此,确定这两个点并构造圆周点顺序(通过反转一半并处理共享部分(如果存在))。

    connected components
  • 查找顶点

    如果您计算所有后续像素之间的 Angular 变化,则在直线上, Angular 变化应接近零且顶点要大得多。这样的阈值就可以得到顶点。为了使此功能更强大,您需要从比最接近的像素更远的像素计算倾斜 Angular 。同样,针对滑动平均值对这个 Angular 变化进行阈值处理通常会提供更稳定的结果。

    edge detect

    因此,找出像素应该计算多远才能计算出 Angular ,这样就不会产生太大的噪声,并且顶点仍具有较大的峰值,并且还要找出在任何噪声之上安全的阈值。

    也可以通过 hough转换和/或查找轮廓函数来完成,这些函数存在于许多 CV 库中。另一种选择是回归/拟合直接在点列表中的线并计算可提供亚像素精度的交点。

  • 有关更多信息,请参见相关的质量检查:
  • Backtracking in A star
  • Finding holes in 2d point sets
  • growth fill
  • 关于c# - C#检测黑白图像中的多边形点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349463/

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