传统的机器视觉通常包括两个步骤——预处理和物体检测。 而两者之间的桥梁是:图像分割[1]。图像分割通过简化或更改图像的表示形式,使图像更易于分析。
例如,一家食品加工厂增加了一批新的肉鸡,并希望目视检查它们的美味程度。 机器对图像进行预处理和优化后,首先要将图像中的鸡与背景分开,并分别分析感兴趣区域,以做出快速准确的判断。
食品加工厂的视觉处理。
然而,对于愚蠢的AI来说,图像分割并不容易。 聪明的人类可以在下图中一目了然地看到他们能吃什么和不能吃什么。 但是计算机需要做很多工作才能将这些东西分开。
源语言。
图像分割结果。
分割图像的最简单方法是:二值化。二进制图像每个像素只有两个值:纯黑色或纯白色。
彩色图、灰度图和二值图的比较。
由于二进制图像数据非常简单,因此许多视觉算法都依赖于二进制图像。 二进制图像可以更好地分析物体的形状和轮廓。 二进制图像也经常用作原始图像口罩(又称口罩、口罩)。:这就像一张部分掏空的纸,遮住了我们不感兴趣的区域。 有几种方法可以进行二值化,其中最常见的是采用阈值二值化。
在计算机视觉中,矩阵通常用于表示图像。 换句话说,无论你的**看起来多么美味,它只不过是计算机的矩阵。
在此矩阵中,每个像素都是矩阵中的一个元素。 在三通道彩色图像中,此元素是三个数字的元组。
彩色三通道图像。
对于单通道灰度图像,此元素只是一个数字。 这个数字代表此时图像的亮度,数字越大,像素会越亮,在常见的八位单通道色彩空间中,0 表示全黑,255 表示全白。
单个通道的灰度图。
阈值法是指选择一个数字,大于该数字被视为全白,小于该数字被视为全黑。 这就像教室里的灯管开关,我们轻轻推动它,如果突然超过某个阈值,灯就会亮起。
根据阈值选择方法的不同,可分为全局阈值和局部阈值。
全局阈值。 global method
全局阈值是整个图像中每个像素的相同阈值。 我们可以在 Photoshop 的 Image-Adjustment-Threshold 中体验到这一点:
Photoshop 中的阈值。
当您从 1 移动到 255 时,您可以看到越来越多的图像区域变暗。 当阈值数在一定范围内时,红米肠的轮廓清晰可辨。
正确的二值化使红米肠的轮廓清晰可辨。
在生产线环境中,光线是已知的,并且通常将固定数字设置为全局阈值。 但在户外或机器人竞赛中,照明条件通常更为复杂*。
RoboMaster竞技场的璀璨灯光。
这张图用了夸张的手法,robomaster是一款非常正式的游戏,在游戏过程中对大家来说绝对不会那么难。
在奥利奥冰淇淋的相同情况下,相机在白天和晚上可能不会看到相同的图像,并且恒定阈值无法同时容纳两者。
不同的明暗图片。
对于漆黑的夜晚,我们需要一个较低的阈值,例如,设置一个阈值 50,这样可以清楚地将夜间的黑白颜色分开,但在白天它是白色的(左)。如果我们设置的阈值相对较高,比如说 172,它会在白天平滑分裂,但晚上会很黑(右)。 我们需要能够适应复杂环境的算法。
左阈值 = 50,右阈值 = 172
其实,经过一番分析,我们可以发现,这张图片的色差还是比较明显的,只有两种颜色。 因此,无论是白天还是黑夜,其颜色级别的直方图都应该是两个不同的峰值,代表黑暗和明亮区域。 只是级别直方图在白天整体向右移动,在晚上整体向左移动。
图像颜色级别的直方图。
如果选择两个峰值之间的波谷作为阈值,则可以轻松分离两种类型的像素。 然而,图像的直方图往往是不连续的,有很多尖峰和抖动,很难找到准确的极值点。
日本工程师大津信之(Nobuyuki Otsu)为这个槽找到了合适的数学表达式,并于2024年发表了[2]。 这种二值化方法称为:大津的方法。Otsu 的算法类似于一维 Fisher 判别分析的离散化模拟。 使用穷举方法求阈值数,并将像素切割为两类,使两类像素亮度的类内方差最小。 类内方差是指两种类型的像素的方差的加权和,其中权重是该类型的像素数与整个图像中像素数的比值。
也许你的图片中不会有两种不同的颜色,例如,这个冰淇淋有三个尖刺。
三色冰淇淋(取冰淇淋部分的直方图)。
在这种情况下,可以通过对 Otsu 算法的轻微扩展来完成。 Otsu算法的多级泛化成为Multi otsu 方法
本地阈值*本地方法
也称为自适应阈值
在游戏过程中,经常有聚光灯照射在特定区域,导致局部光和局部光的图片。
局部照明图像。
如果对局部接收光的全局图像进行阈值设置,可能会感到尴尬,“无论设置什么阈值参数,都无法满足整个图像的要求”。 例如,在上图中,当直接执行全局阈值时,当寿司的左上半部分完全露出时,右下半部分仍然是黑色的。
局部照明图像的全局阈值处理。
在这种情况下,我们需要使用本地阈值来处理它。 事实上,人眼也伴随着这一步操作。 当我们确定物体的颜色时,往往会受到物体周围颜色的影响,这就是为什么黑人的牙齿看起来更白的原因。
局部阈值法假设图像在相对接近的某个区域被照亮。 它使用滑动窗口扫描图像并采取滑动窗口中心点亮度滑动窗内的其他区域(称为邻域区域)。亮度进行比较。 如果中心点亮度更高附近亮度*,它会中心点标记为白色,否则标记为黑色。
本地阈值的滑动窗口。
这里提到了局部阈值的基本方法,对于实际使用中常见的其他局部阈值方法,请参考Chow-Kaneko自适应阈值方法[4]。
局部阈值被广泛使用,特别是对于黑白字母的处理。 许多用于光学字符识别 (OCR) 和 *** 扫描的算法都使用本地阈值操作。
例如,以下***是典型的局部光接收图像:
如果对此 ** 使用全局阈值(例如,下图使用 Otsu 算法进行分割),则在任何情况下都无法正确分割。
全局方法不处理局部照明的图像。
局部阈值方法可用于分割图像井。 从**中可以清楚地看出,局部阈值法对大面积清洁区域的细节很敏感,因此纸上还有很多我们原本不会注意到的斑点。
局部方法分割***
在实践中,我们需要根据自己的需要选择不同的二值化方法,没有一种方法是绝对完美的。
例如,在识别敌方机器人时,由于装甲片灯条是自发光物体,受环境光影响较小,为了提高程序运行效率,我们使用固定数字作为全局阈值:
基地自动反击。
在对能量机制的认知中,由于能量机制只有黑白两种,我们使用了Otsu算法及其各种变体:
高能陷阱每个区域的二进制图。
而当高空机器人读取基区时,采用局部阈值法:
空中机器人识别基地。
今天的内容只是图像分割的冰山一角,作为视觉领域最古老的问题之一,还有很多新的图像分割算法被提出。
除了基于阈值的图像分割方法外,常用的分割方法还可以是基于边缘的(如Yanowitz-Buckstein自适应阈值法[5])和区域(如区域增长算法[6]),在卫星图像处理、交通控制系统、工业生产监控、医学成像等领域发挥着巨大的作用。
脑组织的图像分割。
策展 |视觉对象组。
* |倡导小组。
有关本文中描述的阈值方法的 OpenCV 实现,请访问:
引用。 1] spirkovska, l. (1993). a summary of image segmentation techniques.
2] nobuyuki otsu (1979). a threshold selection method from gray-level histograms. ieee trans. sys., man., cyber.
3] ping-sung liao and tse-sheng chen and pau-choo chung (2001). a fast algorithm for multilevel thresholding. j. inf. sci. eng.
4] chow,c.k.; and kaneko, t.: boundary detection of radiographic images by a thresholding method. frontiers of pattern recognition, s. watanabe, ed.,academic press, new york, 1972, pp. 61-82.
5] yanowitz, s. d., bruckstein, a. m. (1988, november). a new method for image segmentation. in pattern recognition, 1988., 9th international conference on (pp. 270-275). ieee.
6] richardson h w. regional growth theory[m]. macmillan,1973.
end
免责声明:部分内容为网络,仅供读者学术交流之用,文章版权归原作者所有。 如果有任何错误,请联系我们删除它。