自动驾驶TPM技术杂谈 ———— 图像分割

2024-01-26 11:04

本文主要是介绍自动驾驶TPM技术杂谈 ———— 图像分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 介绍
  • 基于阈值的分割方法
    • 直方图双峰法(mode 法)
    • 自动阈值图像分割
      • 大津法(OTSU)
      • 均值法
    • 迭代阈值图像分割
  • 基于区域的分割方法
    • 区域生长
    • 区域分裂合并
  • 基于边缘检测的分割方法
    • Canny边缘检测器
    • Harris角点检测器
    • SIFT检测器
  • 基于深度模型的分割方法

介绍

 图像分割是计算机视觉的基础任务之一,在自动驾驶中有着重要的应用,然而至今未能完全解决。图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程,简单示意图如下。利用图像分割技术可以有效将前景和背景信息分离,并可以进一步分理处物体信息。现有的图像分割方法主要分以下几类:
   1. 基于阈值的分割方法
   2. 基于区域的分割方法
   3. 基于边缘检测的分割方法
   4. 基于深度模型的分割方法
在这里插入图片描述

基于阈值的分割方法

 基于阈值的分割方法基于阈值的分割方法简称阈值分割法。阈值分割法是一种传统的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。阈值分割法的基本原理是通过设定不同的特征阈值,把图像像素点分为具有不同灰度级的目标区域和背景区域的若干类。它特别适用于目标和背景占据不同灰度级范围的图。阈值分割法的关键是确定阈值。阈值确定后,将阈值与像素点的灰度值比较以及对各像素的分割并行地进行。常用的阈值选择方法有利用图像灰度直方图的峰谷法、最小误差法、基于过渡区法、利用像素点空间位置信息的变化阈值法、结合连通信息的阈值方法、最大相关性原则选择阈值和最大熵原则自动阈值法。

直方图双峰法(mode 法)

 Prewitt 等人于六十年代中期提出的直方图双峰法(也称 mode 法) 是典型的全局单阈值分割方法。该方法的基本思想是:假设图像中有明显的目标和背景,则其灰度直方图呈双峰分布,当灰度级直方图具有双峰特性时,选取两峰之间的谷对应的灰度级作为阈值。如果背景的灰度值在整个图像中可以合理地看作为恒定,而且所有物体与背景都具有几乎相同的对比度,那么,选择一个正确的、固定的全局阈值会有较好的效果。算法实现:找到第一个峰值和第二个峰值, 再找到第一和第二个峰值之间的谷值,谷值就是那个阀值了。图像使用阈值分割方法取得好的分割效果取决于如下关键因素:
   直方图波峰之间的间隔;
   图像的噪声情况;
   目标物体和背景的相对尺寸;
   图像光源的均匀性;
   图像反射的均匀性。
 该方法存在明显的缺点 —— 对图像的要求太高,很多图像的直方图并不满足双峰的分布。

自动阈值图像分割

 设置一个固定阈值对全局像素进行分割是不合理的,如果这张图片的光照角度不好,一边比较亮一边比较暗,但是我们想分割图里的细节,只用一个固定阈值的话很可能会出现下面的上部两张图片的效果。而自适应阈值分割则将图像分成很多个小块(region),对每个小块单独计算其阈值,然后用这个计算得到的阈值对该小块进行分割,这样的好处是,即使受到光照影响,某一块较暗或较亮,但是可以单独计算这一块的合理阈值来进行分割而不用使用全局的固定阈值,换句话说,亮的小块对应的阈值较大,暗的小块对应的阈值较小,从而可以达到很好的分割效果。下方图片中的下部两个图片则是经过自动阈值图像分割的结果。
在这里插入图片描述

大津法(OTSU)

 基于阈值的图像二值化方法的一个关键在于如何选定阈值,这可以视作为一个全局寻优问题。大津法是由日本学者大津展之于1979年提出的一种图像阈值分割方法。该方法将阈值划分视作是一个统计决策问题,其目的在于将像素分配给两组或多组的过程中使得引入的平均误差最小。大津法给出的方案是使得两组之间的类间方差最大时的阈值为最优阈值。所以大津法也叫最大类间方差法。
 它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
 大津法的优点在于计算简单快速,不受图像亮度和对比度的影响。其缺点在于对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,此时效果不好。
在这里插入图片描述

均值法

 思想很简单,就是把图像分成m*n块子图,求取每一块子图的灰度均值,这个均值就是阈值了。这种方法不比大津法好,因为均值法和大津法都是从图像整体来考虑阈值的,但是大津法找了一个类间方差最大值来求出最佳阈值的;这两种方法子图越多应该分割效果会好一点,但效率可能会变慢。

迭代阈值图像分割

 迭代法是基于逼近的思想,其思想的实现步骤如下:
   1. 求出图象的最大灰度值和最小灰度值,分别记为Zmax和Zmin,可得到初始阈值T0=(Zmax+Zmin)/2;
   2. 根据阈值Tk将图象分割为前景和背景,分别求出两者的平均灰度值Zo和Zb
   3. 求出新阈值Tk+1=(Zo+Zb)/2;
   4. 若Tk==Tk+1,则所得即为阈值;否则继续步骤2,迭代计算。
   5. 使用计算后的阈值进行阈值分割。
 思路里接下来,其实迭代法就是将固定阈值分割里手动给定阈值改为了迭代计算阈值,但是本质还是固定阈值变换。

基于区域的分割方法

 基于区域的分割方法其于区域的分割方法是以直接寻找区域为基础的分割技术,其有两种基本形式:一种是区域生长,从单个像素出发,逐步合并以形成所需要的分割区域;另一种是区域分裂合并,从全局出发,逐步切割至所需的分割区域。在实际应用中,通常是将区域生长算法和区域分裂合并算法结合使用。该类算法对某些复杂物体定义的复杂场景的分割或者对某些自然景物的分割等类似先验知识不足的图像分割,具有较好的效果。

区域生长

 区域生长的基本思想是将具有相似性质的像素集合起来构成区域。区域生长算法的主要三个步骤如下:
   (1)选择合适的生长点。
   (2)确定相似性准则即生长准则。
   (3)确定生长停止条件。
 一般来说, 在无像素或者区域满足加入生长区域的条件时, 区域生长就会停止。 具体是先对每个需要分割的区域找一个种子像素点作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上述过程,直到再没有满足条件的像素可被包括进来,这样一个区域就长成。
 区域生长的优点是计算简单,对于较均匀的连通目标有较好的分割效果。它的缺点是需要人为地选取种子,对噪声较敏感,可能会导致区域内有空洞。此外它是一种串行算法,当目标较大时分割速度较慢,因此在算法设计时应尽量提高运行效率。

区域分裂合并

 区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取。而区域分裂合并可以说是区域生长的逆过程。区域分裂合并是从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,得到前景目标,继而实现目标的提取。区域分裂合并的假设是对于一幅图像,前景区域是由一些相互连通的像素组成的,因此如果把一幅图像分裂到像素级,那么就可以判定该像素是否为前景像素。当所有像素点或者子区域完成判断之后,把前景区域或者像素合并就可以得到前景目标。

基于边缘检测的分割方法

 基于边缘检测的分割方法简称边缘检测方法,它试图通过检测包含不同区域的边缘来解决分割问题,它可以说是人们研究的最多的方法之一。图像中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续性的反映,体现了灰度、颜色、纹理等图像特性的突变。边缘上像素灰度值的变化往往比较剧烈,这是边缘检测方法得以实现的主要假设之一。边缘检濒法一般利用图像一阶导数的极大值或二阶导数的过零点信息来提供判断边缘点的基本花据。常用的一阶导数算子有 Robert 算子、 Prewitt 算子和 Sobel 算子,二阶导数算子有拉善拉斯算子。
 虽然边缘检测的优点是边缘定位准确、运算速度快,但它有两大难点限制了其在图像分割中的应用:一是单纯的边缘检测不能保证边缘的连续性和封闭性;二是边缘检测方法在高细节区存在大量的碎边缘,难以形成一个大区域,但是又不宜将高细节区分为小碎片。由于上述两个难点,因此无论采用什么方法,单独的边缘检测只能产生边缘点,而不是完整意义上的图像分割过程。边缘点信息需要后续处理或与其他相关算法相结合,才能完成分割任务。边缘角点和兴趣点的检测器有:

Canny边缘检测器

 为了使用Cannny边缘检测器,我们需要首先将图像P模糊化,然后与一对正交微分滤波器做卷积生成分别包含了水平和垂直方向上的导数图像H和V。对像素而言,可以使用下式对梯度方向的θij和幅度aij进行计算:
在这里插入图片描述
 如果幅度超过一个临界值,一种简单的方法是为了每个位置(i,j)分配一条边缘。但这个方法使用效果不好,幅度映射可以在边缘处具有较大数值,但在相邻位置也可能存在较大数值。Canny检测器可以使用一种称为非极大抑制的方法对这些不需要的响应进行删除。
在这里插入图片描述
   a)—— 原始图像
   b)—— 垂直Prewitt滤波结果
   c)—— 水平Prewitt滤波结果
   d)—— 量化方向映射图
   e)—— 梯度幅值映射图
   f)—— 非极大值抑制后的幅值
   g)—— 两种等级的阈值化处理:白色像素大于较大的阈值,灰色像素大于较小的阈值但小于较大的阈值
   h)—— 滞后阈值处理后的最终边缘映射图包含了g)中所有白色像素和那些与其相连接的灰色像素
 在非极大值抑制中,梯度方向被量化为四种角度(0°,45°,90°,135°)中的一种,而180的角度被认为是平衡的。与每个角度相关的像素被分别处理。对每个像素而言,如果垂直于梯度的相邻两个像素中的任何一个有较大数值,幅度即被设置为0。例如,与一个梯度方向垂直的像素(该图像沿着水平方向进行变化),其左右像素可以被估计,并且如果这些像素中的任何一个比当前数值大,则将幅度设置为0。用这种方式,边缘幅值分布极大值处的梯度可以保留,而那些远离极大值的梯度将被抑制。

Harris角点检测器

 Harris角点检测器是对每个点周围的水平方向和垂直方向的局部梯度进行考虑。目的在于找到图像中亮度在两个方向上均发生变化的点,而非一个方向(一条边缘)或零个方向(平坦区域)。Harris角点检测器是基于对图像结构张量的决策。
在这里插入图片描述
 其中Sij是位置(i,j)上的图像结构张量,可以通过在当前位置的(2D+1)X(2D+1)区域内计算获得。hmn表示在位置(m,n)上的水平微分滤波响应,vmn表示在位置(m,n)上的垂直微分滤波响应,而wmn是一个权值,用来减少那些远离中心像素(i,j)位置的贡献。
在这里插入图片描述
   a)——具有检测角点的图像。角点检测算法基于图像结构张量,该张量可以捕捉点周围的梯度分布信息。
   b)—— 在平缓区域,图像结构张量的两个奇异值均较小。
   c)—— 在边缘上,图像结构张量的其中一个奇异值较小,一个较大。
   d)—— 在角点上,图像结构张量的两个奇异值均较大,表明图像在两个方向上均变化的很快。
 要判断一个角点是否存在,Harris角点检测器考虑了图像结构张量中的奇异值λ1和λ2。如果两个奇异值均较小,则该位置附近的区域较为平滑,因此不能选择该位置。如果一个奇异值较大而另一个较小,那么图像将在一个方向而非两个方向上变化,该像素位于或靠近一条边缘。如果两个奇异值均较大,那么这幅图像将在该区域两个方向上剧烈变化,可被视为角点。

SIFT检测器

 尺度不变特征转换(Scale Invariant Feature Transform, SIFT)检测器是用来识别兴趣点的第二种方法。不同于Harris角点检测器,SIFT将尺度和方向与结果中的兴趣点相关联,为了找到兴趣点,交替使用了多种算子。使用一些列K个递增粗尺度的高斯核差分对亮度图像进行滤波。而后滤波图像被堆叠起来生成一个尺寸为I×J×K的三维数组,其中I和J分别是图像的垂直和水平尺寸。使用该数组可以得到极值:这些是位置点信息,其中26个三维像素领域(来源于1个3×3×3的块)或者都比当前数值大,或者都比当前数值小。
在这里插入图片描述   a)—— 原始图像
   b∼h)—— 分别采用尺度递增的DoG核对图像进行滤波
   i)—— 将结果图像堆积成一个三维组。在滤波后图像数组中的局部极值点被看作兴趣点的候选集。
 这些极值可以通过使用一种局部二次逼近并返回顶点与谷点位置的方式来被定位于亚像素级精度。通过对当前点的泰勒展开式进行二次逼近,这就提供了一种亚像素级位置估计和比尺度采样分辨率更精确的尺度估计。最后,在每个点的尺度和方向上计算图像结构张量Sij(Harris角点检测器中的算式)。平滑区域内和边缘上的候选点可以按照Harris角点检测器的准则利用Sij进行去除。

基于深度模型的分割方法

 随着神经网络以及深度学习的发展,在图像分割中也提出了很多效果良好的深度模型。因笔者的能力有限,暂时无法展开。后续深入学习之后在进行展开。

这篇关于自动驾驶TPM技术杂谈 ———— 图像分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/646591

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复