- 记录一下关于数字图像的亮度、对比度、饱和度、锐化、以及几个颜色空间的相关知识;
- 主要参考了知乎两篇介绍:
- https://zhuanlan.zhihu.com/p/44813768
- https://zhuanlan.zhihu.com/p/28766366
A. 基本概念
1. 亮度:图像的明暗程度;
2. 对比度:最高和最低灰度级的灰度差;
3. 饱和度:图像颜色种类的多少,像素最大值和最小值之间的中间值越多,图像的颜色种类越多;
4. 锐化:补偿图像轮廓,增强图像的边缘以及灰度的跳变;
5. 分辨率:图像中存储的信息量,每英寸图像内有多少个像素点,即,Pixel Per Inch (PPI)
B. 调节方法
数字图像可以表示为:
f ( x , y ) = i ( x , y ) ⋅ r ( x , y ) f(x,y)=i(x,y)·r(x,y) f(x,y)=i(x,y)⋅r(x,y), 其中 i ( x , y ) i(x,y) i(x,y)表示入射分量,取值范围(0, +∞); r ( x , y ) r(x,y) r(x,y)表示反射分量,取值范围(0,1)
1. 对比度/亮度 调节:RGB空间内的线性变换:
g ( x , y ) = a f ( x , y ) + b g(x,y)=af(x,y)+b g(x,y)=af(x,y)+b
其中,a表示对比度(contrast),b表示亮度(brightness)
2. 分辨率 调节:
(1)双线性差值;
(2)最近邻插值;
(3)区域重采样;
(4)4×4邻域双立方插值
C. 颜色空间及其变换
1. HSL/ HSV/ HSB 空间:
- 依据人眼媒介设定的颜色空间
- H:Hue,色相;S:Saturation, 饱和度; L:Lightness,明度; B:Brightness,明度; V:Value, 明度;
- 三者的区别与联系在于:
(1)HSL空间等价于HSV空间;
(2)空间的像素值分布形态存在差异,其中HSV是倒锥体,HSB为双锥体;
2. RGB 空间:
- 依据颜色发光原理设定的颜色空间,即Red, Green, Blue 红黄蓝三色空间;
3. YCrCb/ YUV 空间:
- 这两个颜色空间主要用于优化彩色视频信号;
- Y:亮度;Cr:红色分量;Cb,蓝色分量
- 区别在于,YCrCb为数字信号,YUV表示模拟信号;
- 重点可以表示和关注人脸的肤色区域,主要是由于RGB空间中,人脸的肤色受亮度影响大,而 YCrCb/ YUV 空间可以降低亮度的影响
D. 附上代码
- 主要用于RGB图像转为YCrCb空间后,对亮度Y分量进行变换,而后再转为RGB图像
- opencv结合python实现;delta为修改Y分量的参数;
import cv2
import numpy as np
path = 'Test.png'
img_rgb = cv2.imread(path)
#img_yuv = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2YUV)
delta = 0.1
img_ycrcb = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2YCR_CB)
img_ycrcb = img_ycrcb/255.
img_ycrcb[:, :, 0] = (1.0 + delta) * img_ycrcb[:, :, 0]
img_ycrcb[:, :, 0][img_ycrcb[:, :, 0] > 1] = 1
img_ycrcb =img_ycrcb*255.
img_ycrcb = np.array(img_ycrcb, dtype=np.uint8)
to_rgb = cv2.cvtColor(img_ycrcb, cv2.COLOR_YCR_CB2RGB)
cv2.imwrite('Test_ycrcb.jpg', to_rgb)