相关概念
「二值图像」(Binary Image)是一种只包含两种颜色(通常是黑色和白色)的图像。在二值图像中,每个像素要么是0(表示黑色),要么是255(表示白色),没有中间灰度级别。
二值图像主要用于简化图像处理和分析过程,因为它只包含两种颜色,使得图像处理算法更加简单、快速。例如,在文字识别、条形码读取等应用中,二值图像可以大大简化图像处理和识别的过程。
二值图像可以通过多种方法生成,包括阈值分割、迭代阈值分割、Otsu阈值法等。这些方法通常将原始图像中的像素值与某个阈值进行比较,根据比较结果将像素设置为黑色或白色。
二值图像的生成通常用于计算机视觉和图像处理领域,以简化图像处理和分析的过程。
「灰度图像」(Grayscale Image)是每个像素只有一个采样颜色的图像,通常显示为从最暗的黑色到最亮的白色的灰度。灰度图像与二值图像不同,在计算机图像领域中,二值图像只有黑色与白色两种颜色,而灰度图像在黑色与白色之间还有许多级的颜色深度。
灰度图像通常是测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度。
灰度图像在图像处理中常用于简化图像处理和分析过程,因为它只包含一种颜色通道,使得算法更加简单和快速。
「彩色图像」(Color Image)彩色图像是一种能够显示颜色信息的图像,通常由红、绿、蓝三个颜色通道组合而成。每个通道的颜色强度范围从0到255,其中0表示该颜色完全缺失,255表示该颜色完全饱和。通过组合不同强度的三个通道,可以得到几乎所有的颜色。
彩色图像是数字图像处理和计算机视觉领域中的常见形式,广泛应用于摄影、视频、动画和网页设计等领域。在数字图像处理中,彩色图像的处理和分析通常比灰度图像更加复杂,因为需要同时处理三个颜色通道。
彩色图像的优点是可以显示颜色信息,更加真实地反映现实世界。然而,由于需要更多的存储空间和处理时间,彩色图像的处理速度通常比灰度图像慢。
「图像灰度化」(Image Grayscale) 是将彩色图像转换为灰度图像的过程。在灰度图像中,每个像素只包含一个灰度值,而不是彩色图像中的红、绿和蓝三个通道。灰度图像通常用于简化图像处理和分析,因为它们只包含亮度信息,而没有颜色信息。
灰度化的好处是相较于彩色图像灰度图像占内存更小,运行速度更快;灰度图像后可以在视觉上增加对比,突出目标区域。灰度化的应用包括图像处理、计算机视觉、模式识别等领域。
灰度图像是二值图像的一种特例,二值图像通过比较阈值将像素设置为黑色或白色。灰度化处理有三种常用方法:最大值法、平均值法和加权平均法。最大值法是直接取R、B、G三个分量中数值最大的分量的数值(0视为最小,255视为最大);平均值法是取R、B、G三个分量中数值的均值;加权平均法则是根据人眼对不同颜色的敏感度不同,给不同的颜色通道赋予不同的权重。
「图像二值化」(Image Binarization)是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。二值化图像中数据量大为减少,从而能凸显出目标的轮廓。要得到二值化图像,首先要把图像灰度化,然后将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。
比较常用的二值化方法有:简单二值法,平均值法,双峰法和OTSU法等。
二值化是图像分割的一种最简单的方法,广泛应用于计算机视觉领域。
灰度化方法
- 最大值法:将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
图片
- 平均值法:将彩色图像中的三分量亮度求平均得到一个灰度值。
图片
- 加权平均法:根据人眼对R,G,B三通道的敏感度,按照一定权值进行加权平均得到灰度值。
图片
- 浮点灰度法:将红、绿、蓝三个颜色通道乘以不同的浮点数权重,其中 RGB 的权重总和为 1,得到一个灰度值。
图片
- 整数灰度法:避免浮点数运算使用整数算法,其中 RGB 的权重总和为 100,得到一个灰度值。
图片
- 移位灰度法:移位计算比整数灰度法处理速度更快。
图片
- 单通道法:仅取绿色作为灰度值。
图片
灰度方法示例:
//进行灰度
mBitmap?.run {
val bitmap = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)
val srcMat = Mat()
val dstMat = Mat()
Utils.bitmapToMat(this, srcMat)
Imgproc.cvtColor(srcMat, dstMat, Imgproc.COLOR_BGRA2GRAY)
Utils.matToBitmap(dstMat, bitmap)
runOnUiThread { mBinding.ivImage.setImageBitmap(bitmap) }
srcMat.release()
dstMat.release()
}
分享说明:转发分享请注明出处。