计算机图像编码和存储
计算机图像编码和存储
计图像的最小单位通常以像素(pixel)来表示。每个像素都是一个小方块,它们排列在一个二维网格中,组成完整的图像。
像素密度:通常以每英寸像素数表示,像素/英寸或PPI,表示在一英寸内有多少像素。
像素大小:像素的大小通常以微米(microns)为单位,表示一个像素的实际物理尺寸。

图片分辨率是指图像中包含的像素数量,通常以水平像素数和垂直像素数表示。分辨率决定了图像的清晰度和细节水平。
水平像素数和垂直像素数:分辨率通常由两个数字表示,分别代表图像的水平像素数和垂直像素数。例如:1920x1080,他们的乘积即像素总数。
单位:通常分辨率的单位是像素,但在某些情况下,也可以用其他单位,例如磅(常用于打印品质图像的分辨率),或PPI(每英寸像素数,用于描述图像在打印或显示设备上的输出质量)。
影响图像质量:图像的分辨率直接影响其质量。较高分辨率的图像通常更清晰,包含更多细节,也会占用更多的存储空间。
图片的位深度,也称为色深或像素深度,它是指计算机用多少位来表示单个像素的颜色或灰度级别。位深度决定了图像能够表示的颜色或灰度级别的丰富程度以及精度。
常见的位深度包括:
1位深度:每个像素只有0和1两个可能的值,即二值图像。
8位深度:每个像素可以有256个(0~255)不同的颜色或灰度级别,通常用于灰度图像。
24位深度:通常用于真彩色图像,其每个像素通过8位红色、8位绿色和8位蓝色通道组合,可以表示约1677万种不同的颜色。
32位深度:在真彩色图像的基础上,多了一个8位的alpha通道,用于表示像素的不透明度。通常用于图像合成和处理,如PNG图像格式。
RGB颜色空间是一种用于表示彩色图像的常见颜色模型。RGB代表红色(Red)、绿色(Green)和蓝色(Blue),这三种颜色通道是通过不同的亮度值的组合来创建各种颜色的。在RGB颜色空间中,每个像素由三个分量组成,分别代表了红色、绿色和蓝色通道的亮度值。通过调整这三个通道的亮度值,可以混合出各种颜色。

RGB color space
早期的颜色研究表明,人眼对三种颜色最敏感,这些颜色是红色、绿色和蓝色。
19世纪的苏格兰物理学家詹姆斯·克拉克·麦克斯韦对颜色混合进行了深入的研究。他通过将红色、绿色和蓝色光进行不同比例的混合,实验证明了颜色混合的原理,从而提出了三元色模型的概念。
我们现在只要把R、G、B的亮度值,用数字的方式表示出来,如:
用3bit表示一个像素:红色、绿色、蓝色各占1位,8种颜色,用于大部分早期的电脑显示器
用8bit表示一个像素:红色占3位、绿色占3位、蓝色占2位,256种颜色,用于最早期的彩色Unix工作站
用16bit表示一个像素:红色占5位、蓝色占5位、绿色占6位,就是:RGB556或RGB16
用24bit表示一个像素:也被称为真彩色(True Color),就是:RGB24
用32bit表示一个像素:基于24位,增加8个位的透明通道,就是RGB32
计算机中表示RGB颜色的方法主要有两种:整数表示和浮点数表示。这些方法是为了以数字形式存储和处理颜色信息而设计的,通常使用固定位数的通道值来表示红色(R)、绿色(G)、蓝色(B)颜色分量。
整数表示:最常见的是用8bit表示一个像素的一个颜色通道,即每个颜色分量可用(0~255)的整数表示。例如,(255, 0, 0)表示纯红色,(0, 255, 0)表示纯绿色,(0, 0, 255)表示纯蓝色。
浮点数表示:在某些应用中需要更高的颜色精度,使用浮点数来表示RGB颜色。通常,每个通道的值在0.0到1.0之间,表示相对的亮度。例如,(1.0, 0.0, 0.0)表示纯红色,(0.0, 1.0, 0.0)表示纯绿色,(0.0, 0.0, 1.0)表示纯蓝色。浮点数表示会占用更大的存储空间。
RGB格式图像在内存中按照以下顺序排布:
R0 G0 B0 R1 G1 B1 ... (H*W个RGB)
类似的,还有BGR格式图像:
B0 G0 R0 B1 G1 R1 ... (H*W个BGR)
HSV(Hue, Saturation, Value)是一种常见的颜色模型,用于描述和表示颜色。它强调颜色的感知属性,如色相(Hue)、饱和度(Saturation)、亮度(Value),并因此在图像处理、图形设计和艺术创作中得到广泛应用。
|
HSV color space (极坐标) |
HSV color space (直角坐标) |
色相(Hue):表示颜色的基本属性,即颜色的类型。它通常以角度度量,范围是0°到360°,将颜色圆形连续分布在整个色相环上。在色相环中,红色位于0°(或360°),绿色位于120°,蓝色位于240°,依此类推。通过调整色相,可以表示不同的颜色。
饱和度(Saturation):表示颜色的纯度或鲜艳度。它通常以百分比表示,从0%(无饱和度,对应于灰度)到100%(最大饱和度,色彩鲜艳)。
亮度(Value):表示颜色的明亮度级别。它通常以百分比表示,范围从0%(黑暗)到100%(明亮)。
在图像处理中,HSV 相比 BGR/RGB 更方便处理颜色相关的任务。
色调(H)与亮度(V)分离
在 RGB 中,颜色和亮度混在一起,不容易直接根据颜色来筛选。
在 HSV 中,色调和亮度是分开的,只需要看 H 就能判断颜色,不会受到光照强度的太大影响。
颜色分割更直观
例如,提取红色物体:只需要设定 H 在红色区间范围(比如 0-10 或 170-179,代表0°附近),就能快速分割。
max=max(R,G,B)
min=min(R,G,B)


RGB到HSV的转换不会改变图像中像素的几何排布顺序(即每个像素的位置)。它只改变每个像素位置的颜色值的编码方式。
YUV是编译true-color颜色空间的种类,Y表示明亮度,U和V则是色度、浓度。 YCbCr的Y与YUV中的Y含义一致,Cb指蓝色色度,Cr指红色色度,它们描述了像素颜色与中性灰度(白色或灰色)的偏差。
YUV, YCbCr所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中YUV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的影像信号,适合影片与图片压缩以及传输,例如MPEG、JPEG。因此一般俗称的YUV大多是指YCbCr。
|
|
YUV color space |
YUV数据由Y、U、V三个分量组成,现在通常说的YUV指的是YCbCr。
|
Y:表示亮度,占8bit(1字节) U:蓝色色度分量,占8bit(1字节) V:红色色度分量,占8bit(1字节) |
|
根据上面的图片,不难看出:
Y分量承载主要细节:图像的轮廓、纹理、边缘、明暗对比等绝大部分视觉信息都包含在Y分量中,甚至可以把Y分量图像看作是一张高质量的黑白照片。
U、V分量承载颜色信息:它们决定了“是什么颜色”,但不决定“有多亮”或“轮廓是什么”。
|
Tips: 人眼的视网膜上有两种感光细胞:视杆细胞和视锥细胞。视杆细胞对亮度极其敏感,数量远多于视锥细胞,负责在弱光环境下感知明暗和形状;而颜色信息主要由视锥细胞处理,其空间分辨率远低于视杆细胞。 因此,人眼的视觉系统对亮度的变化很敏感,对颜色的细节变化不那么容易察觉。 |
根据YUV各分量的特点,通常完整保留Y亮度分量,而对U、V色度分量进行二次采样,从而在最大限度保持主观视觉质量的前提下,极大地减少数据量。
为节省带宽,大多数 YUV 格式平均使用的每像素位数都< 24 位。主要的采样(subsample)格式有 YUV4:2:0、YUV4:2:2、YUV4:1:1 和 YUV4:4:4。YUV 的表示法称为 A:B:C 表示法。
下面以表格来说明,表格中,每一格代表一个像素
原始数据

点击图片可查看完整电子表格
每个像素都有独立的1组Y/U/V分量
1个像素占用24bit(3字节),跟RGB24的体积一样
这种格式是没有进行色度二次采样的
采样后

点击图片可查看完整电子表格
逐行逐像素点采样Y分量,逐行每2个像素采样 U、V 分量,即水平方向色度采样减半。
1个像素平均占用16bit(2字节)
因为2个像素共占用32bit(4字节 = 2个Y分量 + 1个U分量 + 1个V分量)
还原时,水平方向相邻的2个像素(1行2列)共用1组UV分量
采样后

点击图片可查看完整电子表格
还原后

点击图片可查看完整电子表格
逐行逐像素点采样Y分量,隔行分别每2个像素采样 U、V 分量,即水平+垂直方向色度采样减半。
1个像素平均占用12bit(1.5字节)
因为4个像素共占用48bit(6字节 = 4个Y分量 + 1个U分量 + 1个V分量)
还原时,相邻的4个像素(2行2列)共用1组UV分量
采样后

点击图片可查看完整电子表格
还原后

点击图片可查看完整电子表格
逐行逐像素点采样Y分量,逐行每4个像素采样U、V分量,即水平方向色度采样减为1/4。
1个像素平均占用12bit(1.5字节)
因为4个像素共占用48bit(6字节 = 4个Y分量 + 1个U分量 + 1个V分量)
还原时,水平相连的4个像素(1行4列)共用1组UV分量
|
4:2:0和4:1:1的区别在于,前者在水平方向上不会同时出现U和V,只会出现其中一个分量,后者在竖直方向上不会同时出现U和V,只会出现其中一个分量。 |
采样后

点击图片可查看完整电子表格
还原后

点击图片可查看完整电子表格
|
Packed: Y/U/V 交错按像素排列 Planar: Y/U/V 分平面存储 |
每个像素都有独立 YUV
内存布局:
[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] ...
4.2、YUV 4:2:2 (Packed) - YUYV / UYVY
每两个像素共享一组 U/V
YUYV 内存布局:
Y0 U0 Y1 V0 Y2 U1 Y3 V1 ...
UYVY 内存布局:
U0 Y0 V0 Y1 U1 Y2 V1 Y3 ...
4.3、 YUV 4:2:0 (Planar) - I420 / YUV420p
Y 平面 + U 平面 + V 平面
YYYYYYYYYYYY (H*W)
UUUU (H/2*W/2)
VVVV (H/2*W/2)
4.4、 YUV 4:2:0 (Planar) - YV12
Y 平面 + V 平面 + U 平面
YYYYYYYYYYYY (H*W)
VVVV (H/2*W/2)
UUUU (H/2*W/2)
4.5、 YUV 4:2:0 (Planar) - NV12
Y 平面 + UV 交错平面
YYYYYYYYYYYY (H*W)
UVUVUVUV (H/2*W)
4.6、 YUV 4:2:0 (Planar) - NV21
Y 平面 + VU 交错平面
YYYYYYYYYYYY (H*W)
VUVUVUVU (H/2*W)
只有亮度
YYYYYYYYYYYY (H*W)
|
说明: Planar 格式(I420/NV12/NV21/YV12)更适合 视频压缩/编码 Packed 格式(YUYV/4:4:4)更适合 直接显示或 CPU 图像处理 NV12/NV21 在 GPU 和硬件编码器上最常用 |

来源:https://zh.wikipedia.org/wiki/YUV
|
注意: 根据不同标准,以上公式的系数会有所调整。 一般使用OpenCV 的 cv2.COLOR_BGR2YUV和 cv2.COLOR_BGR2YUV_I420等做YUV转换。默认使用 ITU-R BT.601 标准(标准清晰度电视SDTV),并且使用Studio Swing(有限范围)[16, 235] 和 [16, 240]。 显然,RGB到YUV的转换可能会改变图像像素在内存中的排布,在做图像切片、resize等操作时需要特别注意。 |
图像编码是计算机处理图像的核心环节。
像素、分辨率、位深度 决定了图像的清晰度和色彩表现;
RGB 适合图像显示和渲染;
HSV 更符合人眼感知,便于颜色分析和分割;
YUV 充分利用人眼对亮度和色度的差异,是视频压缩和传输的主流。
不同编码方式各有应用场景,合理选择可以在保证视觉效果的同时提高存储和传输效率。
引用:https://zhuanlan.zhihu.com/p/661985133
https://zhuanlan.zhihu.com/p/662160166






浙公网安备 33010602011771号