
传统的机器视觉通常包括两个步骤:3354预处理和目标检测。它们之间的桥梁是图像分割[1]。图像分割通过简化或改变图像的表示使图像更容易分析。
比如食品加工厂新引进了一批肉鸡,想目测一下它们的美味程度。机器对图像进行预处理和优化后,需要将图像中的鸡从背景中分离出来,单独分析感兴趣的区域,从而做出快速准确的判断。
食品加工厂的视觉处理
然而,图像分割对于愚蠢的AI来说并不容易。聪明人一眼就能看出什么可以,什么可以下图不被吃掉。但是要让计算机把这些东西分开需要很大的努力。
原图
图像分割结果
最简单的图像分割方法是二值化。二值图像的每个像素只有两个值:要么纯黑,要么纯白。
彩色图像、灰度图像和二值图像的比较
由于二值图像数据非常简单,许多视觉算法都依赖于二值图像。通过二值图像,我们可以更好地分析物体的形状和轮廓。二值图像也常用作原图像的蒙版(也叫mask,Mask):它就像一张被部分挖空的纸,把我们不感兴趣的区域遮住了。二值化的方法有很多种,其中最常用的方法是阈值法。
在计算机视觉中,图像一般用矩阵来表示。也就是说,你的图看起来再好吃,对电脑来说也只是一个矩阵。
在这个矩阵中,每个像素是矩阵中的一个元素。在三通道彩色图像中,该元素是一个由三个数字组成的元组。
三通道彩色图像
对于单通道灰度图像,此元素是一个数字。这个数字代表此时图像的亮度。数字越大,像素点越亮。在常见的八位单通道颜色空间中,0代表全黑,255代表全白。
单通道灰度图像
阈值法是指选择一个数字。比它大的就全白,比它小的就全黑。就像教室里的电灯开关,我们轻轻一推。如果它突然超过某个阈值,灯就会亮。
根据阈值选取方式的不同,可以分为全局阈值和局部阈值。
全局阈值
全局方法
全局阈值是指为整个图像中的每个像素选择相同的阈值。我们可以在Photoshop s图像调整阈值:
Photoshop中的阈值
可以看出,在将阈值色标从1移动到255的过程中,图像中越来越多的区域变成黑色。当阈值在一定范围内时,红米香肠的轮廓清晰可辨。
正确的二值化使红米香肠轮廓清晰。
在生产线环境中,照度是已知的,并且通常设置一个固定的数字作为全局阈值。但在户外或机器人比赛中,光照条件往往更复杂*。
RoboMaster体育场华丽的灯光
*这张图有些夸张。RoboMaster是一个非常正规的比赛,在比赛过程中绝对不会给大家造成这么大的困难。
它这是同样的奥利奥冰淇淋。在白天和晚上,摄像机看到的图像可能是不同的,恒定阈值可以两种情况都不适应。
光明和黑暗的不同画面
对于漆黑的夜晚,我们需要一个更低的阈值,比如将阈值设置为50,可以在晚上清晰的分出黑白,但是白天是白色的(左边);如果我们把阈值设置得高一点,比如说172,白天可以很平滑地分割出来,但是晚上就黑了(右)。我们需要能够适应复杂环境的算法。
左阈值=50,右阈值=172
其实稍微分析一下就能发现,这张图的色差很明显,只有两种颜色:亮和暗。所以无论在白天还是夜晚,它的颜色直方图都应该是两个明显的峰值,分别代表暗区和亮区。它只是色阶直方图在白天向右移动,在晚上向左移动。
图像的颜色直方图
如果选择两个波峰之间的波谷作为阈值,则两种类型的像素可以容易地分开。然而,图像的直方图往往是不连续的,有许多峰值和抖动,因此很难找到准确的极值点。
日本工程师Otsu Zhanzhi为这种波谷找到了合适的数学表达式,并于1979年发表[2]。这种二值化方法被称为Otsu 的方法。Otsu算法类似于一维Fisher判别分析的离散模拟。通过穷举法找到一个阈值数,将这些像素分为两类,使得这两类像素的亮度的类内方差最小。类内方差是指两类像素的方差的加权和,其中权重是指这类像素的个数与整幅图像中像素个数的比值。
也许你的照片赢了不要只有两种不同的颜色。比如这个冰淇淋有三个波峰。
三色冰淇淋(取冰淇淋部分的直方图)
这时候只需要稍微扩展Otsu算法就可以完成。Otsu算法的多级扩展称为MultiOtsu法[3]。
本地阈值*
本地方法
*也称为自适应阈值,自适应阈值
在比赛中,经常会有一个聚光灯照在特定的区域,造成一个部分亮,部分不亮的画面。
局部照明图像
当全局阈值被应用于局部照明的图像时,可能会出现尴尬的情况无论设置什么阈值参数,它们都可以不符合整体形象的要求。例如,在上面的图像中,当直接应用全局阈值时,当左上半部分的所有寿司都暴露时,右下半部分仍然是黑色的。
局部受光图像的全局阈值处理
这时候我们就用局部阈值来处理。事实上,人们的眼睛也随着这一步操作而来。当我们判断一个物体的颜色时,往往会受到物体周围颜色的影响,这也是黑牙看起来更白的原因。
局部阈值法假设图像在某个区域的光照比较近。它用滑动窗口扫描图像,将滑动窗口中心的亮度与滑动窗口中其他区域(称为邻域)的亮度进行比较。如果中心亮度高于邻域亮度*,则将中心点标记为白色,否则标记为黑色。
局部阈值滑动窗口
*这里提到了局部阈值处理的基本方法。对于实践中常用的其他局部阈值化方法,请参考Chow-Kaneko自适应阈值化方法[4]。
局部阈值应用广泛,尤其是在黑白领域。光学字符识别(OCR)和QR码扫描的许多算法使用局部阈值操作。
例如,以下二维码是典型的本地受光图像:
扫描部分发光的二维码。
如果将全局阈值应用于此图像(例如,使用Otsu算法来分割下图中的图像),它可以无论如何都不能正确分割。
全局方法可以不处理局部受光图像。
局部阈值法可以很好地分割图像。从图中可以清楚地观察到,局部阈值法对大面积洁净区域的细节比较敏感,所以纸上多了很多我们本来不可能注意到的斑点。
方法部分分割QR码
在实际操作中,要根据自己的需要选择不同的二值化方法,没有一种方法是绝对完美的。
比如识别敌方机器人时,由于装甲光条是自发光物体,受环境光影响较小。为了提高程序的运行效率,我们采用一个固定的数字作为全局阈值:
基地自动反击
在能量器官的识别中,由于能量器官只有黑白两种,我们采用了Otsu算法及其变体:
大能量器官各区域的二元图
当空中机器人读取基地区域的二维码时,它使用局部阈值方法:
空中机器人识别基地
我们今天说的只是图像分割的冰山一角。作为视觉领域中最古老的问题之一,许多新的图像分割算法被提出。
除了基于阈值的图像分割方法,常见的分割方法还可以基于边缘(如Yanowitz-Bruckstein自适应阈值法[5])、区域(如区域生长算法[6])等。它们在卫星图像处理、交通控制系统、工业生产监控、医学成像等领域发挥着重要作用。
脑组织图像分割









