作家
登录

两种曲线点抽稀算法-Python实现 附代码

作者: 来源: 2017-08-22 11:04:08 阅读 我要评论

在处理矢量化数据时,记录中往往话苄很多反复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不但滑或不相符标准。是以要经由过程某种规矩,在包管矢量曲线外形不变的情况下, 最大年夜限度地削减数据点个数,这个过程称为抽稀。

【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践


何为抽稀

通俗的讲就是对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且可以或许在必定程度保持原有外形。比较常用的两种抽稀算法是:道格拉斯-普克(Douglas-Peuker)算法和垂距限值法。

道格拉斯-普克(Douglas-Peuker)算法

Douglas-Peuker算法(DP算法)过程如下:

  1. 连接曲线首尾两点A、B;
  2. 依次计算曲线上所有获得A、B两点地点曲线的距离;
  3. 计算最大年夜距离D,如不雅D小于阈值threshold,则去掉落曲线上出A、B外的所有点;如不雅D大年夜于阈值threshold,则把曲线以最大年夜距离瓜分成两段;
  4. 对所有曲线分段反复1-3步调,知道所有D均小于阈值。即完成抽稀。

这种算法的抽稀精度与阈值有很大年夜关系,阈值袈浣大年夜,简化程度越大年夜,点削减的越多;反之简化程度越低,点保存的越多,外形也越趋于原曲线。

下面是Python代码实现:

  1. # -*- coding: utf-8 -*- 
  2. ""
  3. ------------------------------------------------- 
  4.   File Name:    DouglasPeuker 
  5.   Description :  道格拉斯-普克抽稀算法 
  6.   Author :        J_hao 
  7.   date:          2017/8/16 
  8. ------------------------------------------------- 
  9.   Change Activity: 
  10.                   2017/8/16: 道格拉斯-普克抽稀算法 
  11. ------------------------------------------------- 
  12. ""
  13. from __future__ import division 
  14.  
  15. from math import sqrt, pow 
  16.  
  17. __author__ = 'J_hao' 
  18.  
  19. THRESHOLD = 0.0001  # 阈值 
  20.  
  21.  
  22. def point2LineDistance(point_a, point_b, point_c): 
  23.     ""
  24.     计算点a到点b c地点直线的距离 
  25.     :param point_a: 
  26.     :param point_b: 
  27.     :param point_c: 
  28.     :return
  29.     ""
  30.     # 起首计算b c 地点直线的斜率和截距 
  31.     if point_b[0] == point_c[0]: 
  32.         return 9999999 
  33.     slope = (point_b[1] - point_c[1]) / (point_b[0] - point_c[0]) 
  34.     intercept = point_b[1] - slope * point_b[0] 
  35.  
  36.     # 计算点a到b c地点直线的距离 
  37.     distance = abs(slope * point_a[0] - point_a[1] + intercept) / sqrt(1 + pow(slope, 2)) 
     1/7    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      功能抢眼!腾讯杀手级新品智能手环S8发布:对飙小米

    【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践 拥有微信和 QQ 两大年夜霸王级应用,腾讯推出基于社交应用的硬件,的确合偶合理,当然了这看>>>详细阅读


    本文标题:两种曲线点抽稀算法-Python实现 附代码

    地址:http://www.17bianji.com/lsqh/36842.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)