6 个解决方案
#1
upup
#2
边界多边形拟合的方法有许多,我先说一种:
在你跟踪得到的有序边界中取出3个点,我一般用的是第一个点和最中间的点和最后一个点,这样就得到了一个三角形,最后一个点与第一个点其实是相邻的,所以三角形有两条长边,一条短边。搜索边界上其余点到三角形的最小距离,如果距离大于一个阈值,就把这个点上,这样就得到了一个四边形,这样不断迭代,直到所有点到多边形的距离都小于那个阈值。
这个算法理论上比较简单,核心思想就是从三角形出发,不断的添加点,知道迭代结束,效果不错,速度也可以。其中涉及到数据结构的设计和一些几何知识,比如点到直线的距离等等,也容易计算。
注意:计算距离时不要算某一个点到所有边的最小距离来得到点到多边形的距离,这样太慢了。你应该是取某一边上的两个端点,然后遍历这两个点之间的所有边界点,得出符合条件的中间点之后,把原来的边拆开,两个端点分别与这个点相连,由一条边,发展成两条边,逐渐增多就形成了多边形。然后在用同样的方法算其他边。
在你跟踪得到的有序边界中取出3个点,我一般用的是第一个点和最中间的点和最后一个点,这样就得到了一个三角形,最后一个点与第一个点其实是相邻的,所以三角形有两条长边,一条短边。搜索边界上其余点到三角形的最小距离,如果距离大于一个阈值,就把这个点上,这样就得到了一个四边形,这样不断迭代,直到所有点到多边形的距离都小于那个阈值。
这个算法理论上比较简单,核心思想就是从三角形出发,不断的添加点,知道迭代结束,效果不错,速度也可以。其中涉及到数据结构的设计和一些几何知识,比如点到直线的距离等等,也容易计算。
注意:计算距离时不要算某一个点到所有边的最小距离来得到点到多边形的距离,这样太慢了。你应该是取某一边上的两个端点,然后遍历这两个点之间的所有边界点,得出符合条件的中间点之后,把原来的边拆开,两个端点分别与这个点相连,由一条边,发展成两条边,逐渐增多就形成了多边形。然后在用同样的方法算其他边。
#3
不懂。
学习。
学习。
#4
那用hough变换怎么拟合呢?我看一些论文里好多用hough变换拟合的。但我的这些点不是规则的
#5
我上面的算法是我做其他算法是临时想的,能够处理不规则点组成的离散的曲线或者封闭的区域,效果和速度都可以接受。hough变换我没做过,没想法。
#6
不规则的点,正好可以用我上面提到的方法啊。
#1
upup
#2
边界多边形拟合的方法有许多,我先说一种:
在你跟踪得到的有序边界中取出3个点,我一般用的是第一个点和最中间的点和最后一个点,这样就得到了一个三角形,最后一个点与第一个点其实是相邻的,所以三角形有两条长边,一条短边。搜索边界上其余点到三角形的最小距离,如果距离大于一个阈值,就把这个点上,这样就得到了一个四边形,这样不断迭代,直到所有点到多边形的距离都小于那个阈值。
这个算法理论上比较简单,核心思想就是从三角形出发,不断的添加点,知道迭代结束,效果不错,速度也可以。其中涉及到数据结构的设计和一些几何知识,比如点到直线的距离等等,也容易计算。
注意:计算距离时不要算某一个点到所有边的最小距离来得到点到多边形的距离,这样太慢了。你应该是取某一边上的两个端点,然后遍历这两个点之间的所有边界点,得出符合条件的中间点之后,把原来的边拆开,两个端点分别与这个点相连,由一条边,发展成两条边,逐渐增多就形成了多边形。然后在用同样的方法算其他边。
在你跟踪得到的有序边界中取出3个点,我一般用的是第一个点和最中间的点和最后一个点,这样就得到了一个三角形,最后一个点与第一个点其实是相邻的,所以三角形有两条长边,一条短边。搜索边界上其余点到三角形的最小距离,如果距离大于一个阈值,就把这个点上,这样就得到了一个四边形,这样不断迭代,直到所有点到多边形的距离都小于那个阈值。
这个算法理论上比较简单,核心思想就是从三角形出发,不断的添加点,知道迭代结束,效果不错,速度也可以。其中涉及到数据结构的设计和一些几何知识,比如点到直线的距离等等,也容易计算。
注意:计算距离时不要算某一个点到所有边的最小距离来得到点到多边形的距离,这样太慢了。你应该是取某一边上的两个端点,然后遍历这两个点之间的所有边界点,得出符合条件的中间点之后,把原来的边拆开,两个端点分别与这个点相连,由一条边,发展成两条边,逐渐增多就形成了多边形。然后在用同样的方法算其他边。
#3
不懂。
学习。
学习。
#4
那用hough变换怎么拟合呢?我看一些论文里好多用hough变换拟合的。但我的这些点不是规则的
#5
我上面的算法是我做其他算法是临时想的,能够处理不规则点组成的离散的曲线或者封闭的区域,效果和速度都可以接受。hough变换我没做过,没想法。
#6
不规则的点,正好可以用我上面提到的方法啊。