图像阈值化分割是一种传统的、最常用的图像分割方法,因其实现简单、计算量小、性能较稳定,成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像,在很多情况下是进行图像分析、特征提取与模式识别之前必要的图像预处理过程。
图像阈值化的目的是要按照灰度级对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
阈值分割的基本原理是通过设定不同的特征阈值把图像像素点分为若干类。常用的特征包括直接来自原始图像的灰度或彩色特征、由原始灰度或彩色值变换得到的特征。
(本段内容摘抄自@小幽余生不加糖)
对彩色图像分割,最简单的就是将RGB空间转换到HSV空间进行处理。
HSV空间分为色调(Hue)、饱和度(Saturation)和亮度V(Value)
- 饱和度值越高,颜色就越鲜艳,越低则越接近灰色。
当想筛选出某种颜色时,通过查表可进行初步的范围框定
cv2.inRange()---指定特定颜色的上下限,得到mask。再根据mask进行位与运算即可得到分割后的所需颜色对应图像块。
GrabCut:该算法基于图像分割中的能量最小化原理,通过迭代地优化一个能量函数来实现图像的前景和背景分割。
步骤:
- 初始化: 用户首先手动标记图像中的前景和背景区域。这些标记将用作算法的输入,以指导GrabCut进行迭代优化。
- 高斯混合模型初始化: 根据用户标记的前景和背景区域,估计图像中每个像素属于前景或背景的概率,并使用高斯混合模型来建模。
- 迭代优化: 迭代地更新前景和背景的高斯混合模型,并根据当前模型重新分配像素的标签(前景或背景)。这个过程通过最小化一个能量函数来实现,该能量函数包括数据项和平滑项,以促进分割结果的平滑和准确。
- 收敛检测: 当达到一定的迭代次数或能量函数收敛到局部最小值时,停止迭代优化。
- 输出分割结果: 根据最终的前景和背景概率,将像素分为前景和背景,得到最终的图像分割结果。
确实把中心区域又缩小了一定的范围,就是对子图还需要进行框选会显得有点麻烦(也可以事先设定bbox的范围)
FloodFill漫水填充算法,用于填充连接到种子点的区域。在分割中,它经常用于将相似区域连接起来,形成一个更大的区域。漫水填充算法从种子点开始,在相似的颜色或灰度范围内填充相邻的像素,直到达到边界为止。这样,它可以将相邻的区域连接在一起,形成一个连续的分割结果。
漫水填充算法通常包括以下步骤:
- 选择种子点: 用户选择一个种子点,作为填充的起始点。
- 设置填充条件: 确定填充的条件,例如填充的颜色范围、填充的像素相似度等。
- 填充相邻区域: 从种子点开始,将相邻的像素填充为指定的颜色,直到不满足填充条件为止。
- 重复步骤3: 如果存在多个种子点,则重复步骤3,直到所有的种子点都被处理。
分水岭算法(Watershed Algorithm): 分水岭算法是一种基于拓扑结构的图像分割算法。它将图像看作地形表面,其中灰度值表示高度,然后通过模拟水从山顶流下的过程来确定图像中的分割线。分水岭算法通常用于分割具有多个相互重叠目标的图像。
基于聚类的方法(Clustering-based Methods): 这类方法将图像像素分组到具有相似特征的类别中。聚类算法,如K均值聚类、高斯混合模型等,经常被用于图像分割。这些算法通过将像素聚集成不同的类别来实现图像的分割。
在实际运用中可以考虑使用不同的相似性度量以进行聚类。如灰度共生矩阵(利用纹理特征),局部二值模式LBP等。
均值漂移算法(Meanshift):基于密度估计的非参数聚类算法,常用于图像分割和目标跟踪。它的基本思想是通过在数据空间中移动一个窗口,并计算窗口内数据点的平均值,然后将窗口中心移动到平均值处,不断迭代直到收敛为止。
主要步骤:
- 初始化窗口中心点: 首先,在数据空间中选择一个初始的窗口中心点。
- 计算窗口内数据点的平均值: 将窗口中心点作为中心,计算窗口内数据点的平均值,通常使用核函数来对每个数据点赋予权重,以便更好地反映局部密度。
- 将窗口中心点移动到平均值处: 将窗口中心点移动到计算得到的平均值处。
- 重复步骤2和步骤3: 不断迭代以上步骤,直到满足收敛条件为止。通常的收敛条件是窗口中心点不再移动或者移动的距离小于某个阈值。
cv2.pyrMeanShiftFiltering(src,sp,sr)----
- sp: 空间窗口的半径。它决定了在均值漂移过程中考虑的空间邻域的大小。较大的值会导致更广泛的平滑效果。一般情况下,如果值太小,可能会导致图像分割不准确;如果值太大,可能会导致过度模糊。
- sr: 颜色窗口的半径。它决定了在均值漂移过程中考虑的颜色邻域的大小。与空间窗口不同,这里考虑的是颜色空间的邻域范围。较大的值会导致更广泛的平滑效果,但可能会导致颜色信息的丢失。
多种尺度下进行对比,再选取较为合适的参数进行后续的处理。