精华内容
下载资源
问答
  • 分割
    千次阅读
    2022-01-18 20:45:30

    1 图像分割定义和方法分类

    图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。这里特性可以是灰度、颜色、纹理等,目标可以对应单个区域,也可以对应多个区域。图像分割多年来一直得到人们的高度重视,至今已提出了上千种各种类型的分割算法,而且近年来每年都有上百篇有关研究报道发表。

    首先,对灰度图像的分割常可基于像素灰度值的2个性质:不连续性和相似性。区域内部的像素一般具有灰度相似性,而在区域之问的边界上般具有灰度不连续性。所以分割算法可据此分为利用区域间灰度不连续性的基于边界的算法和利用区域内灰度相似性的基于区域的算法。其次,根据分割过程中处理策略的不同,分割算法又可分为并行算法和串行算法。在并行算法中,所有判断和决定都可独立地和同时地做出,而在串行算法中,早期处理的结果可被其后的处理过橾所利用。一般串行算法所需计算时间常比并行算法要长,但抗噪声能力也常较强。分割算法可分成4类:①并行边界类;②串行边界类;③并行区域类;④串行区域类。

    2 边缘检测

    边缘检测是所有基于边界的分割方法的第一步。两个具有不同灰度值的相邻区域之总存在边缘。边缘是灰度值不连续的结果,这种不连续常可利用求导数方便地检测到般常用一阶和二阶导数来检测边缘。

    对图像中边缘的检测可借助空域微分算子通过卷积完成。实际上数字图像中求导数是利用差分近似微分来进行的。下面介绍几种简单的空域微分算子。

    (1)梯度算子,梯度对应一阶导数,梯度算子是一阶导数算子,比如Roberts算子,Prewitt算子,Sobel算子。

    (2)拉普拉斯算子,

    拉普拉斯( Laplacian)算子是1种二阶导数算子, 在数字图像中,对拉普拉斯值的计算也可借助各种模板实现。这里对模板的基本要求是对应中心像素的系数应是正的,而对应中心像素邻近像素的系数应是负的,且它们的和应该是零。拉普拉斯算子是1种二阶导数算子,所以对图像中的噪声相当敏感。另外它常产生双像素宽的边缘,精度较低,且也不能提供边缘方向的信息。由于以上原因,拉普拉斯算子主要用于已知边缘像素后确定该像素是在图像的暗区或明区一边。

     

    3 轮廓跟踪和图搜索

    实际图像分割中,在检测出边缘后还需将它们连接起来构成闭合的轮廓。由于用差分算子并行地检测边缘对噪声比较敏感,所以实际中常采用先检测可能的边缘点再串行跟连接成闭合轮廓的方法。由于串行方法可以在跟踪过程中充分利用先前获取的信息,常可取得较好的效果。另外,也可采用将边缘检测和轮廓跟踪互相结合顺序进行的方法。

    轮廓跟踪( boundary tracking)也称边缘点链接( edge point linking),是由(梯度图)一个边缘点出发,依次搜索并连接相邻边缘点从而逐步检测出轮廓的方法。为了消除噪声的影响,保持轮廓的光滑性(也可称刚性, rigidness),在搜索时每确定一个新的轮廊点都要考虑先前已得到的轮廓点。而为了克服噪声造成的边缘点之间的不连通,对梯度廊点都要考虑先前已得到的轮廓点。而为了克服噪声造成的边缘点之间的不连通,对梯度图要充分保持其已有的信息(常不能再取阈值去除低梯度像素)。一般来说轮廓跟踪包括三个步骤:

    (1)确定作为搜索起点的边缘点(根据算法不同,可以是一个点或多个点),起点的选择很重要,整个算法对此的依赖很大;

    (2)确定和采取一种合适的数据结构和搜索机理,在已发现的轮廓点基础上确定新的轮廓点,这里要注意研究先前的结果对选择下一个检测像素和下个结果的影响;

    (3)确定搜索终结的准则或终止条件(如封闭轮廓则回到起点),并在满足条件时停止进程,结束搜索。

    另一种比较复杂,计算量也较大,但在图像受噪声影响较大讨效果仍可比较好的方法是图搜索法。它借助状态空间搜索来寻求全局最优的轮廓。具体是将轮廓点和轮廓段用图( graph)结构表示,通过在图中进行搜索对应最小代价的通道来寻找闭合轮廓。

    4 阈值分割

    取阈值是最常见的并行的直接检测区域的分割方法,其他同类方法如像素特征空间分类可看做是取阈值技术的推广。假设图像由具有单峰灰度分布的目标和背景组成,在目标或背景内部的相邻像素间的灰度值是高度相关的,但在目标和背景交界处两边的像素在灰度值上有很大的差别。如果1幅图像满足这些条件,它的灰度直方图基本上可看做是由分别对应目标和背景的2个单峰直方图混合而成。此时如果这2个分布大小(数量)接近且均值相距足够远,而且均方差也足够小,则直方图应是双峰的。对这类图像常可用取阈值方法来较好地分割。

    5 基于变换直方图选取阈值

    在实际应用图像常受到噪声等的影响而使直方图中原本分离的峰之间的谷被填充,使得谷的检测很困难。为解决这类问题可以利用一些像素邻域的局部性质。比如直方图变换,灰度-梯度散射图。

    6 空间聚类

    利用特征空间聚类的方法进行图像分割可看做是对阈值分割概念的推广。它将图像空间中的元素按照从它们测得的特征值用对应的特征空间点表示,通过将特征空间的点聚集成对应不同区域的类团,然后再将它们划分开,并映射回原图像空间以得到分割的结果。

    在利用直方图的阈值分割中,取像素灰度为特征,用灰度直方图作为特征空间,对特征空间的划分利用灰度阙值进行。在利用灰度-梯度散射图分割的方法中,取像灰度和梯度为特征,用散射图作为特征空间,对特征空间的划分利用灰度阈值和梯度阈值进行。与取阈值分割类似,聚类方法也是一种全局的方法,比仅基于边缘检测的方法更抗噪声。但特征空间的聚类有时也常会导致产生图像空间不连通的分割区域,这也是因为没有利用图像像素空间分布的信息。

    聚类的方法很多,下面介绍几种常用的聚类方法。

    (1)k均值聚类

    将一个特征空间分成K个聚类的一种常用方法是K-均值法。K均值聚类具体算法不再详述。运用 K-均值法时理论上并未设类的数目已知,实际中常使用试探法来确定 K。为此需要测定聚类品质(quality),常用的判别准则多基于分割后类内和类间特征值的散布图,要求类内接近而类间区别大。可以先采用不同的 K 值进行聚类,根据聚类品质确定最后的类别数。

    (2)ISODATA聚类

    ISODATA聚类方法是在K-均值算法上发展起来的。它是一种非分层的聚类方法,其主要步骤如下:

    (1)设定N个聚类中心位置的初始值

    (2)对每个特征点求取离其最近的聚类中心位置,通过赋值把特征空间分成N个区域;

    (3)分别计算属于各聚类模式的平均值;

    (4)将最初的聚类中心位置与新的平均值比较,如果相问则停止;如果不同,则返回

    步骤(2)继续进行。

    理论上讲 ISODATA算法也需要预先知道聚类的数目,但实际中常根据经验先取稍大点的值,然后通过合并距离较近的聚类以得到最后的聚类数目。

    7 区域生长分割算法

    串行区域分割技术指采用串行处理的策略通过对目标区域的直接检测来实现图像分割的技术。串行分割方法的特点是将整个处理过程分解为顺序的多个步骤逐次进行,其中对后续步骤的处理要根据对前面已完成步骤的处理结果进行判断而确定。这里判断是要据一定的准则来进行的。一般说来如果准则是基于图像灰度特性的,则该方法可用于灰度图像的分割,如果准则是基于图像的其他特性(如纹理)的,则该方法也可用于相应图像的分割。

    串行区域分割中常利用图像多分辨率的表达结构,如金字塔结构。基于区域的串行分割技术有两种基本形式,一种是从单个像素出发,逐渐合并以形成所需的分割区域,称为区域生长。另一种是从全图出发,逐渐分裂切割至所需的分割区域,这两种方法可以结合使用。

    区域生长的基本思想是将具有相似性质的像素结合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当做新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。由此可知,在实际应用区域生长法时需要解决3个问题:

    (1)选择或确定一组能正确代表所需区域的种子像素;

    (2)确定在生长过程中能将相邻像素包括进来的准则;

    (3)制定让生长过程停止的条件或规则。

    种子像素的选取常可借助具体问题的特点进行。如在军用红外图像中检测目标时由于一般情况下目标辐射较大,所以可选用图中最亮的像素作为种子像素。要是对具体问题没有先验知识,则常可借助生长所用准则对每个像素进行相应计算。如果计算结果呈现聚类的情况则接近聚类重心的像素可取为种子像素。

    区域生长的一个关键是选择合适的生长或相似准则,生长准则的选取不仅依赖于具体问题本身,也和所用图像数据的种类有关。生长准则可根据不同原则制定,而使用不同的生长准则会影响区域生长的过程。基于区域灰度差的方法主要有如下步骤:

    (1)对图像进行逐行扫描,找出尚没有归属的像素;

    (2)以该像素为中心检査它的邻域像素,即将邻域中的像素逐个与它比较,如果灰度差小于预先确定的阈值,将它们合并;

    (3)以新合并的像素为中心,返回到步骤(2),检査新像素的邻域,直到区域不能进步扩张;

    (4)返回到步骤(1),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。

    8 彩色图像分割

    对颜色的感受是人类对电磁辐射中可见部分里不同频率知觉的体现。随着技术的进步,彩色图像使用得越来越多,彩色图像的分割在最近几年也越来越引起人们的重视。

    在许多实际应用中,可对彩色图像的各个分量进行适当的组合转化为灰度图像,然后可用对灰度图像的分割算法进行分割。下面仅考虑专门用于彩色图像分割的方法。要分割一幅彩色图像,首先要选好合适的彩色空间;其次要采用适合于此空间的分割策略和方法。

    (1)分割所用的彩色空间

    表达颜色的彩色空间有许多种,它们常是根据不同的应用目的提出的。下面围绕图像分割,介绍几种常用的彩色空间和它们的特点。

    最常见的彩色空间是红绿蓝( red green blue,RGB)空间,它是一种矩形直角空间结构的模型,是通过对颜色进行加运算完成颜色综合的彩色系统的基础。它用R、G、B个基本分量的值来表示颜色(三分量之间常有很高的相关性),它是面向硬件设备的(如CRT),物理意义明确但缺乏直感。

    通过对不同类型图像的分析,有人经过大量试验提出可用由R、G、B经过线性变换得到的3个正交彩色特征。

    另一种常用的彩色空间是HSI( hue saturation intensity)空问。HSI彩色空间的表示比较接近人眼的视觉生理特性,人眼对H、S、I变化的区分能力要比对R、G、B变化的区分能力强。另外在HSI空间中彩色图像的每一个均匀性彩色区域都对应一个相对一致的色调(H),这说明色调能够被用来进行独立于阴影的彩色区域的分割。

    (2)分割策略

    测量空间聚类法是分割彩色图像常用的方法。彩色图像在各个空间均可看做由3个分量构成,所以分割彩色图像的1种方法是建立一个“3-D直方图”,它可用一个3-D数组表示。这个3-D数组中的每个元素代表图像中具有给定3个分量值的像素的个数。阈值分割的概念可以扩展为在3-D空间搜索像素的聚类,并根据聚类来分割图像。

    彩色图像可以分步分割。有一种分两步的彩色图像分割算法,第一步借助取阈值方法进行粗略分割将图像转化为若干个区域,第一步利用(模糊)均值聚类法将第一步剩下的像素进一步分类。这种方法可看做是由粗到细进行的,先用取阈值方法是为了减少运用模糊均值聚类所需的计算量。

    更多相关内容
  • 这转眼间寒假就要过完了,相信大家的毕设也要准备动手了吧,作为一名大作业区的UP主,也该蹭波热度了,之前关于图像分类和目标检测我们都出了相应的教程,所以这期内容我们搞波新的,我们用Unet来做医学图像分割。...
  • 点云分割和点云分类(点云语义分割

    万次阅读 多人点赞 2021-09-05 13:27:46
    点云分割(point cloud segmentation) 根据空间、几何和纹理等特征点进行划分,同一划分内的点云拥有相似的特征。 点云分割的目的是分块,从而便于单独处理。 点云分类(point cloud classification) 为每个点...

    目录

    概念

    点云分割(point cloud segmentation)

    点云分类(point cloud classification)

     特征提取

    分割

    物体识别

    分类

     常见点云分割方法

    随机抽样一致算法(Random Sample Consensus,RANSAC)

    算法流程

     RANSAC与最小二乘区别

     PCL中的 Sample_consensus 模块

     欧式聚类分割(聚类)

    区域生长算法(聚类)

    基于颜色的区域生长分割(聚类)

     最小图割的分割

    基于法线微分的分割

     基于超体素的分割

     深度学习的分割方法


    概念

    点云分割(point cloud segmentation)

    根据空间、几何和纹理等特征点进行划分,同一划分内的点云拥有相似的特征。

    点云分割的目的是分块,从而便于单独处理。

    点云分类(point cloud classification)

    为每个点分配一个语义标记。点云的分类是将点云分类到不同的点云集。同一个点云集具有相似或相同的属性,例如地面、树木、人等。也叫做点云语义分割。

     特征提取

    单个点或一组点可以根据低级属性检测某种类型的点。

    • “低级属性”是指没有语义(例如,位置,高程,几何形状,颜色,强度,点密度等)的信息。
    • “低级属性 ”信息通常可以从点云数据中获取而无需事先的高级知识。例如,平面提取和边缘检测、以及特征描述子的 计算都可以视为特征提取过程。

    分割

    基于上述低级属性将点分组为一个部分或一个对象的过程。与单独对每个点处理或分析相比,分割过 程对每个对象的进一步处理和分析,使其具有更丰富的信息。

    物体识别

    识别点云中一种或多种类型对象的过程。该过程通常通过根据特征提取和分割的结果执行分析, 并基于先验知识在给定的约束和规则下进行。

    分类

    类似于对象识别的过程,该过程为每个点,线段或对象分配一个类别或标识,以表示某些类型的对象 (例如,标志,道路,标记或建筑物)。


    对象识别点云分类之间的区别在于:

    • 对象识别是利用一种方法以将一些特定对象与其他对象区分开
    • 分类的目的通常是在语义上标记整个场景。

    点云的有效分割是许多应用的前提

    • 工业测量/逆向工程:对零件表面提前进行分割,再进行后续重建、计算特征等操作。
    • 遥感领域:对地物进行提前分割,再进行分类识别等工作 

     常见点云分割方法

    随机抽样一致算法(Random Sample Consensus,RANSAC)

    采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。

    RANSAC算法假设数据中包含正确数据异常数据(或称为噪声)。

    正确数据记为内点(inliers),异常数据记为外点(outliers)。

    同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。该算法核心思想就是随机性和假设性:

    • 随机性是根据正确数据出现概率去随机选取抽样数据,根据大数定律,随机性模拟可以近似得到正确结果。
    • 假设性是假设选取出的抽样数据都是正确数据,然后用这些正确数据通过问题满足的模型,去计算其他点 ,然后对这次结果进行一个评分。

    RANSAC算法被广泛应用在计算机视觉领域和数学领域,例如直线拟合平面拟合计算图像点云间的变换矩阵计算基础矩阵等方面,使用的非常多。

    基于RANSAC的基本检测算法虽然具有较高的鲁棒性和效率,但是目前仅针对平面,球,圆柱体,圆锥和圆环物种基本的基元。

    算法流程

    1. 要得到一个直线模型,需要两个点唯一确定一个直线方程。所以第一 步随机选择两个点。
    2. 通过这两个点,可以计算出这两个点所表示的模型方程y=ax+b。
    3. 将所有的数据点套到这个模型中计算误差。
    4. 找到所有满足误差阈值的点。
    5. 然后我们再重复1~4这个过程,直到达到一定迭代次数后,选出那个被 支持的最多的模型,作为问题的解。

    Martin A. Fischler 和Robert C. Bolles于1981年发表在ACM期刊上的论文《Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography》

     RANSAC与最小二乘区别


    最小二乘法尽量去适应包括局外点在内的所有点。相 反,RANSAC能得出一个仅仅用局内点计算出模型, 并且概率还足够高。但是,RANSAC并不能保证结果 一定正确,为了保证算法有足够高的合理概率,必须小心的选择算法的参数(参数配置)。经实验验证, 对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法。

     最重要的参数就是迭代的次数 k :

    1. 假设任取一个点是内群点的概率为 w,则有 w​​​​​​​​​​​​​​= 数 据中内群点的数量/数据中点的总数;
    2. 则任取 n 个点都是内群点的概率为 w^n
    3. 所以我们所选择的 n 个点至少有一个不是内群点的 概率为 1 − w^n
    4. 所以我们连续重复 k 次都不能有一次全是内群点的 概率 𝑝𝑒为 (1-w^n)^k​​​​​​​;
    5. 由上,我们发现当 w​​​​​​​ 保持不变时,我们要想让𝑝𝑒尽 量小,则 n 越大,k 就需要越大

     

     PCL中的 Sample_consensus 模块

     PCL中的 Sample_consensus库实现了随机采样一致性及其泛化估计算法,以及例如平面、柱面等各种常见几何模型,用不同的估计算法和不同的几何模型自由结合估算点云中隐含的具体几何模型的系数, 实现点云中所处的几何模型的分割。

    支持以下模型:

    • SACMODEL_PLANE - 用于确定平面模型。平面的四个系数。
    • SACMODEL_LINE - 用于确定线模型。直线的六个系数由直线上的一个点和直线的方向给出。
    • SACMODEL_CIRCLE2D - 用于确定平面中的 2D 圆。圆的三个系数由其中心和半径给出。
    • SACMODEL_CIRCLE3D - 用于确定平面中的 3D 圆。圆的七个系数由其中心、半径和法线给出。
    • SACMODEL_SPHERE - 用于确定球体模型。球体的四个系数由其 3D 中心和半径给出。
    • SACMODEL_CYLINDER - 用于确定气缸模型。圆柱体的七个系数由其轴上的点、轴方向和半径给出。
    • SACMODEL_CONE - 用于确定锥模型。锥体的七个系数由其顶点、轴方向和张角给出。
    • SACMODEL_TORUS - 尚未实施
    • SACMODEL_PARALLEL_LINE -在最大指定角度偏差内确定与给定轴平行的线的模型。线系数类似于SACMODEL_LINE
    • SACMODEL_PERPENDICULAR_PLANE -在最大指定角度偏差内确定垂直于用户指定轴的平面的模型。平面系数类似于SACMODEL_PLANE
    • SACMODEL_PARALLEL_LINES - 尚未实现

    以下列表描述了实现的稳健样本共识估计器:

    //创建一个模型参数对象,用于记录结果
    pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);
    //inliers表示误差能容忍的点 记录的是点云的序号
    pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
    // 创建一个分割器
    pcl::SACSegmentation<pcl::PointXYZ> seg;
    // Optional seg.setOptimizeCoefficients (true);
    // Mandatory-设置目标几何形状
    seg.setModelType (pcl::SACMODEL_PLANE);
    //分割方法:随机采样法seg.setMethodType (pcl::SAC_RANSAC);
    //设置误差容忍范围seg.setDistanceThreshold (0.01);
    //输入点云seg.setInputCloud (cloud);
    //分割点云,得到参数
    seg.segment (*inliers, *coefficients);
    

     

    Schnabel R, Wahl R, Klein R. Efficient RANSAC for pointcloud shape detection[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2007, 26(2): 214-226.

    https://cg.cs.uni-bonn.de/en/publications/paper-details/schnabel-2007-efficient/

     欧式聚类分割(聚类)

    聚类方法,通过特征空间确定点与点之间的亲疏程度

    算法流程:

    1. 找到空间中某点p,有kdTree找到离他最近的n个点,判断这n个点到p的距离。将距离小于阈值r的点p1,p2,p3... 放在类Q里
    2. 在 Q里找到一点p1,重复1,找到p22,p23,p24 全部放进Q里
    3. 当 Q 再也不能有新点加入了,则完成搜索了

    pcl::EuclideanClusterExtraction<pcl::Point XYZ> ec;
    ec.setClusterTolerance (0.02); ec.setMinCl
    usterSize (100);
    ec.setMaxClusterSize (25000); ec.setSearchMethod (tree); ec.setInputCloud (cloud_filtered); ec.extract (cluster_indices);
    

    使用类pcl::ConditionEuclideanClustering实现点云分割,与其他分割方法不同的是该方法的聚类约束条件(欧式距离、平滑度、RGB颜色等)可以由用户自己定义,即当搜索到一个近邻点时,用户可以自定义该邻域点是否合并到当前聚类的条件。

    pcl::ConditionalEuclideanClustering<PointTypeFull> cec (true);//创建条件聚类分割对象,并进行初始化。cec.setInputCloud (cloud_with_normals);//设置输入点集
    //用于选择不同条件函数
    switch(Method)
    {
    case 1:
    cec.setConditionFunction (&enforceIntensitySimilarity); break;
    case 2:
    cec.setConditionFunction (&enforceCurvatureOrIntensitySimilarity); break;
    case 3:
    cec.setConditionFunction (&customRegionGrowing); break;
    default:
    cec.setConditionFunction (&customRegionGrowing); break;
     
    }
    cec.setClusterTolerance (500.0);//设置聚类参考点的搜索距离
    cec.setMinClusterSize (cloud_with_normals->points.size () / 1000);//设置过小聚类的标准cec.setMaxClusterSize (cloud_with_normals->points.size () / 5);//设置过大聚类的标准cec.segment (*clusters);//获取聚类的结果,分割结果保存在点云索引的向量中
    cec.getRemovedClusters (small_clusters, large_clusters);//获取无效尺寸的聚类
    

    这个条件的设置是可以由我们自定义的,因为除了距离检查,聚类的点还需要满足一个特殊的自定义的要 求,就是以第一个点为标准作为种子点,候选其周边的点作为它的对比或者比较的对象,如果满足条件就加入到聚类的对象中。

    //如果此函数返回true,则将添加候选点到种子点的簇类中。 
    bool customCondition(const pcl::PointXYZ& seedPoint, const pcl::PointXYZ& candidatePoin t, float squaredDistance) {
    
            // 在这里你可以添加你自定义的条件 
            return false; 
            return true;
    }

    区域生长算法(聚类)

    区域生长算法: 将具有相似性的点云集合起来构成区域。
    首先对每个需要分割的区域找出一个种子点作为生长的起点,然后将种子点周围邻域中与种子有相同或相似性质的点合并到种子像素所在的区域中。而新的点继续作为种子向四周生长,直到再没有满足条件 的像素可以包括进来,一个区域就生长而成了。

    算法流程:

    1. 计算 法线normal 和 曲率curvatures,依据曲率升序排序;
    2. 选择曲率最低的为初始种子点,种子周围的临近点和种子点云相比较;
    3. 法线的方向是否足够相近(法线夹角足够 r p y), 法线夹角阈值;
    4. 曲率是否足够小(表面处在同一个弯曲程度),区域差值阈值;
    5. 如果满足2,3则该点可用做种子点;
    6. 如果只满足2,则归类而不做种子;

     算法是针对小曲率变化面设计的,尤其适合对连续阶梯平面进行分割。

    //区域增长聚类分割对象	< 点 , 法 线 > 
    pcl::RegionGrowing<pcl::PointXYZ, pcl::Normal> reg; 
    reg.setMinClusterSize (50);	//最小的聚类的点数
    reg.setMaxClusterSize (1000000);//最大的聚类的点数
    reg.setSearchMethod (tree);	//搜索方式
    reg.setNumberOfNeighbours (30); //设置搜索的邻域点的个数
    reg.setInputCloud (cloud);	//输入点
    //reg.setIndices (indices); 
    reg.setInputNormals (normals);	//输入的法线
    reg.setSmoothnessThreshold (3.0 / 180.0 * M_PI);//设置平滑度 法线差值阈值
    reg.setCurvatureThreshold (1.0);	//设置曲率的阀值
    

    基于颜色的区域生长分割(聚类)

    基于颜色的区域生长分割

    基于颜色的区域生长分割原理上和基于曲率,法线的分割方法是一致的,只不过比较目标换成了颜色。可以认为,同一个颜色且挨得近,是一类的可能性很大,比较适合用于室内场景分割。尤其是复杂室内场景,颜色分割可以轻松的将连续的场景点云变成不同的物体。哪怕是高低不平的地面,设法用采样一致分割器抽掉平面,颜色分割算法对不同的颜色的物体实现分割。

    算法主要分为两步:

    1. 分割,当前种子点和领域点之间色差小于色差阀值的视为一个聚类。
    2. 合并,聚类之间的色差小于色差阀值和并为一个聚类,且当前聚类中点的数量小于聚类点数量的与最近的聚类合并在一起。

     RBG的距离

    //基于颜色的区域生成的对象 
    pcl::RegionGrowingRGB<pcl::PointXYZRGB> reg; 
    reg.setInputCloud (cloud); 
    reg.setIndices (indices); //点云的索引 
    reg.setSearchMethod (tree); 
    reg.setDistanceThreshold (10);//距离的阀值 
    reg.setPointColorThreshold (6);//点与点之间颜色容差 
    reg.setRegionColorThreshold (5);//区域之间容差 
    reg.setMinClusterSize (600); //设置聚类的大小 
    std::vector <pcl::PointIndices> clusters; 
    reg.extract (clusters);//
    pcl::PointCloud <pcl::PointXYZRGB>::Ptr colored_cloud = reg.getColoredCloud ();

     最小图割的分割

    图论中的最小割(min-cut) 广泛应用在网络规划,求解桥问题,图像分割等领域。

    最小割算法是图论中的一个概念,其作用是以某种方式,将两个点分开,当然这两个点中间可能是通过无数的点再相连的。 如果要分开最左边的点和最右边的点,红绿两种割法都是可行的, 但是红线跨过了三条线,绿线只跨过了两条。单从跨线数量上来论可以得出绿线这种切割方法更优的结论。但假设线上有不同的权值,那么最优切割则和权值有关了。

     

     http://gfx.cs.princeton.edu/pubs/Golovinskiy_2009_MBS/paper_small.pdf

    算法主要思想:

    1. 建图:对于给定的点云,算法将包含点云中每一个点的图构造为一组普通顶点和另外两个称为源点和汇点的顶点。每个普通顶点都有边缘,将对应的点与其最近的邻居连接起来。
    2. 算法为每条边缘分配权重。有三种不同的权:首先,它将权重分配到云点之间的边缘。这个权重称为平滑成本,由公式计算:

    这里dist是点之间的距离。距离点越远,边被切割的可能性就越大。

            3.算法设置数据成本。它包括前景和背景惩罚。第一个是将云点与源顶点连接起来并具有用户定义的常量值的边缘的权重。

     对点云的前景点和背景点进行划分。

    // 申明一个Min-cut的聚类对象pcl::MinCutSegmentation<pcl::PointXYZ> clustering; clustering.setInputCloud(cloud);	//设置输入
    //创建一个点云,列出所知道的所有属于对象的点
    // (前景点)在这里设置聚类对象的中心点(想想是不是可以可以使用鼠标直接选择聚类中心点的方法呢?) pcl::PointCloud<pcl::PointXYZ>::Ptr foregroundPoints(new pcl::PointCloud<pcl::PointXYZ>()); pcl::PointXYZ point;
    point.x = 100.0;
    point.y = 100.0;
    point.z = 100.0;
    foregroundPoints->points.push_back(point);
    clustering.setForegroundPoints(foregroundPoints);//设置聚类对象的前景点
    
    //设置sigma,它影响计算平滑度的成本。它的设置取决于点云之间的间隔(分辨率) clustering.setSigma(0.02);// cet cost = exp(-(dist/cet)^2)
    // 设 置 聚 类 对 象 的 半 径 . clustering.setRadius(0.01);// dist2Center / radius
    
    //设置需要搜索的临近点的个数,增加这个也就是要增加边界处图的个数
    clustering.setNumberOfNeighbours(20);
    
    //设置前景点的权重(也就是排除在聚类对象中的点,它是点云之间线的权重,) clustering.setSourceWeight(0.6);
    
     
    std::vector <pcl::PointIndices> clusters; clustering.extract(clusters);
    

    基于法线微分的分割

    根据不同尺度下法向量特征的差异性,利用pcl::DifferenceOfNormalsEstimation实现点云分割,在处理有较大尺度变化的场景点云分割效果较好,利用不同支撑半径去估算同一点的两个单位法向量,单位法向量的差定义DoN特征

    DoN算法:

    DoN特征源于观察到基于所给半径估计的表面法向量可以反映曲面的内在几何特征,因此这种分割算法是基于法线估计的,需要计算点云中某一点的法线估计。而通常在计算法线估计的时候都会用到邻域信息,很明显邻域大小的选取会影响法线估计的结果。

    而在DoN算法中,邻域选择的大小就被称为support radius。对点云中某一点选取不同的支持半径,即可以得到不同的法线估计,而法线之间的差异,就是是所说的法线差异。

    PCL_点云分割_基于法线微分分割

    算法流程:

    1. 对于输入点云数据中的每一点,利用较大的支撑半径计算法向量;
    2. 对于输入点云数据中的每一点,利用较大的支撑半径计算法向量;
    3. 对于输入点云数据中的每一点,单位化每一点的法向量差异
    4. 过滤所得的向量域(DoN特征向量),分割出目标尺寸对应的点云;
    // Create output cloud for DoN results
    PointCloud<PointNormal>::Ptr doncloud (new pcl::PointCloud<PointNormal>); copyPointCloud<PointXYZRGB, PointNormal>(*cloud, *doncloud);
    
    pcl::DifferenceOfNormalsEstimation<PointXYZRGB, PointNormal, PointNormal> do
    n;
    don.setInputCloud (cloud); 
    don.setNormalScaleLarge (normals_large_scale); 
    don.setNormalScaleSmall (normals_small_scale); don.initCompute ();
    // Compute DoN 
    don.computeFeature (*doncloud);
    

    Difference of Normals as a Multi-Scale Operator in Unorganized Point Clouds

     基于超体素的分割

     超体(super voxel)是一种集合,集合的元素是“体素”。
    与体素滤波器中的体类似,其本质是一个个的小方块。与之前提到的所有分割手段不同,超体聚类的目的 并不是分割出某种特定物体,其对点云实施过分割(over segmentation),将场景点云化成很多小块,并 研究每个小块之间的关系。
    以八叉树对点云进行划分,获得不同点团之间的邻接关系。与图像相似,点云的邻接关系也有很多,如面 邻接、线邻接、点邻接。

    【PCL】—超体聚类点云分割算法详解 

     超体聚类实际上是一种特殊的区域生长算法,和无限制的生长不同,超体聚类首先需要规律的布置区域生长“晶核”。晶核在空间中实际上是均匀分布的,并指定晶核距离(Rseed),再指定粒子距离(Rvoxel),再指定最小晶粒(MOV),过小的晶粒需要融入最近的大晶粒。

     有了晶粒和结晶范围之后,我们只需要控制结晶过程,就能将整个空间划分开了。结晶过程的本质就是不断吸纳类似的粒子(八分空间)。类似是一个比较模糊的概念,关于类似的定义有以下公式:

    公式中的Dc表示颜色上的差异,Dn表示法线上的差异,Ds代表点距离上的差异。w表示一系列权重,用于控制结晶形状。在晶核周围寻找一圈,D最小的体素被认为是下一个“被发展的对象”。

    需要注意的是,结晶过程并不是长完一个晶核再长下一个,而是所有的晶核同时开始生长。接下来所有晶核继续公平竞争,发展第二个“对象”,以此循环。最终所有晶体应该几乎同时完成生长,整个点云也被晶格所分割开来,并且保证了一个晶包里的粒子都是类似的。

    //生成结晶器
    pcl::SupervoxelClustering<PointT> super(voxel_resolution, seed_resolution);
    //和点云形式有关if(disable_transform)
    super.setUseSingleCameraTransform(false);
    //输入点云及结晶参数
    super.setInputCloud(cloud); 
    super.setColorImportance(color_importance);
    super.setSpatialImportance(spatial_importance); super.setNormalImportance(normal_importance);
    //输出结晶分割结果:结果是一个映射表
    std::map <uint32_t, pcl::Supervoxel<PointT>::Ptr > supervoxel_clusters; super.extract(supervoxel_clusters);	//获得晶体中心
    PointCloudT::Ptr voxel_centroid_cloud = super.getVoxelCentroidCloud();	//获得晶体
    PointLCloudT::Ptr labeled_voxel_cloud = super.getLabeledVoxelCloud();
    

     深度学习的分割方法

    深度学习是当前模式识别,计算机视觉和数据分析中最有影响力,发展最快的前沿技术。

     1、基于多视图

     2、基于体素

     

     3、端到端-直接对点云进行处理

     

     Guo Y, Wang H, Hu Q, et al. Deep learning for 3d point clouds: A survey[J]. IEEE transactions on pattern analysis and machine intelligence, 2020.

     Guo Y, Wang H, Hu Q, et al. Deep learning for 3d point clouds: A survey[J]. IEEE transactions on pattern analysis and machine intelligence, 2020.

    展开全文
  • 车牌定位之字符分割

    热门讨论 2015-02-11 13:38:39
    基于opencv实现车牌识别之字符定位部分
  • 本文发表于第32届神经信息处理系统会议(NIPS 2018),是法国汽车零部件供应商法雷奥集团(Valeo)研究提出的一种用于自动驾驶领域的多任务神经网络,可同时执行目标检测与语义分割任务。

    在这里插入图片描述

    本文发表于第32届神经信息处理系统会议(NIPS 2018),是法国汽车零部件供应商法雷奥集团(Valeo)研究提出的一种用于自动驾驶领域的多任务神经网络,可同时执行目标检测与语义分割任务。
    代码开源地址:https://github.com/MarvinTeichmann/MultiNet

    Abstract

    卷积神经网络(CNN)被成功地用于各种视觉感知任务,包括目标检测、语义分割、光流、深度估计和视觉SLAM。通常,这些任务是独立探索和建模的。

    本文提出了一种同时进行学习目标检测和语义分割的联合多任务网络设计。主要目的是通过共享两个任务的编码器来实现低功耗嵌入式SOC的实时性能。我们使用一个类似于ResNet10的小型编码器构建了一个高效的体系结构,该编码器为两个解码器所共享。目标检测使用YOLOv2类解码器,语义分割使用FCN作为解码器。

    我们在两个公共数据集(Kitti,Cityscapes)和我们的私有鱼眼摄像机数据集中对所提出的网络进行了评估,并证明了联合网络与单独网络具有相同的准确率。我们进一步优化了网络,使1280x384分辨率的图像达到30fps。


    1. Introduction

    卷积神经网络(CNNs)已经成为自动车辆中大多数视觉感知任务的标准构件。目标检测是CNN在行人和车辆检测中的首批成功应用之一。近年来,语义分割逐渐成熟,从检测道路、车道、路缘等道路对象开始。尽管嵌入式系统的计算能力有了很大提高,专用CNN硬件加速器的趋势也在不断发展,但高精度的语义分割的实时性能仍然具有挑战性。本文提出了一种语义分割和目标检测的实时联合网络,覆盖了自动驾驶中所有的关键对象。

    论文的其余部分结构如下。第二节回顾了目标检测在自动驾驶中的应用,并提供了使用多任务网络解决该问题的动机。第三部分详细介绍了实验装置,讨论了所提出的体系结构和实验结果。最后,第四部分对论文进行了总结,并提出了未来可能的研究方向。

    在这里插入图片描述

    2. Multi-task learning in Automated Driving

    多任务的联合学习属于机器学习的一个子分支,称为多任务学习。多任务联合学习背后的基本理论是,网络在接受多任务训练时可以表现得更好,因为它们通过利用任务间规则来更快地学习游戏规则。这些网络不仅具有较好的通用性,而且降低了计算复杂度,使其在低功耗嵌入式系统中非常有效。最近的进展表明,CNN可以用于各种任务[6],包括运动目标检测[13]、深度估计[8]和视觉SLAM[9]。

    我们的工作最接近于最近的MultiNet[14]。我们的不同之处在于,我们关注的是更小的网络更多类的两个任务,以及在三个数据集中进行的更广泛的实验

    2.1 Important Objects for Automated Driving

    流行的语义分割汽车数据集有CamVid[1]和较新的City Scenes[3]。后者具有5000个注释帧的大小,这是相对较小的。在这个数据集上训练的算法不能很好地推广到在其他城市和隧道等看不见的对象上测试的数据。为了弥补这一点,我们创建了像Synthia[11]和Virtual Kitti[4]这样的合成数据集。有一些文献表明,在较小的数据集中,组合会产生合理的结果。但对于自动驾驶系统的商业部署来说,它们仍然有限。因此,最近正在努力构建更大的语义细分数据集,如Mapillary vistas数据集[10]和ApolloScape[7]。Mapillary数据集由25,000幅图像组成,共100类。ApolloScape数据集由50个类别的143,000张图像组成。

    2.2 Pros and Cons of MTL

    在本文中,我们提出了一种具有共享编码器的网络结构,该编码器可以共同学习。其主要优点是提高了效率、可伸缩性,可以利用先前的功能添加更多任务,并通过归纳迁移(任务的学习可转移特征)实现更好的泛化。我们将在下面更详细地讨论共享网络的优缺点。

    共享网络的优点:

    • 计算效率:共享功能背后简单易懂的直觉提高了计算效率。假设有两个类和两个独立的网络,分别占用50%的处理能力。如果有可能在两个网络之间共享30%,则每个网络都可以重复使用额外的15%来单独创建一个稍大的网络。有大量的经验证据表明,网络的初始层是与任务无关的(oriented Gabor filters),我们应该能够进行一定程度的共享,越多越好。
    • 泛化和准确性:在忽略计算效率的情况下,共同学习的网络往往泛化得更好、更准确。这就是为什么ImageNet上的迁移学习非常流行的原因,那里有网络学习非常复杂的类别,比如区分特定种类的狗。因为拉布拉多犬和博美拉多犬这两个物种之间的细微差别是后天习得的,所以它们更善于检测一项更简单的犬类检测任务。另一个论点是,当他们共同学习时,过度适应某项特定任务的可能性较小。
    • 可扩展到更多任务,如流量估计、深度、通信和跟踪。因此,可以协调共同的CNN特写流水线,以用于各种任务。

    共享网络的缺点:

    • 在非共享网络的情况下,算法是完全独立的。这可以使数据集设计、体系结构设计、调优、硬负面挖掘等变得更简单、更容易管理。
    • 调试共享网络(尤其是当它不工作时)相对较难。

    3. Proposed Algorithm and Results

    3.1 Network Architecture

    在本节中,我们将报告我们计划改进的基线网络设计的结果。我们在图1的高级框图中提出了一种联合学习的共享编码器网络体系结构。我们实现了一个由3个分割类(背景、道路、人行道)和3个对象类(汽车、人、骑车人)组成的两任务网络。

    为了在低功耗嵌入式系统上实现可行性,我们使用了一个名为 Resnet10 的小型编码器,该编码器完全共享这两个任务。FCN8 作为语义分割的解码器,YOLO 作为目标检测的解码器。语义分割的损失函数是最小化误分类的交叉熵损失。对于几何函数,以平方误差损失的形式将目标定位的平均精度作为误差函数。对于这两个任务,我们使用单个损失的加权和 L = w s e g ∗ L s e g + w d e t ∗ L d e t L=w_{seg}∗L_{seg}+w_{det}∗L_{det} L=wsegLseg+wdetLdet。在鱼眼相机具有较大空间变异畸变的情况下,我们使用多项式模型实现了镜头畸变校正。

    在这里插入图片描述

    3.2 Experiments

    在这一部分中,我们将解释实验设置,包括使用的数据集、训练算法细节等,并讨论结果。

    我们在包含5000张图像和两个公开可用的数据集Kitti[5]和CitySces[3]的内部鱼眼数据集上进行了训练和评估。我们使用Keras[2]实现了不同提出的多任务架构。我们使用了来自ImageNet的预先训练好的Resnet10编码器权重,然后针对这两个任务进行了微调FCN8上采样层使用随机权重进行初始化。

    我们使用ADAM优化器,因为它提供了更快的收敛速度,学习率为0.0005。优化器采用分类交叉熵损失和平方误差损失作为损失函数。以平均类IOU(交集)和每类IOU作为语义分割的精度度量,以平均平均精度(MAP)和每类平均精度作为目标检测的精度度量。由于多个任务需要内存,所有输入图像的大小都调整为1280x384

    表1总结了在Kitti、Citycapes和我们的内部鱼眼数据集上STL网络和MTL网络所获得的结果。这旨在为合并更复杂的多任务学习技术提供基准精度。我们将分割网络(STL Seg)和检测网络(STL Det)与执行分割和检测的MTL网络(MTL、MTL100和MTL100)进行比较。

    在这里插入图片描述

    我们测试了MTL损耗的3种配置,第一种配置(MTL)使用分割损耗和检测损耗的简单和 ( w s e g = w d e t = 1 ) (w_{seg}=w_{det}=1) (wseg=wdet=1)。另外两个配置MTL10MTL100使用任务损失的加权和,其中分割损失分别用权重 w s e g = 10 w_{seg}=10 wseg=10 w s e g = 100 w_{seg}=100 wseg=100加权。这弥补了任务损失尺度的差异:在训练过程中,分割损失是检测损失的10-100倍

    MTL网络中的这种加权提高了3个数据集的分割任务的性能。即使分割任务的MTL结果略低于STL(Single-task Learning)结果,本实验也表明,通过正确调整参数,多任务网络具有学习更多的能力。此外,通过保持几乎相同的精度,我们在内存和计算效率方面有了显著的提高。我们利用几种标准的优化技术来进一步改善运行时间,并在汽车级低功耗SOC上实现30fps。

    4 Conclusion

    本文中,我们讨论了多任务学习在自动驾驶环境中的应用,用于联合语义分割和目标检测任务。首先,我们激发了完成这两项任务的需要而不仅仅是语义分割。

    然后我们讨论了使用多任务方法的利弊。我们通过精心选择编解码器,构建了一个高效的联合网络,并对其进行了进一步优化,在低功耗的嵌入式系统上达到了30fps。

    我们分享了在三个数据集上的实验结果,证明了联合网络的有效性。在未来的工作中,我们计划探索增加视觉感知任务,如深度估计、流量估计和视觉SLAM。

    更多精彩内容,请关注我的公众号【AI 修炼之路】!

    展开全文
  • 常见图像分割算法实现源代码

    热门讨论 2014-09-30 16:31:01
    常见图像分割算法实现源代码,对于在选择合适的分割算法,可以做分析对比,减少开发时间,包括边界分割,阈值分割,区域分割
  • 图像分割总结

    千次阅读 2022-03-08 16:48:42
    这篇总结主要以梳理deeplab系列为主,除此之外图像分割领域还有很多的东西,推荐了一篇github上的总结 啥是图像分割 AI的图像领域工作,大致可以分为这么几个方向,图像分类、目标检测、图像分割,而图像分割又分为...

    在DeepLab中,将输入图片与输出特征图的尺度之比记为output_stride,如输入图片是256*256,输出是16*16,那么output_stride为16。

    这篇总结主要以梳理deeplab系列为主,除此之外图像分割领域还有很多的东西,推荐了一篇github上的总结

    啥是图像分割

    AI的图像领域工作,大致可以分为这么几个方向,图像分类、目标检测、图像分割,而图像分割又分为语义分割和实例分割。语义分割与实例分割的区别呢就是语义分割只分类别,不分个体,而实例分割呢,不但区分种类,而且区分个体,啥意思呢?如下图,语义分割只分类羊、狗、人,不分羊1、2、3...,但是实例分割呢,在分类的基础上,还要分割羊1,羊2.....。因此有一种对于实例分割的理解呢就是语义分割+目标检测,因为目标检测能够区分个体。

    • 图像分类:判别图中物体是什么,比如是猫还是狗;

    • 语义分割:对图像进行像素级分类,预测每个像素属于的类别,不区分个体;

    • 目标检测:寻找图像中的物体并进行定位;

    • 实例分割:定位图中每个物体,并进行像素级标注,区分不同个体;

    其实AI发展到今天,已经很难将什么分类,检测,语义,完全的分割开,这么做也没啥实际意义。下图是目标检测中MASK-RCNN的网络结构,后面的three branches部分,对应的三个方面分别是语义、回归和分类。目标检测可以将其分割成两个部分,一个是分类一个是回归,分类得到框住的是什么东西,回归使框更加准确。MASK-RCNN中之所以加入了语义分割的部分,是因为语义分割能够较好的提高目标检测对于小目标的准确率。

    基础知识点

    空洞卷积

    将深度学习卷积的思想应用到图像分割有一个很重要的问题

    就是深度学习无论是检测还是分类,都会进行下采样,增加特征图的深度,降低他们宽高。但是下采样对于图像分割确不是很理想,因为图像分割需要对每一个像素进行分类,对位置信息要求很高,这个位置下的像素,如果分类正确了,位置搞错了,那他就是其他的像素,这也是不行的。因此将卷积运用到图像分割就遇到了一个很尴尬的情况,卷积一定伴随着下采样,以此获取像素点及其周围一片整体的信息,但这会造成像素在图像中位置信息的丢失。图像分割又必须尽可能的保留位置信息,这样才能保证每一个像素点都分类正确。为了解决这个问题就诞生了一种全新的卷积,空洞卷积(atrous convolution),这种卷积既能不进行下采样,丢失像素的位置信息,又能获取像素与周围像素的整体信息。这种卷积在DeepLab V1中首先被提出,在DeepLab之后的版本中也一直被使用。

    ASPP

    想要解释清楚什么是ASPP,首先要解释清楚什么是SPP,因为ASPP完全是借鉴SPP的思想,对SPP的一个变种,或者说是SPP针对语义分割问题的一个调整

    深度学习领域里存在一个问题,就是你输入给CNN的图像一定是固定尺寸大小的,但是由于你检测出的目标有长有宽,需要将检测出的有长有短,有大有小的图像进行调整,调整成相同的尺寸去进行分类。因此一开始遇到这种问题,大家的解决办法都是裁剪或者resize,但是裁剪会造成图像区域的丢失,而resize会造成长宽比的变化,这两种情况都会极大的丢失图像原有的信息。因此在深度学习领域诞生了一个方法,叫SPP(Spatial Pyramid Pooling),SPP得网络结构如下

    SPP就是一顿卷,卷到8*8之后,对这个特征图进行一次下采样得到一个4*4的特征图,然后再对4*4的特征图进行一次下采样,得到一个2*2的特征图,再对2*2的特征图进行一次下采样得到1*1的特征图,将得到的3个特征图拼接到一起,得到一个21(4*4+2*2+1*1)的特征向量,进行之后的操作。为啥这么做呢,1*1的特征图对应差不多原图那么大,2*2的每一个对应差不多图像的四分之一,以此类推,这样增加了,特征图到原始图像的对应比例,有助于解决深度学习问题中的尺度问题。

    啥是ASPP(Atrous Spatial Pyramid Pooling)呢,ASPP就是Atrous的SPP。SPP中用了下采样,ASPP中使用空洞卷积代替了下采样操作,只是每次使用的空洞间隔不一样,以此来解决图像分割中的多尺度物体问题。

    deeplab进化史

    DeepLabv1:

    deeplabv1的创新点,主要有两点,第一点是使用空洞卷积,第二点是使用全连接CRF

    空洞卷积,

    deeplabv1的算法流程

    全联接CRF的效果

    DeepLabv2:

    空洞卷积是存在理论问题的,论文中称为gridding,其实就是网格效应/棋盘问题。因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖。

    • 局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。

    • 远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。

    deeplabv2的创新点是借鉴了SPP的思想,将其移植到了图像分割领域,提出了ASPP思想。

    使用不同rate的空洞卷积,代替原本SPP的下采样操作

    不同rate的空洞卷积完成之后,进行拼接

    DeepLabv3:

    v3的主要创新点,如该论文的题目一样rethinking atrous convolution,重新思考了一下。论文中拿掉了之前的全连接CRF,更加侧重空洞卷积的使用,这个位置也是可以理解的,深度学习的发展方向还是越来越黑的。

    v3将原本单一方向的空洞卷积增加为两个方向的卷积,类似效果如下图,原本v2得到一个特征图block4后,会将这个特征图复制成四份,分别作rate=6、rate=12......的空洞卷积,如下方左图,但是现在会在复制出的特征图上做多个空洞卷积(左侧这个图并不完全准确,只是表达会做很多个卷积的一个思想),具体的卷积尺度是由Multi-grid Method决定的。

    multi-grid 作者考虑了multi-grid方法,即每个block中的三个卷积有各自unit rate,例如Multi Grid = (1, 2, 4),block的dilate rate=2,则block中每个卷积的实际膨胀率=2* (1, 2, 4)=(2,4,8)

    这个方法确定之后呢,作者通过实验发现,膨胀率越大,卷积核中的有效权重越少,当膨胀率足够大时,只有卷积核最中间的权重有效,即退化成了1x1卷积核,并不能获取到全局的context信息。3x3的卷积核中有效权重与膨胀率的对应如下:

    因此作者将原本对于每个Block简单的多个空洞卷积的结构,更改为

    DeepLabv3+:

    v3+在v3的基础上,进行了两点改变,

    第一点改变,结合了Encoder-Decoder结构,得到的新的算法结构,如下图

    详细的算法结构如下,其中Encoder就是v3

    第二点改变把Xception和Depthwise separable convolution应用到Atrous Spatial Pyramid Pooling和decoder中。

    相信了解过mobilenet网络结构的读者,都会知道啥是Depthwise separable convolution,作用是干啥的呢,就是提速的。

    论文地址

    SPP-NET: https://arxiv.org/pdf/1406.4729.pdf

    DeepLabv1: https://arxiv.org/pdf/1412.7062v3.pdf

    DeepLabv2: https://arxiv.org/pdf/1606.00915.pdf

    DeepLabv3: https://arxiv.org/pdf/1706.05587.pdf

    DeepLabv3+: https://arxiv.org/pdf/1802.02611.pdf

    Xception: Deep Learning with Depthwise Separable Convolutions https://arxiv.org/abs/1610.02357

    相关推荐

    这是github上的一篇总结,别的不多说,就放两张里面的截图吧

    https://github.com/mrgloom/awesome-semantic-segmentation

     

    参考

    https://mp.weixin.qq.com/s?__biz=MzUyMjE2MTE0Mw%3D%3D&mid=2247492453&idx=1&sn=1a9e42283a3f3b311d60fd356ed8b1f2&scene=45#wechat_redirect

    语义分割模型之DeepLabv3+ - 知乎

    图像分割三-DeepLab V1~4 - 知乎

    展开全文
  • 图像语义分割方法研究进展

    千次阅读 多人点赞 2021-12-21 11:22:39
    全监督学习的图像语义分割方法研究进展1 全监督学习的图像语义分割方法1.1 基于全卷积的图像语义分割方法 论文链接:https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDLAST2021&...
  • 语义分割、实例分割

    千次阅读 2022-03-23 13:56:02
    最近经常看到图像分割中的一些专业术语,特地搜集整合了一下 1、语义分割和实例分割 以下内容大多来自一文读懂语义分割与实例分割 - 知乎以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化。...
  • 1 图像分割 所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。我们先对目前主要的图像分割方法做个...
  • 手把手教你用UNet做医学图像分割系统

    万次阅读 多人点赞 2022-02-13 21:49:23
    这转眼间寒假就要过完了,相信大家的毕设也要准备动手了吧,作为一名大作业区的UP主,也该蹭波热度了,之前关于图像分类和目标检测我们都出了相应的教程,所以这期内容我们搞波新的,我们用Unet来做医学图像分割。...
  • 图像分割综述

    万次阅读 多人点赞 2019-07-09 22:03:48
    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割...
  • 点云的实例分割和语义分割

    千次阅读 多人点赞 2019-12-27 19:36:39
    SGPN [CVPR 2018]:点云的实例分割与物体检测。(SGPN: Similarity Group Proposal Network for 3D Point Cloud Instance Segmentation。 RSNet [CVPR 2018]:点云的语义分割。(Recurrent Slice Networks for 3D ...
  • Labelme分割标注软件使用

    万次阅读 多人点赞 2021-09-07 17:16:54
    Labelme是一款经典的标注工具,支持目标检测、语义分割、实例分割等任务。今天针对分割任务的数据标注进行简单的介绍。开源项目地址: https://github.com/wkentaro/labelme
  • 图像分割是图像处理和计算机视觉的一个重要应用方向,在深度学习的影响下,图像分割经历了由传统图像处理技术向深度学习主导的重要转变。本章作为一个概述性章节,主要对深度学习、计算机视觉和图像分割进行简单的...
  • 数字图像处理:实验六 图像分割

    千次阅读 2022-05-03 16:12:27
    图像分割的基本策略主要是基于图像灰度值的两个特性,即灰度的不连续性和灰度的相似性,因此图像分割方法可分为基于边缘的分割方法和基于区域的分割方法。本次实验通过完成简单的图像分割进一步加深对图像分割的理解...
  • 基于小波变换的医学图像分割

    千次阅读 多人点赞 2020-10-18 16:02:45
    图像分割是一种重要的图像分析技术。对图像分割的研究一直是图像技术研究中的热点和焦点。医学图像分割是图像分割的一个重要应用领域,也是一个经典难题,至今已有上千种分割方法,既有经典的方法也有结合新兴理论的...
  • 语义分割模型总结

    千次阅读 2022-04-05 10:56:07
    之前看了一段时间OoD在语义分割中的应用,并且学习了一些基本的语义分割模型,总结记录 本文目录语义分割FCNUnetSegNet(实时语义分割)Deeplab v1(VGG16)Deeplab v2(Resnet)Deeplab v3 语义分割 语义分割一直存着语义...
  • 自动多阈值分割matlab程序

    热门讨论 2014-03-12 14:32:54
    通过求差分曲线,利用阈值分割算法对图像进行自动多阈值分割
  • 语义分割(Semantic segmentatio)是计算机视觉中的关键任务之 一。现实中,越来越多的应用场景需要从影像中推理出相关的知识或语义(即由具体到抽象 的过程)。作为计算机视觉的核心问题,语义分割对于场景理解的...
  • 图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。 那么,如何优雅且体面的图像分割? 先说一个简单的的吧,也就是先做一回调包侠:实现的库——PixelLib,了解一下。 当然,...
  • 分割网络对结构光图像进行分割

    千次阅读 2022-02-10 17:56:39
    使用分割网络对结构光图像进行分割
  • Python实例:实现拆分含有多种分割符号的字符串的方法
  • 语义分割与实例分割 Labelme标注教学

    千次阅读 热门讨论 2022-02-22 12:47:04
    LabelMe 是个可以绘制多边形、矩形、圆形、直线、点的一套标记工具,可用于分类、目标检测、语义分割、实例分割任务上的数据标注。 1.label安装与数据标注 首先安装LabelMe,我使用Anaconda 进行安装。打开Anaconda ...
  • 图像分割算法的分析和评价主要分为两个方面:视觉效果和性能指标。前者主要是对图像的视觉效果和直观感受做出评价,而后者则是利用严格的数学公式,计算出算法的数值化指标。这里总结出10种常见的图像分割评价指标:...
  • 上周在组会学习中小师妹介绍了分水岭算法和阈值分割算法,并用opencv实现相关代码,借用实现的代码,加之一些优秀的博客,对于图像分割做一个简单的介绍。在这里,将从以下四个方面对于图像分割做一个简单的介绍,...
  • 语义分割之SegFormer分享

    千次阅读 热门讨论 2021-10-14 11:07:54
    今年可以说是分割算法爆发的一年,首先Vit通过引入transform将ADE20K mIOU精度第一次刷到50%,超过了之前HRnet+OCR效果,然后再是Swin屠榜各大视觉任务,在分类,语义分割和实例分割都做到了SOTA,斩获ICCV2021的b...
  • 图像分割与视频分割方法

    千次阅读 2019-05-12 12:15:54
    图像分割传统的图像分割方法1、基于阈值的图像分割单阈值分割局部阈值分割阈值的选取2、基于区域的图像分割区域生长区域分裂合并四叉树分解法3、基于边缘检测的图像分割结合特定工具的图像分割算法1、基于小波分析和...
  • 医学图像分割算法研究及应用 基于U-Net框架的医学图像分割若干关键问题研究 基于信息互补的多层次图像分割 基于多统计信息的形变模型医学图像分割 基于对抗学习的跨领域图像分割方法研究 基于显著性驱动...
  • 1 绪论1.1 图像分割的研究背景在一幅目标图像下,人们往往只是关注其中的一个或者几个目标,而这些目标必然会占据一定的区域,并且与周围其他目标或背景在一些特征上会有相应的差别。但是,很多时候这些差别会非常的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,407,357
精华内容 562,942
关键字:

分割