点云特征提取算法之ISS

这篇具有很好参考价值的文章主要介绍了点云特征提取算法之ISS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

点云特征提取算法之ISS

代码链接 : ISS

Github链接:有关于环境感知方面的网络介绍及代码链接



特征点的定义参考这篇博文角点(corner point)、关键点(key point)、特征点(feature point):

在图像处理中,所谓“特征点”,主要指的就是能够在其他含有相同场景或目标的相似图像中以一种相同的或至少非常相似的不变形式表示 图像或目标 ,即是对于同一个物体或场景, 从不同的角度采集多幅图片 ,如果相同的地方能够被识别出来是相同的,则这些点或块称为特征点。


iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

如上图,两张不同的图之间的特征点的描述和匹配,可以用来做三维重建,姿态估计,全景图的构造以及SLAM的应用,具有极大的发展前进。


在深度学习普及之前大部分都是由传统算法提取特征点,如下图,传统算法的代表主要由通过图像特征的Harris 算法, SUSAN算法 以及SIFT ,还有基于3D点云特性本身的ISS算法。本文主要以介绍ISS算法为主

iss算法,计算机视觉,算法,计算机视觉,人工智能,3d



深度学习没有普及主要原因: 特征点的描述比较模糊,可能由观察的角度决定eg去观察一辆车的时候,轮胎上的花纹可能是特征点,但是当观察角度变成整条马路上所有车之后,这些花纹就不再是特征点了。所以导致特征点的定义模糊,所以导致没有现成的数据集,所以目前的都是一些无监督的方法。



算法简介

ISS是直接针对于点云数据的特征提取方法,其思想的核心在于PCA分解之后,其最小的特征值必须要足够大。基于这个思想我们对算法进行介绍:

  1. 对点云的每个点遍历,计算其RadiusNN


  2. 每个点根据其RadiusNN表示,并由其R近邻点计算加权的协方差矩阵

    1. 权重wj构建的思想基于: 稀疏部分的点云的权重大于密集部分的点云权重,所以定义如下对于任意一个近邻点j,其对应的矩阵与点j的R近邻的个数成反比iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

    2. 最终的加权协方差矩阵定义如下:

iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

  1. 对协方差矩阵进行特征值分解,分别计算λ1,λ2,λ3,降序排序


  2. 计算完所有点的特征值后,进行过滤,过滤条件如下其中γ21 和 γ32都是超参数根据实验进行调整,其大致意思可以理解成,不仅仅需要λ3的值足够大,且需要λ1 λ2 和λ3个不相等:

    iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

  3. 对λ3进行NMS(非极大值抑制)

    1. 根据λ3按照降序排序
    2. 取出λ3最大值作为参考点,并加入最终的结果中
    3. 对propose的点里去除掉与参考点距离小于r的点
    4. 重复步骤23,直至propose里所有点遍历完,取出最终结果则完成了NMS过程



代码实现

这里放了几个核心代码,具体代码参考github:

ISS初始化

    def __init__(self, pc , radius = 0.1, gama21 = 0.7 , gama32 =0.7 , min_lambda3 = 0.0008, min_neighbors = None):
        self.pc = pc #o3dpc
        self.tree = o3d.geometry.KDTreeFlann(pc) # KDTree
        self.point_clound = np.asarray(pc.points) 
        self.num_points = self.point_clound.shape[0]
        self.radius = radius # 计算特征点的直径
        self.gama21 = gama21
        self.gama32 = gama32
        self.min_lambda3 = min_lambda3

初始化涉及到几个超参数,包括radius , γ21 , γ32 和最小λ3的设置 以及最小近邻点的设置。

计算特征值

    def cal_eigen(self , point , idx_neighbors , w):
        #计算根据记录的加权的radius近邻协方差矩阵
        w = 1 / np.array(w) # K
        dis = self.point_clound[idx_neighbors] - point #每个点距离query_point的相对距离 , K * 3
        conv = np.dot((dis.T * w), dis) / w.sum() # 与其相对距离成反比,与其周围点的个数成反比
        #计算特征值
        values, v = np.linalg.eig(conv)
        values  = values[np.argsort(values)[::-1]]
        return values

这里实现的是加权的协方差矩阵的构造,对每个点计算其近邻点,然后每个近邻点计算近邻点的个数,从而得到权重为个数的倒数,最终乘以L2距离,得到协方差矩阵。


NMS实现

    def NMS(self):
        #对特征点按照lambda3的值进行排序
        tmp = pd.DataFrame(self.points_eigns)
        start = len(tmp)
        tmp.sort_values('l3' ,ascending=False, inplace=True)
        tmp = tmp['id'].to_numpy().tolist()

        res = [] #用于保存最后的id
        # print(len(self.radius_neighbor))
        while (tmp):
            #取出lambda3最大的点,并加入结果中,还需要删除掉自身
            query_id = tmp[0] 
            res.append(query_id)
            tmp.remove(query_id)

            #找到query点的Rnn近邻,如果出现在tmp中全部删除
            rnn_list = self.radius_neighbor[query_id]
            jiaoji = set(tmp) & set(rnn_list) 

            for i in list(jiaoji):
                tmp.remove(i)
  
        #更新下特征点的id
        self.points_eigns['id'] = res
        end = len(res)
        print("NMS: %d"%( start - end))

有关NMS步骤上面讲的比较清楚,这里类似物体检测里的NMS,通过λ3对应置信度过滤掉propose ,通过计算r近邻对应IOU过大过滤掉同一物体,最终对于聚集密集的特征点有且仅取出一个点。




效果

数据集来自modelnet40 , 下面展示几个demo

Piano

可以看到点云从1000 -> Filter(2950) -> NMS(35),整体效果我觉得还可以,保留的特征点也比较多,参数就不细调了
iss算法,计算机视觉,算法,计算机视觉,人工智能,3d
iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

Person

可以看到点云从1000 -> Filter(6490) -> NMS(47),对于人这种不是特别规则的形状,效果我觉得差一点,如果不看原图很难恢复。
iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

iss算法,计算机视觉,算法,计算机视觉,人工智能,3d

iss算法,计算机视觉,算法,计算机视觉,人工智能,3d文章来源地址https://www.toymoban.com/news/detail-743708.html



到了这里,关于点云特征提取算法之ISS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测

    个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  ⏰往期文章:SpringBoot项目整合微信支付 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 📣种一棵树最好的时间是十年前,其次是现在! 💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言:

    2024年02月03日
    浏览(48)
  • 【计算机视觉】图像分割与特征提取——频域增强(低通滤波&高通滤波)

    个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  ⏰往期文章:SpringBoot项目整合微信支付 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 📣种一棵树最好的时间是十年前,其次是现在! 💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言:

    2024年01月15日
    浏览(53)
  • 计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程,我们可以将其比喻为人脑对视觉信息的处理过程。就像我们看到一个物体时,大脑会通

    2024年02月10日
    浏览(46)
  • 计算机图像处理—HOG 特征提取算法

    1. 实验内容 本实验将学习HOG 特征提取算法。 2. 实验要点 HOG 算法 HOG 算法有效的原因 创建 HOG 描述符 HOG 描述符中的元素数量 可视化 HOG 描述符 理解直方图 3. 实验环境 Python 3.6.6 numpy matplotlib cv2 copy 简介 正如在 ORB 算法中看到的,我们可以使用图像中的关键点进行匹配,以检

    2024年02月09日
    浏览(55)
  • 计算机视觉 3D点云极简概述

            点云是表示 3D 坐标系中的数字 3D 物理对象或空间的点数据库。它由数百万或者更多个单独的测量点组成,具有 x、y 和 z 坐标。3D点云是物体的高精度数字记录。点云用于生成用于 3D 建模的 3D 网格和其他模型。包括医学成像、3D 打印、制造、建筑、3D 游戏和虚拟

    2024年02月13日
    浏览(48)
  • 计算机视觉基础知识(八)--点云模型

    三维图像 一种特殊的信息表达形式; 特征是表达的空间中有三个维度的数据; 是对一类信息的统称; 信息的表现形式: 深度图:以灰度表达物体与相机的距离 几何模型:由cad软件建立 点云模型:所有逆向工程设备都将物体采样为点云 和二维图像相比; 三维图像借助第三

    2024年01月25日
    浏览(54)
  • 计算机视觉基础__图像特征

    目录 一、前言 二、位图和矢量图概念 三、图像的颜色特征 四、RGB 颜色空间 五、HSV 颜色空间 六、HLS 颜色空间 七、CMYK 颜色 八、Lab模式 九、索引模式 十、HSB色彩模式 十一、灰度图 十二、二值图 十三、P(pallete)模式 十四、位图模式 十五、双色调模式 十六、多通道模式

    2023年04月19日
    浏览(52)
  • 图像特征Vol.1:计算机视觉特征度量|第一弹:【纹理区域特征】

    🍊 什么是计算机视觉特征? 简单来说就是 图像特征 ,对于我们来说,看到一张图片,能很自然的说出和描述图像中的一些特征,但是同样的图片,丢给计算机,只是一个二维矩阵,计算机需要从这个图像中提取计算得到一些数值表示,来描述这个图像所具有的特征:颜色

    2024年02月03日
    浏览(63)
  • 【计算机视觉】不来试试图片轮廓提取?

    最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器) ,但那时的卷积核依靠 人工的经验和知识 来进行设计,而不能像卷积神经网络中那样让机器自己学习出合适的卷积核参数。 下面就介绍通过卷积来获取图像 轮廓图 的操作。

    2023年04月08日
    浏览(71)
  • 计算机视觉基础(5)——特征点及其描述子

    本文我们将学习到 特征点及其描述子 。在特征点检测中,我们将学习 角点检测和SIFT关键点检测器 ,角点检测以 哈里斯角点检测器 为例进行说明,SIFT将从 高斯拉普拉斯算子和高斯差分算子 展开。在描述子部分,我们将分别学习 SIFT描述子和二进制描述子 的概念、基本计算

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包