一种按阈值去除平面冗余坐标点的简单算法

对于如下分布的几个坐标点, C , D , E C, D, E C,D,E 为冗余点,需要剔除两个
在这里插入图片描述
首先构建距离矩阵 D D D,如选用下图的上三角矩阵。然后依次遍历 D ( i , j ) D(i,j) D(i,j),其中 j > i j>i j>i,再按阈值 T T T 剔除“小距离”所在行对应的坐标点:
D ( i , j ) < T D(i,j) < T D(i,j)<T
C D C D CD 坐标点被剔除, E E E点保留
在这里插入图片描述

测试代码:

import matplotlib.pyplot as plt
import numpy as np


def unique(data, thres):
    result = data[::-1].copy()
    length = len(data)
    for i in range(length):
        for j in range(i + 1, length):
            distance = np.sqrt(np.sum(np.square(data[i] - data[j])))
            if distance < thres:
                result = np.delete(result, length - i - 1, axis=0)
                break
    return result[::-1]


def main():
    # 数据生成
    pts = np.random.randint(0, 100, [10, 2])
    # 添加冗余点
    pts = np.append(pts, pts[:5] * 1.1, axis=0)
    # 剔除
    ret = unique(pts, 20)
    # 可视化
    plt.figure()
    plt.subplot(121), plt.scatter(pts[:, 0], pts[:, 1], marker="o"), plt.title("Initial Data")
    plt.subplot(122), plt.scatter(ret[:, 0], ret[:, 1], marker="o"), plt.title("Unique Data")
    plt.show()


if __name__ == '__main__':
    main()

试验结果:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值