目录
- 图像处理学习笔记(一)
- 一、基础知识
- 1、彩色图像
- (1)RGB
- (2)HSV
- (3)HSI
- (4)CMYK
- (5)YUV
- (6)YCbCr
- 2、灰度图像
- 3、二值图像
- 二、图像灰度化
- 1、最大值
- 2、平均值
- 3、加权平均值
- 4、直接调用灰度处理的方法
图像处理学习笔记(一)
一、基础知识
1、彩色图像
(1)RGB
RGB色彩模式是工业界的一种颜色标准,通过对红R、绿G、蓝B三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
图像中每个像素都分成R、G、B三个基色分量,每个颜色分量都有对应灰度值[0,255],每个颜色分量可以用8位表示(还有10位表示的),若位深为8则RGB图像能构造出2的24次方种色彩,即24位色。RGB包含RGB555、RGB565、RGB24、RGB32等格式。图片大小(bit)=宽像素×高像素×位深×3。
注:文中图片源于网络。
(2)HSV
HSV是根据颜色的直观特性创建的一种颜色空间,也称六角锥体模型。H色相表示色彩信息,取值为0-360°,如按红色逆时针计算,红色0°、绿色120°、蓝色240°;S饱和度,取值为0.0-1.0;V色明度,取值为0.0(黑色)-1.0(白色),V=max(R,G,B)。
(3)HSI
HSI颜色模型同样是从人的视觉系统出发。H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度,I=(R+G+B)/3。
注:饱和度是一种描述颜色纯净度的属性,单一颜色光的饱和度最高,掺入白光越多饱和度越低。饱和度=单色光强度/(单色光强度+白光强度)。
(4)CMYK
CMYK颜色模型是一种应用相减原理的色彩系统,它的颜色来源于反射光线。当所有的颜色叠加在一起时会产生黑色,当没有任何颜色加入的时候为白色。CMYK颜色模型包括青(cyan)、品红(magenta)、黄(yellow)和黑(black),为避免与blue混淆,黑色用K表示。彩色打印机和彩色印刷都是采用这个原理。CMY是色料三原色,利用油墨对光的吸收、透射和反射,产生不同的颜色。
(5)YUV
YUV是一种颜色编码方法,常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。Y表示明亮度,也就是灰阶值,U和V表示的色度,描述影像色彩及饱和度,用于指定像素的颜色。与RGB模型相比,YUV模型最大的优点在于信号传输时只需占用极少的频宽。当白光的亮度用Y来表示时,它和红、绿、蓝三色光的关系可用下式描述:Y=0. 299R+0. 587G+0. 114B,这就是常用的亮度公式。
(6)YCbCr
YCbCr是在世界数字组织视频标准研制过程中作为ITU - R BT.601 建议的一部分,其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致,Cb、Cr 同样都指色彩,只是在表示方法上和U、V不同。在YUV家族中,YCbCr是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。Y指亮度分量,Cb指蓝色色度分量,Cr指红色色度分量。
注:还有其他彩色图像模型,如YIQ、Lab等,此处不做概述。
2、灰度图像
灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值)。灰度范围为0-255,当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。灰度化的好处是:相较于彩色图像灰度图像占内存更小,运行速度更快;灰度图像后可以在视觉上增加对比,突出目标区域。
3、二值图像
二值图像就是将像素点的灰度值设置为0或255,整个图像呈现出明显的只有黑和白的视觉效果。可以用来描述字符图像,其优点是占用空间少,缺点是当表示人物、风景图像时,二值图像只能展示其边缘信息,图像内部的纹理特征表现不明显。一般应用在车牌识别、图像的字符提取等。
二、图像灰度化
Python将彩色图像转换为灰度图像有多种方式,如使用用Pillow库函数、OpenCV库函数、matplotlib等,大致有下述三种方法:取最大值、平均值、加权平均值。
1、最大值
取R、G、B三个分量中最大的分量值,R=G=B=max(R,G,B)。
import cv2
import numpy as np
from matplotlib import pyplot as plt
def Max_Gray(img_path):
img = cv2.imread(img_path)
# 获取图像尺寸
h, w = img.shape[0:2]
# 自定义空白单通道图像存放灰度图
gray = np.zeros((h, w), dtype=img.dtype)
# 对原图像进行遍历,然后灰度化
for i in range(h):
for j in range(w):
# 求最大值作为灰度值
gray[i, j] = max(img[i, j, 0], img[i, j, 1], img[i, j, 2])
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
plt.imshow(gray)
plt.title('Max_Gray')
plt.show()
img_path = r'B10.bmp'
Max_Gray(img_path)
2、平均值
取R、G、B三个分量的平均值,R=G=B=(R+G+B)/3。
import cv2
import numpy as np
from matplotlib import pyplot as plt
def Avg_Gray(img_path):
# 接口读取图像,opencv中读取到的是BGR图像
img = cv2.imread(img_path)
# 获取图像尺寸
h, w = img.shape[0:2]
# 自定义空白单通道图像存放灰度图
gray = np.zeros((h, w), dtype=img.dtype)
# 对原图像进行遍历,然后灰度化
for i in range(h):
for j in range(w):
# 求平均值作为灰度值
gray[i, j] = (int(img[i, j, 0])+int(img[i, j, 1])+int(img[i, j, 2]))/3
# 读取的BGR转换为RGB
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
plt.imshow(gray)
plt.title('Avg_Gray')
plt.show()
img_path = r'B10.bmp'
Avg_Gray(img_path)
3、加权平均值
取R、G、B三个分量的加权平均值,因为人眼对颜色敏感度不同,所以三个分量加不同的权值,0.299×R+0.587×G+0.114×B。
import cv2
import numpy as np
from matplotlib import pyplot as plt
def WeiAvg_Gray(Img_path):
img = cv2.imread(Img_path)
# 获取图像尺寸
h, w = img.shape[0:2]
# 自定义空白单通道图像存放灰度图
gray = np.zeros((h, w), dtype=img.dtype)
# 对原图像进行遍历,然后灰度化
for i in range(h):
for j in range(w):
gray[i, j] = 0.114*int(img[i, j, 0])+0.587*int(img[i, j, 1])+0.299*int(img[i, j, 2])
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
plt.imshow(gray)
plt.title('WeiAvg_Gray')
plt.show()
img_path = r'B10.bmp'
WeiAvg_Gray(img_path)
注:最大值转换的灰度图亮度最高,平均值转换的灰度图像较暗,加权平均值转化的灰度图像明暗介于两者之间。
4、直接调用灰度处理的方法
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('B1.bmp')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(121)
plt.imshow(img1)
plt.title('Src_img')
# 灰度转换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.subplot(122)
plt.imshow(gray, plt.cm.gray)
plt.title('Gray_img')
plt.show()