我有一大组数据点(所有2D代表一个形状的边缘),其中存在许多直线排列的一系列多个点(像素)我想通过删除来优化数据构成直线(相同向量)的点,只留下系列的最后两个端点来定义直线并忽略其间的所有点(抽取)。
严格在网格的X轴和Y轴上的线系列呈现出一个复杂程度。第二级是对角线,当应用于网格(即像素)时,可能需要通过内插图案来确定一些线。 (即1 up 3 over,1 up 4 over,1 up 5依此类推直线)
我想利用可能已存在的任何现有库或示例代码片段,而不是从头开始重新发明轮子。
任何指针,提示,代码建议,算法,部分解决方案等都将受到赞赏。
这将是一个.NET项目,但我也精通其他语言(ruby,perl,python),所以如果这样的例子存在于类似语言中,那对我来说会很有用。
由于
alt text http://www.streamline-ss.com/tmp/point_optimization.png
更新
答案 0 :(得分:1)
有一个非常好的名为Net Topology Suite的GIS库,它有很多几何类型的功能。这可能涵盖您正在寻找的功能。它是LGPL许可的。我用它来做多边形交叉并取得了很大的成功。
答案 1 :(得分:1)
Douglas Peucker算法怎么样wikipedia NetTopologySuite实现了它 我用它来简化GPX曲目
如果您将数据转换为LineString,那么使用
就很简单了GisSharpBlog.NetTopologySuite.Simplify.DouglasPeuckerLineSimplifier simplifyer = new GisSharpBlog.NetTopologySuite.Simplify.DouglasPeuckerLineSimplifier(lineString.Coordinates);
simplifyer.DistanceTolerance = 5;//some number that makes sense;
GeoAPI.Geometries.ILinearString simplifyedLineString = new GisSharpBlog.NetTopologySuite.Geometries.LineString(simplifyer.Simplify());