基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用dmax与限差D相比: 若dmax<D,这条曲线上的中间点全部舍去;
approximate_polygon()是基于Douglas-Peucker算法的一种近似曲线模拟。它根据指定的容忍值来近似一条多边形曲线链,该曲线也在凸包线的内部。 new_hand =measure.subdivide_polygon(new_hand, degree=2) # approximate subdivided polygon with Douglas-Peucker
ST_SIMPLIFY函数的功能是使用Douglas-Peucker算法来简化输入的geometry。当输入的参数存在NULL时,函数返回NULL。
这和类似 Douglas-Peucker 这样的标准算法不一样,其本质上是贪婪算法。该方法试图施加一些修道院建筑物属性,目前,这些属性是手动定义和自动调整的。
使用的Douglas-Peucker算法 为了帮助理解,假设我们要在一幅图像中查找一个矩形, 但是由于图像的 种种原因,我们不能得到一个完美的矩形, 而是一个“坏形状”(如下图第一幅所示)。
1.算法说明 道格拉斯-普克算法 Douglas-Peucker Algorithm 简称 D-P 算法,亦称为拉默-道格拉斯-普克算法、迭代适应点算法、分裂与合并算法,是将曲线近似表示为一系列点,并减少点的数量的一种算法 By+C=0$ 的距离 d 为:$$d= \frac{|Ax{0}+By{0}+C|}{ \sqrt{A^{2}+B^{2}}}$$2.2 源码一下是优化前的代码,优化后的代码请查看《道格拉斯-普克 Douglas-Peucker
result0.02",adp) cv2.waitKey() cv2.destroyAllWindows() 算法:最优拟合多边形框是计算包围指定轮廓点集的点集,最优拟合多边形框是边界表达的一种,采用Douglas-Peucker
首先是从原始草图中进行简单的多边形采集,不过手绘图像难免会因为手抖或画技问题出现线条的断裂、不平滑等问题: (也就是计算机图像问题中常说的噪音) 所以,需要将原始线条均匀地离散小段直线来平滑这些噪音,再用DP(Douglas-Peucker
该方法使用的是Douglas-Peucker algorithm(道格拉斯-普克算法)。
算法详细流程可查看《道格拉斯抽稀算法流程图解+使用JDK8方法实现+详细注解源码》经典的 D-P 算法描述如下【红色部分用于辅助理解 可忽略】:
它是Douglas-Peucker算法的实现。检查维基百科页面上的算法和演示。
它是Douglas-Peucker算法的一个实现。 为了理解这一点,假设你试图在图像中找到一个正方形,但由于图像中的一些问题,你没有得到一个完美的正方形,而是一个 "坏形状"(如下图所示)。
perimeter = cv2.arcLength(cnt,True)2.4轮廓近似 将轮廓形状近似到另外一种由更少点组成的轮廓形状,新轮廓的点的数目由我们设定的准确度来决定,使用的Douglas-Peucker
下图是提取车道的例子:首先是道路中线分割出来,采用一种简化的折线段表示,基于Douglas-Peucker算法沿不同方向将中线段分成多个部分,并得到形状点集。
Douglas-Peucker(DP) 逼近算法 该算法首先从轮廓(图B)中挑出两个最远的点,将两点相连(图C)。然后在原来的轮廓上寻找一个离线段距离最远的点, 将该点加入逼近后的新轮廓中。
下图是提取车道的例子:首先是道路中线分割出来,采用一种简化的折线段表示,基于Douglas-Peucker算法沿不同方向将中线段分成多个部分,并得到形状点集。
我们可以通过Douglas-Peucker算法形成由一系列标记的连接点组成的多边形线。
TrajCL:使用Douglas-Peucker算法简化轨迹,以在轨迹拓扑上构建窗口。
这时对矢量数据进行简化就非常有必要,geopandas中沿用shapely中的simplify()方法,帮助我们对过于复杂的线和面进行简化,和QGIS中简化矢量的方法一样,simplify()使用了科学的Douglas-Peucker
这时对矢量数据进行简化就非常有必要,geopandas中沿用shapely中的simplify()方法,帮助我们对过于复杂的线和面进行简化,和QGIS中简化矢量的方法一样,simplify()使用了科学的Douglas-Peucker