彩色转灰度的核心逻辑:三种经典方法及原理对比

灰度实验

将彩色图像转换为灰度图像的过程称为灰度化,这种做法在图像处理和计算机视觉领域非常常见。

灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转成灰度图的过程本质上就是将R、G、B三通道合并成一个通道的过程。本实验中一共介绍了三种合并方法,分别是最大值法、平均值法以及加权均值法。

1.灰度图

每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度。

2.最大值法

对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作为灰度图像中对应位置的像素值。

例如某图像中某像素点的像素值如上图所示,那么在使用最大值法进行灰度化时,就会从该像素点对应的RGB通道中选取最大的像素值作为灰度值,所以在灰度图中的对应位置上,该像素点的像素值就是121。

示例:

python 复制代码
import cv2 as cv
import numpy as np

# 读取图像
pig = cv.imread('../images/pig.png')
shape = pig.shape # (h, w, c)
img = np.zeros((shape[0], shape[1]), dtype='uint8')
# 循环遍历每一行img[0,0,0]
for i in range(shape[0]):   # [0,0][0,1][0,2][1,0]
    for j in range(shape[1]):
        img[i, j] = max(pig[i, j, 0], pig[i, j, 1], pig[i, j, 2])

cv.imshow('最大值', img)
cv.waitKey(0)
cv.destroyAllWindows()

结果如图:

3.平均值法

对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以三,得到的平均值就是灰度图像中对应位置的像素值。

例如某图像中某像素点的像素值如上图所示,那么在使用平均值进行灰度化时,其计算结果就是(91+121+46)/3=86(对结果进行取整),所以在灰度图中的对应位置上,该像素点的像素值就是86。

示例:

python 复制代码
import cv2 as cv
import numpy as np

# 读取图像
pig = cv.imread('../images/pig.png')
shape = pig.shape # (h, w, c)
img = np.zeros((shape[0], shape[1]), dtype='uint8')
# 循环遍历每一行img[0,0,0]
for i in range(shape[0]):   # [0,0][0,1][0,2][1,0]
    for j in range(shape[1]):
        # int():转化为更大数据类型,防止溢出
        img[i, j] = (int(pig[i, j, 0]) + int(pig[i, j, 1]) + int(pig[i, j, 2])) // 3

cv.imshow('平均值', img)
cv.waitKey(0)
cv.destroyAllWindows()

结果如下:

4.加权平均值法

对于彩色图像的每个像素,它会按照一定的权重去乘以每个通道的像素值,并将其相加,得到最后的值就是灰度图像中对应位置的像素值。本实验中,权重的比例为: R乘以0.299,G乘以0.587,B乘以0.114,这是经过大量实验得到的一个权重比例,也是一个比较常用的权重比例。

所使用的权重之和应该等于1。这是为了确保生成的灰度图像素值保持在合理的亮度范围内,并且不会因为权重的比例不当导致整体过亮或过暗。

例如某图像中某像素点的像素值如上图所示,那么在使用加权平均值进行灰度化时,其计算结果就是10*0.299+121*0.587+46*0.114=79。所以在灰度图中的对应位置上,该像素点的像素值就是79。

示例

5.两个极端的灰度值

在灰度图像中,"极端"的灰度值指的是亮度的两个极端:最暗和最亮的值。

  • 最暗的灰度值:0。这代表完全黑色,在灰度图像中没有任何亮度。

  • 最亮的灰度值:255。这代表完全白色,在灰度图像中具有最大亮度。

总结

灰度图作为单通道图像,通过将彩色图的 R、G、B 三通道信息合并为单一通道实现,其像素值范围通常为 0-255(8 位存储),包含从黑到白的多级灰度,区别于仅含黑白两色的黑白图像。

三种灰度化方法各有特点:

  • 最大值法:取每个像素 R、G、B 三通道中的最大值作为灰度值,操作简单但可能导致图像偏亮;
  • 平均值法:计算三通道值的算术平均值作为灰度值,能均衡保留亮度信息,但未考虑人眼对不同颜色的敏感度差异;
  • 加权均值法:按 R=0.299、G=0.587、B=0.114 的权重计算加权和(权重和为 1),因贴合人眼对绿色更敏感、对蓝色较迟钝的特性,是应用最广泛的方法,能生成更符合视觉感知的灰度图。

此外,文中还提及灰度图的两个极端值 ------0(最暗黑色)和 255(最亮白色),它们是灰度范围的边界,决定了图像的明暗对比上限。

通过本文的实验与解析,可清晰理解不同灰度化方法的原理及适用场景,为后续图像处理(如特征提取、边缘检测)奠定基础。

相关推荐
应用市场几秒前
OpenCV深度学习:目标检测、人脸识别与智能视频分
深度学习·opencv·目标检测
CodeJourney.6 分钟前
AI产业技术突破、生态重构与场景深耕
人工智能·重构
产业家16 分钟前
Sora 后思考:从 AI 工具到 AI 平台,产业 AGI 又近了一步
人工智能·chatgpt·agi
量化交易曾小健(金融号)21 分钟前
人大计算金融课程名称:《机器学习》(题库)/《大数据与机器学习》(非题库) 姜昊教授
人工智能
一晌小贪欢24 分钟前
Python爬虫第7课:多线程与异步爬虫技术
开发语言·爬虫·python·网络爬虫·python爬虫·python3
IT_陈寒28 分钟前
Redis 性能翻倍的 5 个隐藏技巧,99% 的开发者都不知道第3点!
前端·人工智能·后端
W_chuanqi31 分钟前
RDEx:一种效果驱动的混合单目标优化器,自适应选择与融合多种算子与策略
人工智能·算法·机器学习·性能优化
好奇龙猫32 分钟前
[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第四篇:代码修复]
人工智能·学习
Pocker_Spades_A41 分钟前
AI搜索自由:Perplexica+cpolar构建你的私人知识引擎
人工智能
~kiss~42 分钟前
图像的脉冲噪声和中值滤波
图像处理·人工智能·计算机视觉