图像二值化的几种方法
计算机最早用于计算数据,破译密码、统计人口信息等。
数据进到计算机当中需要变成计算机能理解的形式:
-
数据可以通过进制转换传入:十进制转二进制。
-
文本可以通过编码+码表(多种码表)的方式传入并识别。
-
图片可以通过文件头+内容的方式来识别。
图片有多种,常见的有: 二值图:仅纯黑与纯白 每个像素点1位,仅能表示0/1 灰度图: 将黑-白分成 0-255 来表示黑白的中间态 每个像素点8位,能表示0-255 彩色图: 三个通道,表示红绿蓝,三个通道混合出255255255种颜色 每个像素点24位
位 : 我们常说的保留2位小数,表示保留2个数字. 因此8位的二进制,就是8个二进制数据
它最多可以表示:2的0次方+2的1次方+.....2的7次方.(简化为:2的8次方-1) = 256-1 = 255
我们机器学习会占用大量的资源:存储需要硬盘,运算需要内存.
因此需要以尽可能少的数据来分析,这个步骤可以称之为:抽象或者简化,更专业的术语叫:特征提取.
我们搜索毕加索的名画 《公牛》 和它的草稿.
可以看到,毕加索很好的对牛进行了特征提取,他用更少的线条,表达了公牛这个主题.
另外我们也能发现,特征提取不是一个过程,而是一组过程.
注意:特征提取往往是一个不可逆的过程,确保你提取的是你要的特征,舍弃的是你不需要的特征.
我们这次项目的整体目标是:实现一个简单的图像识别功能.当然这样说你可能还是不太理解
你可以把它具象化为:手写数字识别 也可以具象化为 猫狗分类 鸢尾花分类 等等
第一步是把图像的特征提取出来,这章节我们完成特征提取的上半部分:数据简化
在图片的各自各中,我们显而易见二值图是最小的.我们尝试把一张彩色图片变成一张灰度图,再变成一张二值图.
原理
人为设置阈值法
在这种方法中,我们人为设定一个阈值,比如 取 255 的中间值 127。 大于这个值则取1,小于等于这个值则取0
在 Python 中,这种除法运算后向下取整的操作可以表示为 255 // 2,也等价于 int(255/2)。
存在的问题:
这种方法的主要问题在于,它并不能适应所有类型的图像。
例如,对于一张整体偏暗的照片,大部分像素值可能都会低于 127,因此二值化后的图像几乎全黑。
同样,对于一张整体偏亮的照片,大部分像素值可能都会高于 127,因此二值化后的图像几乎全白。
优化方法:平均值法
为了解决上述问题,我们可以使用一种被称为"平均值法"的优化方法。在这种方法中,我们不再使用固定的阈值,而是计算图像本身的平均像素值,并用这个值作为阈值。
优点:
这种方法可以更好地适应不同亮度的图像,因为它根据图像的实际像素值分布来确定阈值,而不是简单地使用固定的阈值。
对于那些整体偏暗或偏亮的图像,使用平均值法可以得到更好的二值化效果。
注意:
尽管平均值法在许多情况下都能得到不错的结果,但它仍然不能解决所有问题。例如,对于那些既有很亮的区域又有很暗的区域的图像,平均值法可能无法得到理想的二值化效果。在这种情况下,可能需要使用更复杂的方法,如自适应阈值法或 Otsu's 方法等。