Android YUV存储方式

性能

排名 名称 描述
1 YUV444 提供最高质量的色彩准确性和图像细节,但需要更多的存储空间和传输带宽。适用于对图像质量要求很高的应用,如专业视频编辑或高端图像处理
2 YUV422 在性能和存储/传输开销之间取得了平衡。相对于YUV444,它降低了色彩准确性和图像细节,但提供了较小的存储需求。适用于大多数广播和视频领域的应用
3 YUV420 最常用的 YUV 格式,通过更进一步的压缩(降低采样率),在牺牲一定图像质量的情况下,大幅减少存储空间和传输带宽。适用于大多数常见的视频应用,包括流媒体和视频通话
4 YUV411 最低分辨率的 YUV 格式,通过更大幅度的压缩(更低的采样率)来减少存储空间和传输需求。图像质量牺牲较大,适用于一些低分辨率或存储受限的应用

实用性

排名 名称 描述
1 YUV420 目前最常用的 YUV 格式,它的广泛支持与兼容性使其成为大多数应用的首选格式
2 YUV422 在广播和视频领域得到广泛采用,并在许多专业和消费设备中得到支持
3 YUV444 在专业视频编辑和高端图像处理中被广泛使用,但可能不太常见于一般消费者产品
4 YUV411 应用相对较少,适用于特定的低分辨率或存储受限的场景

兼容性

排名 名称 描述
1 YUV420 最常用的 YUV 格式,几乎所有广播、视频和图像处理设备都支持。它是各种视频编解码器和播放器的标准格式,也被广泛支持于各种平台和操作系统,包括桌面电脑、移动设备和流媒体服务
2 YUV422 在广播和视频领域得到广泛采用,并在许多专业和消费设备中得到支持。它在大多数现代平台和操作系统上都有良好的兼容性,但相对于 YUV420,一些较旧或较低成本的设备可能不完全支持
3 YUV444 在专业视频编辑和高端图像处理中被使用,但其广泛兼容性可能受到限制。一些消费者级设备可能不支持 YUV444 格式,特别是在较旧的设备或某些平台上
4 YUV411 应用较少,兼容性相对较低。使用 YUV411 格式可能需要特定的设备或平台支持,而一些常见的播放器和编解码器可能不支持此格式

优缺

名称 优点 缺点
YUV411 色度压缩:使用色度分量的水平和垂直子采样,将色度信息的冗余降低到最小,从而实现较高的压缩比。相对于RGB格式,可以更有效地利用存储和传输带宽。

兼容性:格式广泛支持于许多视频标准和设备中,包括视频采集设备、视频编码器、解码器和显示设备。这使得YUV411成为在不同平台和系统之间交换和共享视频数据的常用格式。

性能与质量平衡:相对于一些更低级别的YUV格式如YUV420或YUV422,YUV411提供了适度的色度子采样,能够在一定程度上减少图像的冗余,同时仍保持相对较高的图像质量。
色度分辨率降低:由于YUV411的色度子采样,色度分辨率相对于亮度分辨率降低。这可能导致在某些情况下,色彩细节的减少和图像质量的降低。

处理开销:与RGB格式相比,YUV411的编码和解码过程需要进行色度转换和降采样操作。这些额外的处理步骤可能会增加处理开销,需要更多的计算资源。

不适合特定应用:对于一些对图像质量要求较高的应用场景,如专业视频编辑和后期制作,YUV411可能无法满足要求,因为它在色度精度和细节方面的损失可能会导致可见的图像伪影或失真。
YUV420 较高的压缩比:YUV420通过降采样进行颜色子采样,减少了色度信息的采样点,从而降低了数据量,有助于实现高效的视频压缩。

良好的图像质量:尽管进行了降采样,YUV420在视觉上的损失并不明显,图像质量通常仍然可以满足大多数应用的需求。

兼容性广泛:YUV420是一种较为常见的颜色编码格式,在许多视频编解码器和传输协议中得到了广泛支持,使其在跨平台和跨设备应用中具有良好的兼容性。
色度信息丢失:YUV420在进行色度降采样时会丢失一部分色度信息,这可能会在某些条件下导致一些细微的图像质量损失,尤其是在处理饱和度较高的图像时。

存在彩虹伪影:当对YUV420格式的图像进行编辑或处理时,可能会在颜色边缘出现彩虹伪影或颜色频带现象,这是由于色度降采样引起的。
YUV422 良好的图像质量:相比于YUV420,YUV422在色度采样上更密集,能够提供更多的色度信息。因此,它通常可以提供更好的图像质量,尤其在对细节和颜色鲜艳度要求较高的场景中。

较高的压缩比:相比于无损的RGB编码格式,YUV422可以通过降低色度采样的密度来减少数据量,并在一定程度上提供较高的压缩比。这在视频传输和存储等场景中是非常有益的。
较高的数据量:相比于YUV420,在相同的图像分辨率下,YUV422需要更多的存储空间和传输带宽,因为它在色度采样上更密集,色度信息的采样点数量更多。

兼容性相对较差:相对于YUV420,YUV422的广泛支持程度稍逊一筹。虽然在某些领域中得到了广泛应用,但并不像YUV420那样成为常见的颜色编码格式。
YUV444 最高的图像质量:相对于YUV420和YUV422,YUV444提供了最高的图像质量,因为它没有对色度进行降采样,保留了完整的色度信息。

色彩还原准确性高:由于保留了完整的色度信息,YUV444的色彩还原准确性更高,可以更准确地呈现原始图像的颜色和细节。

精确的图像处理:在需要对图像进行精确处理和编辑的场景中,YUV444可以提供更多的色度信息,使得处理结果更加准确。
高数据量:相对于YUV420和YUV422,YUV444需要更高的存储空间和传输带宽,因为它不进行色度降采样,色度信息的采样点数量更多。这可能对存储和传输带来一定的负担。

兼容性较差:与YUV420和YUV422相比,YUV444的兼容性相对较差。它通常需要更高的处理能力和更广泛的软硬件支持才能实现。

原理

注:Y表示亮度信息,U和V分别表示蓝色和红色(色度)

名称 原理
YUV411 采样分量:YUV411首先将原始图像的亮度分量(Y)保持不变,不进行压缩。然后,对色度分量进行降采样。在水平方向上,将连续4个像素的色度采样点合并为一个新的色度样本。这意味着每个四个像素共享一个色度值。

降低色度分辨率:由于YUV411在水平方向上对色度进行降采样,色度分辨率相对于亮度分辨率将被降低。对于每个色度样本,只有一个值在整个样本中重复使用。

数据编码:采样和压缩后,Y、U和V分量中的数据按照一定的规则进行编码,以生成YUV411格式的颜色数据。
YUV420 分辨率降低:YUV420使用了亮度(Y)和色度(UV)的分辨率压缩。一般而言,亮度分量的分辨率(Y分辨率)比色度分量的分辨率(UV分辨率)高。例如,在一个4x4的YUV420图像中,亮度分量的每个像素(Y)都与一个4x4的区域相对应,而色度分量(UV)的每个像素都与一个2x2的区域相对应。

亮度(Y)分量:亮度分量表示图像的灰度信息,决定了图像的明暗程度。它对应于黑白图像。每个亮度分量值都对应于一个像素的亮度强度。

色度(UV)分量:色度分量包括U(蓝色差值)和V(红色差值),用于描述像素的颜色信息。由于人眼对亮度更为敏感,色度分量的分辨率较亮度分量低。色度分量的采样率通常比亮度分量的采样率低一半。在YUV420中,U和V的值的采样方式为4:2:0,表示每4个亮度样本值只对应2个色度样本值。

Planar存储方式:YUV420通常以Planar方式存储。在Planar存储中,亮度、蓝色差值和红色差值分别存储为连续的平面。首先存储亮度平面(Y平面),紧接着存储蓝色差值平面(U平面),最后存储红色差值平面(V平面)。这种存储方式有利于视频压缩和处理。
YUV422 分辨率降低:YUV422同样使用了亮度(Y)和色度(UV)的分辨率压缩。与YUV420不同的是,YUV422中的亮度分量和色度分量的采样率相同,即它们的分辨率是相等的。在一个4x4的YUV422图像中,每个亮度分量(Y)和色度分量(U、V)都对应着相同的4x4区域。

亮度(Y)分量:亮度分量表示图像的灰度信息,决定了图像的明暗程度。与YUV420相同,亮度分量的每个值对应一个像素的亮度强度。

色度(UV)分量:色度分量包括U(蓝色差值)和V(红色差值),用于描述像素的颜色信息。在YUV422中,每两个亮度分量(Y)对应一个色度样本值(U或V),表示色度分量的采样率为4:2:2。

Interleaved存储方式:YUV422通常以Interleaved(交错)方式存储。在Interleaved存储中,亮度和色度分量按照交错方式存储在同一个平面中。存储顺序可以是YUYV或UYVY,其中Y表示亮度分量,U和V表示色度分量。例如,对于一个4x4的YUV422图像,存储顺序为YUVYUVYUVYUVYUVY。
YUV444 无分辨率降低:YUV444不对亮度和色度分量的分辨率进行压缩,与原始图像保持一致。每个像素的亮度分量(Y)、蓝色差值分量(U)和红色差值分量(V)都有自己的取样点。

亮度(Y)分量:亮度分量表示图像的灰度信息,决定了图像的明暗程度。在YUV444中,亮度分量的每个像素值对应一个像素的亮度强度。

色度(UV)分量:色度分量包括蓝色差值(U)和红色差值(V),用于描述像素的颜色信息。与YUV420和YUV422相比,YUV444中的色度分量的采样率是最高的,每个像素的亮度分量都对应一个色度样本值。

Planar存储方式:YUV444通常以Planar存储方式存储。在Planar存储中,亮度分量(Y)、蓝色差值分量(U)和红色差值分量(V)分别存储为连续的平面。首先存储亮度平面(Y平面),然后存储蓝色差值平面(U平面),最后存储红色差值平面(V平面)。

YUV术语

名称 描述
Planar Planar 是一种图像存储格式,将不同的图像分量分别存储在不同的内存块中。在 Planar 格式中,图像的亮度(Y)、蓝色差值(U)和红色差值(V)分量分开存储。优点是可以提供更灵活的数据处理能力。由于每个分量都被划分到不同的内存块中,可以对每个分量进行单独的处理、压缩、采样等操作。同时,Planar 格式在某些图像处理算法(如色度调整、降噪等)中更为高效,因为它可以避免分量之间的干扰。
Semi-Planar Semi-Planar 是一种图像存储格式,它是 YUV 图像的一种变体。与传统的 Planar 格式不同,Semi-Planar 格式将亮度(Y)分量存储在一个内存块中,而色度(U、V)分量则被交错存储在另一个内存块中,U 和 V 分量的值交替出现。格式在很多视频编解码算法中被广泛使用,比如 H.264、MPEG-2 等。在这些算法中,色度信息对于图像质量的影响相对较小,因此将 U 和 V 分量交错存储并且共享存储块可以减少存储和传输的开销。此外,由于 U 和 V 分量的值在空间上相邻,一些色度处理算法也可以更加高效地进行操作。
Packed Packed(打包)是一种图像数据存储格式,它将多个图像分量按照一定的顺序依次打包存储在内存中。对于彩色图像而言,最常见的打包格式是 RGB Packed 格式。在 RGB Packed 格式中,每个像素的红色分量、绿色分量和蓝色分量按照一定的顺序连续存储在内存中的相邻字节中。例如,对于每个像素占据 3 字节的 RGB24 格式,第一个字节存储红色分量的值,第二个字节存储绿色分量的值,第三个字节存储蓝色分量的值。类似地,还有其他的打包格式,如 YUV Packed 格式。在 YUV Packed 格式中,亮度分量、色度分量(U)和色度分量(V)按照一定的顺序依次存储在内存中的相邻字节中。打包格式的优点是简单、紧凑,便于存储和传输。它在某些场景下可能具有高效的处理速度,因为数据在内存中是连续存储的,方便批量读取和处理。然而,打包格式的缺点是数据之间相互耦合,难以进行单独的分量处理和采样,而且可能对某些算法(如色度处理)不够高效。
Interleaved Interleaved(交错)是一种图像数据存储格式,它将多个图像分量的像素值交替存储在内存中。在一个Interleaved格式中,每个相邻的像素点包含了多个不同的分量值,而不是将它们分开存储。最常见的交错格式是 RGB 格式,其中红色(R)、绿色(G)和蓝色(B)三个分量的像素值以交错的方式存储。对于RGB交错格式,每个像素点通常使用3个或4个字节进行存储。例如,对于24位的RGB24格式,每个像素的前一个字节存储红色分量值,下一个字节存储绿色分量值,再下一个字节存储蓝色分量值。除了RGB之外,还有其他的交错格式,如YUV交错格式。在YUV交错格式中,亮度(Y)、色度(U)和色度(V)三个分量的像素值以交错方式存储。交错格式的优点是简单、紧凑,便于存储和传输。相邻像素的所有分量值在内存中是连续存储的,这有助于一次读取和处理多个像素的分量值。但是,交错格式也有一些缺点,如在某些算法(如色度处理)中处理单独的分量可能不够高效,以及对于特定的处理操作可能需要额外的步骤。

YUV411

存储 描述 4*4图例
Planar 亮度分量 Y、色度分量 U 和色度分量 V 被分别存储在不同的平面中。亮度分量 Y 的存储是连续的,而色度分量 U 和 V 的像素分别存储在各自的平面中。使用 4:1:1 的采样比例,表示在水平方向上,每个色度分量的采样点数量只有亮度分量的四分之一。
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 U01 U02 U03
V00 V01 V02 V03
Packed 每个像素的亮度值Y存储在一个4位字节中,而每个4x4块共享一个色度分量U和V。亮度分量Y按照从左到右、从上到下的顺序依次存储在内存中,形成一个连续的Y序列。色度分量U和V按照每个4x4块共享一个分量的方式存储在内存中,通常是在Y序列之后存储。
Y00 U00 Y01 V00
Y10 U10 Y06 V11
Y20 U21 Y12 V21
Y30 U31 Y16 V31
Y40 U41 Y22 V41
Y50 U51 Y26 V51
Y60 U61 Y32 V61
Y70 U71 Y36 V71
Interleaved 每4个Y像素共享1个U和1个V像素,对于每4个像素,首先存储第一个像素的Y值,然后存储第一个像素的U值,接着存储第一个像素的V值,再存储第二个像素的Y值,以此类推。
Y00 U00 V00 Y01 U02 V02
Y10 U10 V10 Y11 U02 V12
Y20 U20 V20 Y21 U22 V22
Y30 U30 V30 Y31 U32 V32
Y40 U40 V40 Y41 U42 V42
Y50 U50 V50 Y51 U52 V52
Y60 U60 V60 Y61 U62 V62
Y70 U70 V70 Y71 U72 V72

YUV420

存储 描述 4*4图例
Planar 亮度平面(Y)和色度平面(U和V)是分开存储的。具体来说,首先存储完整的亮度平面(Y),然后存储完整的色度平面U,最后存储完整的色度平面V。这意味着在内存中,Y分量将占据一块连续的内存区域,而U和V分量也各自占据一块连续的内存区域。

I420:UUUU... VVVV...
YV21:VVVV... UUUU...
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 U01 U10 U11
V00 V01 V10 V11
Semi-Planar 亮度信息(Y)被存储在一个平面中,而色度信息(UV)则被组合在另一个平面中。具体而言,色度平面被水平或垂直地交错排列,其中U和V的值交替存储。

NV12:UVUVUV...
NV21:VUVUVU...
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 V00 U01 V01
U10 V10 U11 V11

YUV422

存储 描述 4*4图例
Planar 亮度和色度样本是交错存储的。具体来说,每两个亮度样本(Y)对应一个色度样本(U和V),它们依次交替存储在内存中。这意味着每个亮度样本(Y)都有一个对应的色度样本(U和V),而且它们在内存中是连续存储的。

I422:UUUU... VVVV...
YV16:VVVV... UUUU....
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 U02 U10 U12
U20 U22 U30 U32
V00 V02 V10 V12
V20 V22 V30 V32
Semi-Planar 图像数据以平面交错方式存储。具体地说,亮度分量Y的数据以连续的顺序存储,而色度分量U和V的数据则以交错的方式存储。

NV16:UVUVUV...
NV61:VUVUVU...
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 V00 U02 V02
U10 V10 U12 V12
U20 V20 U22 V22
U30 V30 U32 V32
Packed 亮度(Y)和色度(U、V)样本都是交错存储的。每两个亮度样本(Y)对应一个色度样本(U、V),它们紧密地排列在内存中。

YUVY:YUVY顺序
VYUY:VYUY顺序
UYVY:UYVY顺序
Y00 U00 V00 Y01 Y02 U01 Y03 V01
Y20 U20 V20 Y21 Y22 U21 V21 Y23
Y30 U30 V30 Y31 Y32 U31 Y33 V31
Y40 U40 V40 Y41 Y42 U41 V41 Y43

YUV444

存储 描述 4*4图例
Planar Y、U和V分量都分别存储在不同的平面上。具体而言,Y分量存储在一个平面上,U分量存储在另一个平面上,V分量存储在第三个平面上

I444:UUUU... VVVV...
YV24:VVVV... UUUU...
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 U01 U02 U03
U10 U11 U12 U13
U20 U21 U22 U23
U30 U31 U32 U33
V00 V01 V02 V03
V10 V11 V12 V13
V20 V21 V22 V23
V30 V31 V32 V33
Semi-Planar Y、U和V三个分量都是完全平面存储的,每个像素的Y值都按顺序存储在内存中。而U和V分量则是按照水平和垂直方向交错存储的。具体来说,U和V分量的大小是Y分量的一半,即每个U、V分量对应两个Y分量。

NV24:UVUVUV...
NV42:VUVUVU...
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
Y20 Y21 Y22 Y23
Y30 Y31 Y32 Y33
U00 V00 U01 V01
U02 V02 U03 V03
U10 V10 U11 V11
U12 V12 U13 V13
U20 V20 U21 V21
U22 V22 U23 V23
U30 V30 U31 V31
U32 V32 U33 V33
Packed 每个像素占据 3 个字节。第一个字节存储 Y 分量的值,第二个字节存储 U 分量的值,第三个字节存储 V 分量的值。这种存储方式没有对分量进行压缩或取样,每个分量都有 8 位精度,可以直接表示 0 到 255 的取值范围。
Y00 U00 V00 Y01 U01 V01
Y02 U02 V02 Y03 U03 V03
Y10 U10 V10 Y11 U11 V11
Y12 U12 V12 Y13 U13 V13
Y20 U20 V20 Y21 U21 V21
Y22 U22 V22 Y23 U23 V23
Y30 U30 V30 Y31 U31 V31
Y32 U32 V32 Y33 U33 V33

RGB转YUV的算法

你可能感兴趣的:(android,计算机视觉,人工智能,YUV)