当前位置: 首页 > news >正文

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到,光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础,但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围,同时也关注于提供更加丰富的色彩。因此,本章将首先介绍人眼与色度学相关的生理特征以及人类对颜色的识别方式,然后介绍颜色空间的概念,最后再回到 HDR,介绍与 HDR 相关的颜色标准。

1 色度学

由于视觉是人类的主观感受,因此无论是亮度还是颜色的研究,最根本的研基础都在于人眼的生理特征。人眼的最内层是视网膜,它布满了眼球后部的内壁。当眼球聚焦时,外部的光线在视网膜上聚焦。视网膜表面分布许多视觉细胞,人眼靠这些细胞感知外部光线,然后传递给大脑,形成视觉感知。这些视觉细胞分为两大类:视觉锥细胞以及视觉杆细胞。其中,视觉锥细胞对颜色非常敏感,而视觉杆细胞没有颜色感觉,因此人眼靠视觉锥细胞来产生颜色感知。视觉锥细胞又可以三类,它们分别对红色光,绿色光,蓝色光敏感。但是需要额外注意的是,这里提到的对某种色光敏感,不代表这种视觉锥细胞只能够感知到该中色光。也就是说,在可见光范围内的任意波长的色光,都能刺激三种视觉锥细胞,而某些特殊波长的光线能够对视觉锥细胞产生最大的刺激。

色度学研究的内容就在于如何在显示设备上产生与自然界类似的刺激,使人眼能够感受到相同的颜色。显而易见的是,最简单的方法就是对自然界的每一种颜色生产一种对应的发光原件,可以发出对应颜色的光线。但是,人眼可以识别上万中不同的颜色,而在每一个像素点设置上万个不同的发光元件基本是不可能的,而且生产上万种不同的发光元件的代价也过于高昂,因此,我们需要其他简单的,可行的方法来实现对自然世界中颜色的模拟。

可以想到的最直接的,也是人们一直以来使用的解决方式就是:利用人眼中只有三种视觉锥细胞的特性,只使用红色( r),绿色( g)和蓝色( b)三种光线,来模拟所有其他的颜色。因此,这三种颜色也被称为光的三原色。

这里需要思考一个问题:以黄色为例。在自然界中,显然将红色光与绿色光叠加,得到的新的光线的频率并不是黄色光的频率,但是,红色光与绿色光的叠加,给人眼的感受就是黄色。这种现象的原因是什么?

人眼的三种锥细胞,不同波长的光以及这些光的亮度会对三种锥细胞产生不同的刺激。同样以黄色光为例子,当人眼看见黄色光时,红视锥细胞与绿视锥细胞会产生某种程度的刺激,蓝视锥细胞则基本不产生刺激。而大脑接受到这种刺激后,产生了黄色的视觉。而通过改变红色光与绿色光的亮度,也可以使红视锥细胞与绿视锥细胞产生相同程度的刺激,而大脑接收到这样的刺激之后,同样会认为这是黄色,而非绿色与红色的混合色。

也就是说,人眼对颜色的感知,实际上是通过色光及其亮度,对三种视觉锥细胞产生刺激,然后神经系统将不同的刺激,映射为人感知中的不同的颜色。因此,模拟自然界中的颜色,实际上就是模拟它们对三种视觉锥细胞的刺激

为了实现使用三种原色光线生成其他颜色光线的目的, CIE(国际照明委员会)在1931 年组织了一项实验,通过一些观测者的观察,来确定生成不同的颜色,所需的三原色光线的强度。他们将三种波长的光: 700nm(红色光), 546.1nm(绿色光), 435.8nm(蓝色光)作为基色。在实验过程中,首先将三种基色的光投影到白色屏幕的一侧,接着,再讲第四束光-待测光投影到白色屏幕的另一侧。调节三种基色光的强度直到观测者感受到两侧的颜色一致时,就能够确定如何使用三种基色光得到各种颜色的光。

实验的最终结果是得到了三个颜色匹配函数𝑟̅(λ), 𝑔̅(λ), 𝑏̅(λ)。这三个函数分别表示产生波长为λ的光,所需的红,绿,蓝三原色光的强度。
在这里插入图片描述
实验结果的图像如上图所示。对上图中的单位做如下规定:当三原色光配比出等能白光时,三原色光各自的量称为一单位的红光[R],一单位的绿光[G]与一单位的蓝光[B]。此时三个原色光的通光量之比为 1:4.5907:0.0601。此时,任意波长的光可以通过三原色光的线性组合得到:
C ( λ ) = r ˉ ( λ ) [ 𝑅 ] + g ˉ ( λ ) [ 𝐺 ] + b ˉ ( λ ) [ 𝐵 ] ( 1 ) C(\lambda) = \bar{r}(\lambda)[𝑅] + \bar{g}(\lambda)[𝐺] + \bar{b}(\lambda)[𝐵] ( 1) C(λ)=rˉ(λ)[R]+gˉ(λ)[G]+bˉ(λ)[B]1
这就是 1931 CIE-RGB 计色系统。对于任意单色光,理论上可以全部使用 RGB 三色光表示出来。但是由于 435.8nm-546.1nm 这一段的红色光通量为负值,因此在实际生产中无法实现,所以实际上并非所有单色光(只有一个频率,不会发生色散)都可以由 RGB三原色表示出来。这里出现负值的原因是,待配色光为单色光,其饱和度很高,而 RGB三色混合后,饱和度会降低。因此,想要配出一些单色光,需要将 RGB 三色光中的某一个与待配色光混合,才能实现。此时就会出现负值。

而对于非单色光(能产生色散的色光),任意光谱分布Φ𝑒(𝜆)的 RGB 值都可以由积分得出。
R = ∫ 380 780 Φ e ( λ ) r ˉ ( λ ) d λ R = \begin{aligned} \int_{380}^{780} \Phi_e(\lambda)\bar{r}(\lambda) \mathrm{d} \lambda \end{aligned} R=380780Φe(λ)rˉ(λ)dλ

G = ∫ 380 780 Φ e ( λ ) g ˉ ( λ ) d λ G = \begin{aligned} \int_{380}^{780} \Phi_e(\lambda)\bar{g}(\lambda) \mathrm{d} \lambda \end{aligned} G=380780Φe(λ)gˉ(λ)dλ

B = ∫ 380 780 Φ e ( λ ) b ˉ ( λ ) d λ ( 2 ) B = \begin{aligned} \int_{380}^{780} \Phi_e(\lambda)\bar{b}(\lambda) \mathrm{d} \lambda \end{aligned} (2) B=380780Φe(λ)bˉ(λ)dλ2

通过这种方法就可以将单色光与非单色光用 RGB 三原色表示出来。但是,此时出现的另一个问题是,人类对于颜色的感知包括色度与亮度两部分。例如,绿色会因为亮度的不同,带给人亮绿色,绿色,暗绿色等不同的感受,但是从色度角度来说,它们都是绿色,差别仅仅体现在亮度上。因此,想要表示准确的色度信息,就需要消除亮度带来的影响。通过对颜色匹配函数归一化,可以帮助消除亮度带来的影响。

归一化的结果如下:
r ( λ ) = r ˉ ( λ ) r ˉ ( λ ) + g ˉ ( λ ) + b ˉ ( λ ) r(\lambda) = \frac{\bar{r}(\lambda)}{\bar{r}(\lambda) + \bar{g}(\lambda) + \bar{b}(\lambda)} r(λ)=rˉ(λ)+gˉ(λ)+bˉ(λ)rˉ(λ)

g ( λ ) = g ˉ ( λ ) r ˉ ( λ ) + g ˉ ( λ ) + b ˉ ( λ ) g(\lambda) = \frac{\bar{g}(\lambda)}{\bar{r}(\lambda) + \bar{g}(\lambda) + \bar{b}(\lambda)} g(λ)=rˉ(λ)+gˉ(λ)+bˉ(λ)gˉ(λ)

b ( λ ) = b ˉ ( λ ) r ˉ ( λ ) + g ˉ ( λ ) + b ˉ ( λ ) ( 3 ) b(\lambda) = \frac{\bar{b}(\lambda)}{\bar{r}(\lambda)+\bar{g}(\lambda)+\bar{b}(\lambda)} (3) b(λ)=rˉ(λ)+gˉ(λ)+bˉ(λ)bˉ(λ)3

由上面的三个式子我们可以发现, b(λ) = 1 − r(λ) − g(λ),因此,使用r(λ)与g(λ)就
可以表示整个色域。
在这里插入图片描述
理论上来说,通过上述的函数,我们已经可以通过三原色光表示所有颜色了,但是从图中我们可以发现,在系数的取值中存在负值。例如上图中 r 轴在负数部分也有取值。

这会在实际的工业生产中带来不便,因为负值的光强是无法制造出来的。因此, CIE对此进行了修改,提出了 1931 CIE-XYZ 计色系统。目的是使得系数不再出现负值。为了实现系数不再出现负值的目的, CIE 制定了一系列规则,通过坐标变换的方式,将 RGB 表示法转变成了 XYZ 表示法。简单来说,可以将 XYZ 表示法看做 RGB 表示法的一种非线性变换,这种非线性变换的结果是系数不再出现负值。此时的 XYZ 与 RGB这种自然界中存在的红光,绿光,蓝光不同,它的人为定义出的具有特殊匹配函数的三种“基色”,它的匹配函数𝑥̅(λ), 𝑦̅(λ), 𝑧̅(λ)如下图所示:
在这里插入图片描述
这里我们不需要尝试将 XYZ 与自然界中的某种波长的光线对应,这是没有必要的,我们只需要知道它们是具有如上图所示的匹配函数,并且是由 RGB 通过非线性变换得到的新的“基色”即可。

与 RGB 色度表示法类似,将𝑥̅(λ), 𝑦̅(λ), 𝑧̅(λ)进行归一化:
x ( λ ) = x ˉ ( λ ) x ˉ ( λ ) + y ˉ ( λ ) + z ˉ ( λ ) x(\lambda) = \frac{\bar{x}(\lambda)}{\bar{x}(\lambda) + \bar{y}(\lambda) + \bar{z}(\lambda)} x(λ)=xˉ(λ)+yˉ(λ)+zˉ(λ)xˉ(λ)

y ( λ ) = y ˉ ( λ ) x ˉ ( λ ) + y ˉ ( λ ) + z ˉ ( λ ) y(\lambda) = \frac{\bar{y}(\lambda)}{\bar{x}(\lambda) + \bar{y}(\lambda) + \bar{z}(\lambda)} y(λ)=xˉ(λ)+yˉ(λ)+zˉ(λ)yˉ(λ)

z ( λ ) = z ˉ ( λ ) x ˉ ( λ ) + y ˉ ( λ ) + z ˉ ( λ ) ( 4 ) z(\lambda) = \frac{\bar{z}(\lambda)}{\bar{x}(\lambda)+\bar{y}(\lambda)+\bar{z}(\lambda)} ( 4) z(λ)=xˉ(λ)+yˉ(λ)+zˉ(λ)zˉ(λ)4

归一化后, x(λ), y(λ), z(λ)与r(λ), g(λ), b(λ)的关系为:
x ( λ ) = 0.49000 𝑟 ( λ ) + 0.31000 𝑔 ( λ ) + 0.20000 𝑏 ( λ ) 0.66697 𝑟 ( λ ) + 1.13240 𝑔 ( λ ) + 1.20063 𝑏 ( λ ) x(\lambda) = \frac{0.49000𝑟(\lambda) + 0.31000𝑔(\lambda) + 0.20000𝑏(\lambda)}{0.66697𝑟(\lambda) + 1.13240𝑔(\lambda) + 1.20063𝑏(\lambda)} x(λ)=0.66697r(λ)+1.13240g(λ)+1.20063b(λ)0.49000r(λ)+0.31000g(λ)+0.20000b(λ)

y ( λ ) = 0.17697 𝑟 ( λ ) + 0.81240 𝑔 ( λ ) + 0.01063 𝑏 ( λ ) 0.66697 𝑟 ( λ ) + 1.13240 𝑔 ( λ ) + 1.20063 𝑏 ( λ ) y(\lambda) = \frac{0.17697𝑟(\lambda) + 0.81240𝑔(\lambda) + 0.01063𝑏(\lambda)}{0.66697𝑟(\lambda) + 1.13240𝑔(\lambda) + 1.20063𝑏(\lambda)} y(λ)=0.66697r(λ)+1.13240g(λ)+1.20063b(λ)0.17697r(λ)+0.81240g(λ)+0.01063b(λ)

z ( λ ) = 0.00000 𝑟 ( λ ) + 0.01000 𝑔 ( λ ) + 0.99000 𝑏 ( λ ) 0.66697 𝑟 ( λ ) + 1.13240 𝑔 ( λ ) + 1.20063 𝑏 ( λ ) ( 5 ) z(\lambda) = \frac{0.00000𝑟(\lambda) + 0.01000𝑔(\lambda) + 0.99000𝑏(\lambda)}{0.66697𝑟(\lambda) + 1.13240𝑔(\lambda) + 1.20063𝑏(\lambda)} (5) z(λ)=0.66697r(λ)+1.13240g(λ)+1.20063b(λ)0.00000r(λ)+0.01000g(λ)+0.99000b(λ)(5)

我们也可以发现z(λ) = 1 - x(λ) - y(λ)。因此, XYZ 表示法也可以只是用 X 与 Y 表示整个色域, XYZ 表示法下的色域图如下图所示:
在这里插入图片描述
XYZ 表示法与 RGB 表示法存在一定的联系并且有一些重要的性质:

  • XYZ 色度图中的原点,对应图 2, RGB 表示法中的𝐶𝑏点。同时,图 2 中的直线𝐶𝑏𝐶𝑔对应于 XYZ 表示法中的 y 轴,且经过变换后,在图 4 中的对应长度为 1,同理, 𝐶𝑏𝐶𝑟对应于 x 轴,且对应的长度也为 1.
  • 图 2 中𝐶𝑟𝐶𝑔线段上的点,在新的 XY 坐标系中,仍然在这条线段上。
  • XYZ 表示法中不会出现负值。
  • 原坐标系中的等能白光坐标(13,1 3)在新的坐标系中也为这个坐标。
  • 所有的单色光都出现在图 4 的边缘处。
  • 在 XYZ 色度图中选择任意两点, 位于两点连线之间的任何颜色都可以由这两种颜色表示出来。这也意味着 XYZ 色度图必然是一个凸形。将这个性质进行推广,任意三个光源可以混合产生的颜色,必然在这三个光源对应点形成的三角形内部。多个光源亦然。
  • 最后,很重要的一点是从图 4 我们可以发现,任何三个给定光源,都不能覆盖整个色域。几何上说,色域中不存在能包含整个色域的三角形,即人类视觉的色域不是三角形的,使用三色表示法无法表示整个人类色域,而只能表示局部。

XYZ 表示法是用来表示色度的,也就是说,使用 XYZ 表示法可以表示人眼所能看到的全部颜色,但是还不能表示亮度,因为 XYZ 表示法是归一化以后的结果。因此,通过定义𝑦̅(λ) = 𝑉(𝜆),就可以解决这个问题,其中𝑉(𝜆)是可见光的光谱光效率函数,即人眼对等能量的各种色光的敏感程度函数。由此,就可以通过𝑦̅(λ)来表示出𝑥̅(λ), 𝑧̅(λ)。
x ˉ ( λ ) = 𝑥 ( λ ) 𝑦 ( λ ) 𝑉 ( λ ) \bar{x}(\lambda) = \frac{𝑥(\lambda)}{𝑦(\lambda)}𝑉(\lambda) xˉ(λ)=y(λ)x(λ)V(λ)

y ˉ ( λ ) = 𝑉 ( λ ) \bar{y}(\lambda) = 𝑉(\lambda) yˉ(λ)=V(λ)

z ˉ ( λ ) = 𝑧 ( λ ) 𝑦 ( λ ) 𝑉 ( λ ) ( 6 ) \bar{z}(\lambda) = \frac{𝑧(\lambda)}{𝑦(\lambda)} 𝑉(\lambda) (6) zˉ(λ)=y(λ)z(λ)V(λ)(6)

这三个刺激值就可以使人眼既感受到颜色,又感受到亮度。它们也被称为“ CIE 1931标准观察观察者标准”。

而对于任意一个知道光谱分布的光Φ𝑒(𝜆),如果想要得到它在“ CIE 1931 标准观察观察者标准”下的表示方法,可以先求出对应的 XYZ 值:
X = ∫ 380 780 Φ e ( λ ) x ˉ ( λ ) d λ X = \begin{aligned} \int_{380}^{780} \Phi_e (\lambda) \bar{x} (\lambda) \mathrm{d} \lambda \end{aligned} X=380780Φe(λ)xˉ(λ)dλ

Y = ∫ 380 780 Φ e ( λ ) y ˉ ( λ ) d λ = ∫ 380 780 Φ e ( λ ) V ( λ ) d λ Y = \begin{aligned} \int_{380}^{780} \Phi_e (\lambda) \bar{y}(\lambda) \mathrm{d} \lambda \end{aligned} = \begin{aligned} \int_{380}^{780} \Phi_e(\lambda) V(\lambda) \mathrm{d} \lambda \end{aligned} Y=380780Φe(λ)yˉ(λ)dλ=380780Φe(λ)V(λ)dλ

Z = ∫ 380 780 Φ e ( λ ) z ˉ ( λ ) d λ ( 7 ) Z = \begin{aligned} \int_{380}^{780} \Phi_e(\lambda) \bar{z}(\lambda) \mathrm{d} \lambda \end{aligned} (7) Z=380780Φe(λ)zˉ(λ)dλ(7)

这里的 Y 值就是颜色的亮度。然后进行归一化:
x = 𝑋 𝑋 + 𝑌 + 𝑍 x = \frac{𝑋}{𝑋 + 𝑌 + 𝑍} x=X+Y+ZX

y = 𝑌 𝑋 + 𝑌 + 𝑍 y = \frac{𝑌}{𝑋 + 𝑌 + 𝑍} y=X+Y+ZY

z = 𝑍 𝑋 + 𝑌 + 𝑍 ( 8 ) z = \frac{𝑍}{𝑋 + 𝑌 + 𝑍}(8) z=X+Y+ZZ(8)

这里的小写 x, y 就是颜色在色度图中对应的色坐标。有了色坐标 x, y 以及亮度Y,一个光的颜色就可以被确定下来了。因此,“ CIE 1931 标准观察观察者标准”也被称为 CIE-xyY 表示法。

2 色域

上一节介绍了颜色空间,并且给出了颜色空间的常用表示方法。如图 4 中所示的舌型图,表示了人眼所能感知到的所有颜色的范围。我们需要注意的是,这些颜色是指自然界中人类所能感知到的所有颜色。在图像与视频处理领域,显示设备所能显示的颜色,远远没有自然界中的丰富多彩,产生这种情形的原因主要是生产力与技术的限制。上一节我们提到,显示设备通过在三种基色混合,来表示其他的颜色,并且我们提到“几何上说,色域中不存在能包含整个色域的三角形,即人类视觉的色域不是三角形的,使用三色表示法无法表示整个人类色域,而只能表示局部。”因此,显示设备的制作原理导致我们无法使用显示设备来显示出自然界中存在的所有颜色,而只能选择其中的一部分颜色进行显示,如何选择则取决于颜色标准。

图像领域中通常使用的色域标准来自 ITU-R,使用最广泛的是 BT.709 [1]和BT.2020 [2]标准。 BT.709 是 HDTV 的标准,也是目前普通显示设备使用的色域标准。BT.2020 是 UHDTV 的颜色标准,也是 HDR 技术所支持的色域标准。

2.1 ITU-R BT.709 标准

ITU-R BT.709 也称为 Rec.709,该标准的第一版于 1990 年发布。 BT.709 定义了𝑅′𝐺′𝐵′和𝑌′𝐶𝑏𝐶𝑟的两种编码模式,每种模式的各通道都有 8 或 10 比特两种类型,在 8位编码中, 𝑅′𝐺′𝐵′通道和𝑌′通道的标称范围是 16~235, Cb 和 Cr 通道的标称范围是 16~240 ,中性值为 128 。因此,在𝑅′𝐺′𝐵′ 中,黑色的值是(16,16,16) ,白色的值 是(235,235,235);在𝑌′𝐶𝑏𝐶𝑟中黑色的值是(16,128,128),白色的值是(235,128,128)。标准 RGB 空间的 0 和 255 仍保留作为定时参考,可能不包含颜色数据。

BT.709 标准同时支持模拟信号与数字信号,因此在 BT.709 标准内部,存在两个重要的转换: 𝑅′𝐺′𝐵′ 编码到𝑌′𝐶𝑏𝐶𝑟 编码的转换,以及模拟信号到数字信号的转换。

𝑅′𝐺′𝐵′编码下的模拟信号到𝑌′𝐶𝑏𝐶𝑟编码下的模拟信号之间的转换为:
E Y = 0.2126 E R + 0.7152 E G + 0.0722 E B E_Y = 0.2126E_R + 0.7152E_G + 0.0722E_B EY=0.2126ER+0.7152EG+0.0722EB

E C B = − 0.2126 E R − 0.7152 E G + 0.9278 E B 1.8556 E_{CB} = \frac{-0.2126E_R - 0.7152E_G + 0.9278E_B}{1.8556} ECB=1.85560.2126ER0.7152EG+0.9278EB

E C R = 0.7874 E R − 0.7152 E G − 0.0722 E B 1.5748 ( 9 ) E_{CR} = \frac{0.7874E_R - 0.7152E_G - 0.0722E_B}{1.5748}(9) ECR=1.57480.7874ER0.7152EG0.0722EB9

其中𝐸𝑌, 𝐸𝐶𝐵, 𝐸𝐶𝑅分别表示亮度信号和两种色差信号, 𝐸𝑅, 𝐸𝐺, 𝐸𝐵分别表示𝑅′, 𝐺′, 𝐵′三个通道的模拟信号值。

两种编码方式的数字图像的量化方法是:
D R , G , B = I N T [ ( 219 E R , G , B + 16 ) ⋅ 2 n − 8 ] D_{R,G,B} = INT[(219E_{R,G,B} + 16) \cdot 2^{n-8}] DR,G,B=INT[(219ER,G,B+16)2n8]

D Y = I N T [ ( 219 E Y + 16 ) ⋅ 2 n − 8 ] D_{Y} = INT[(219E_{Y} + 16) \cdot 2^{n-8}] DY=INT[(219EY+16)2n8]

D C B = I N T [ ( 224 E C B + 128 ) ⋅ 2 n − 8 ] D_{CB} = INT[(224E_{CB} + 128) \cdot 2^{n-8}] DCB=INT[(224ECB+128)2n8]

D C R = I N T [ ( 224 E C R + 128 ) ⋅ 2 n − 8 ] ( 10 ) D_{CR} = INT[(224E_{CR} + 128) \cdot 2^{n-8}] ( 10) DCR=INT[(224ECR+128)2n8]10

其中 n 表示量化信号的比特长度, INT 作为将小数化整的四舍五入功能。因此我们可以得出𝑅′𝐺′𝐵′编码下的数字信号到𝑌′𝐶𝑏𝐶𝑟编码下的数字信号之间的转换方法:
D Y = I N T [ 0.2126 D R + 0.7152 D G + 0.0722 D B ] D_Y = INT[0.2126D_R + 0.7152D_G + 0.0722D_B] DY=INT[0.2126DR+0.7152DG+0.0722DB]

D C B = I N T [ ( − 0.2126 1.8556 D R − 0.7152 1.8556 D G + 0.9278 1.8556 D B ) ⋅ 224 219 + 2 n − 1 ] D_{CB} = INT\Bigg[\Bigg( -\frac{0.2126}{1.8556}D_R-\frac{0.7152}{1.8556}D_G + \frac{0.9278}{1.8556}D_B \Bigg) \cdot \frac{224}{219} + 2^{n-1} \Bigg] DCB=INT[(1.85560.2126DR1.85560.7152DG+1.85560.9278DB)219224+2n1]

D C R = I N T [ ( 0.7874 1.5748 D R − 0.7152 1.5748 D G − 0.0722 1.5748 D B ) ⋅ 224 219 + 2 n − 1 ] ( 11 ) D_{CR} = INT\Bigg[\Bigg( \frac{0.7874}{1.5748}D_R-\frac{0.7152}{1.5748}D_G - \frac{0.0722}{1.5748}D_B \Bigg) \cdot \frac{224}{219} + 2^{n-1} \Bigg] ( 11) DCR=INT[(1.57480.7874DR1.57480.7152DG1.57480.0722DB)219224+2n1]11

2.2 ITU-R BT. 2020 标准

ITU-R BT.2020 定义了 UHDTV 的各个方面,比如显示分辨率、帧速率、色度子采样、比特深度和色彩空间,它是由国际电信联盟在 2012 年发布的。相比于 BT.709, BT.2020提供了更加广泛的颜色范围。 BT.2020 也是 HDR 技术的颜色空间。

BT.2020 标准的重要性是毋庸置疑的,正如 BT. 709 对于高清视频传输与高清显示设备制造方面起到的引导性作用, BT. 2020 标准同样也深刻地影响着消费领域超高清显示设备的设计与制造,例如目前绝大部分的 4K 平板电视的物理分辨率都是采用 BT.2020 标准的 3840× 2160,但 BT. 2020 标准绝不仅仅在分辨率方面有所提升,在色彩和刷新频率和信号格式与分析等方面也进行了相关的规定。

相对于 BT.709 标准, BT.2020 标准大幅度提升了视频信号的性能规范,色彩深度方面提高至 10bit 或 12bit,很大程度上增强了整个影像的色彩层次,色域的广度也大大增强,两种标准的色域对比如图 1.13 所示;显示分辨率方面, BT.2020 标准定义了4K 和 8K 两种分辨率,这些分辨率的宽高比为 16: 9,支持的刷新率包括 120p、 60p、59.94p、 50p、 30p、 29.97p、 25p、 24p、 23.976p。不得不提的是,在 BT.2020 标准中取消了隔行扫描,所有超高清标准下的影像都是基于逐行扫描的,无疑是历史性的突破,进一步提升了超高清影像的细腻度与流畅感。
在这里插入图片描述
与 BT.709 一致, BT.2020 也支持了𝑅′𝐺′𝐵′和𝑌′𝐶𝑏𝐶𝑟两种编码模式,以及支持模拟与数字两种信号。同样的, BT.2020 标准内部也存在两个重要的转换:两种编码模式之间的转换以及模拟信号到数字信号的转换。

𝑅′𝐺′𝐵′编码下的模拟信号到𝑌′𝐶𝑏𝐶𝑟编码下的模拟信号之间的转换:
E Y = 0.2627 E R + 0.6780 E G + 0.0593 E B E_Y = 0.2627E_R + 0.6780E_G + 0.0593E_B EY=0.2627ER+0.6780EG+0.0593EB

E C B = − 0.2627 E R − 0.6780 E G + 0.9407 E B 1.8814 E_{CB} = \frac{-0.2627E_R - 0.6780E_G + 0.9407E_B}{1.8814} ECB=1.88140.2627ER0.6780EG+0.9407EB

E C R = 0.7373 E R − 0.6780 E G − 0.0593 E B 1.4746 ( 12 ) E_{CR} = \frac{0.7373E_R - 0.6780E_G - 0.0593E_B}{1.4746}(12) ECR=1.47460.7373ER0.6780EG0.0593EB12

𝑅′𝐺′𝐵′编码下的数字信号到𝑌′𝐶𝑏𝐶𝑟编码下的数字信号之间的转换:

D Y = I N T [ 0.2627 D R + 0.6780 D G + 0.0593 D B ] D_Y = INT[0.2627D_R + 0.6780D_G + 0.0593D_B] DY=INT[0.2627DR+0.6780DG+0.0593DB]

D C B = I N T [ ( − 0.2627 1.8814 D R − 0.6780 1.8814 D G + 0.9407 1.8814 D B ) ⋅ 224 219 + 2 n − 1 ] D_{CB} = INT\Bigg[\Bigg( -\frac{0.2627}{1.8814}D_R-\frac{0.6780}{1.8814}D_G + \frac{0.9407}{1.8814}D_B \Bigg) \cdot \frac{224}{219} + 2^{n-1} \Bigg] DCB=INT[(1.88140.2627DR1.88140.6780DG+1.88140.9407DB)219224+2n1]

D C R = I N T [ ( 0.7373 1.4746 D R − 0.6780 1.4746 D G − 0.0593 1.4746 D B ) ⋅ 224 219 + 2 n − 1 ] ( 13 ) D_{CR} = INT\Bigg[\Bigg( \frac{0.7373}{1.4746}D_R-\frac{0.6780}{1.4746}D_G - \frac{0.0593}{1.4746}D_B \Bigg) \cdot \frac{224}{219} + 2^{n-1} \Bigg] (13) DCR=INT[(1.47460.7373DR1.47460.6780DG1.47460.0593DB)219224+2n1]13

除了颜色空间和色域的转换,在处理 HDR 源视频或通过图片合成 HDR 视频时,通常还要经过采样方式和光电转换函数等步骤的转化,常见的 HDR 视频符合 SMPTE ST 2084规定的转换方程的要求,按照不同要求经过 PQ 曲线或 HLG 的处理。具体可以参考本系列前面的内容。

2.3 ITU-R BT. 709 到 ITU-R BT. 2020 的颜色转换

UHDTV( Ultra-high Definition Television,超高清电视)是未来电视与显示领域的发展趋势,现在,越来越多的电视和节目制作人正开始制作 UHDTV 节目。由于 UHDTV还在刚刚起步的阶段,因此适配于 UHDTV 的节目内容数量仍然不足,因此,将原有的大量的 HDTV 的节目,通过一定的转换,转变为 UHDTV 节目,就是一个解决 UHDTV 节目数量不足的可行的方案。由于 UHDTV 支持的色域要宽于 HDTV 的色域,在转换的过程中,不可避免的需要对节目从 ITU-R BT.709 标准向 ITU-R BT.2020 标准进行颜色转换。

BT.709 到 BT.2020 的转换有一个重要的限制,即 BT.709 标准下的颜色,在 BT.2020标准下要是同样的颜色。换句话说,如果这个颜色是两种色域中都存在的,那么这个颜色在转换过程中应当保持不变;而如果这个颜色是 BT.2020 中独有的,这就需要进行颜色转换。 BT.709 到 BT.2020 的转换可以大致分为三个主要步骤:第一个步骤是逆量化,得到 BT.709 标准下的模拟信号值𝐸𝑅, 𝐸𝐺 , 𝐸𝐵。第二个是色域转换,将 BT.709 下的模拟信号值,转换为 BT.2020 标准下的模拟信号值。最后一个步骤是量化,得到 BT.2020 标准下的数字信号。选择在模拟信号域进行色域转换而不是直接在数字信号域进行色域转换的原因是为了保留更多的信息与细节。由于量化过程会存在信息的丢弃,并且 BT.709的色域比 BT.2020 小,如果直接用数字信号进行转换,无疑会使得 BT.2020 色域下的图像效果变差。因此,通过逆量化过程,恢复图像的相关细节,然后进行模拟信号的色域转换,就可以解决这个问题了。

对于原视频/节目的不同形式,转换方式也略有不同。根据信号源的亮度是否恒定,
转换方式可以分为以下两种:

非恒定亮度信号的转换

在这里插入图片描述
上图是非恒定亮度信号的转换流程图。由于 BT.709 与 BT.2020 均支持两种编码方式: 𝑅′𝐺′𝐵′和𝑌′𝐶𝑏𝐶𝑟,因此逆量化过程的输入与量化过程的输出均有两条路径。根据需求的不同,可以选择不同的输入输出模式。

每一个区块的具体实现过程以及相关函数定义,可以参考 BT.2087 [3]。

恒定亮度信号转换

在这里插入图片描述
上图是恒定亮度信号的转换流程图。由于 BT.709 与 BT.2020 均支持两种编码方式:𝑅′𝐺′𝐵′和𝑌′𝐶𝑏𝐶𝑟,因此逆量化过程的输入与量化过程的输出均有两条路径。根据需求的不同,可以选择不同的输入输出模式。

每一个区块的具体实现过程以及相关函数定义,可以参考 BT.2087。

2.4 ITU-R BT. 2020 到 ITU-R BT. 709 的颜色转换

在现在的实际 UHDTV 节目的广播过程中,特别是在同时进行 UHDTV 和 HDTV 广播的情况下,从 UHDTV 到 HDTV 的实时高质量色域转换就至关重要。也就是说,需要一些方法,来使得 UHDTV 也能够在 HDTV 设备上成功播放,并且不影响观看。这就需要从 ITUR BT. 2020 到 ITU-R BT. 709 的颜色转换,也就是 UHDTV 到 HDTV 的转换。理想情况下转换应该满足以下要求: BT.709 色域内的颜色应该保持不变;转换方法适用于于BT.2020 和 BT.709 之间的多次转换;感知的色调变化必须尽可能小;空间细节没有重大损失;不会在颜色上引入可见的不连续性;映射方法在数学上是可定义的。然后没有可以同时满足所有这些要求的通用色域映射方法。在从更广泛的色域转换到更小的色域时, BT.709 色域外的颜色修改是不可避免的。此转换必然是不同要求之间的妥协,可能因应用程序而异。色域映射算法通常受艺术创作,人类视觉,技术约束和经验等方面的影响。下面我们介绍一种从 BT.2020 到 BT.709 的基于线性矩阵的简单变换。
在这里插入图片描述
图 8 是从 BT.2020 到 BT.709 的基于线性矩阵变换的颜色转换的框图。 除了输出信号被严格限制之外,这是 ITU-R BT.2087 标准中对从 BT.709 转换到 BT.2020 所规定的操作的逆操作。 这种方法在条件限制的情况下是最直接简单的。

这种方法首先使用 ITU-R BT.2087 中规定的两个非线性到线性的传递函数(一种是用于使用电光转换功能的显示参考方法( EOTF),一种是用于使用反光电转移函数( OETF))之一将归一化的非线性 RGB 信号转换为归一化的线性 RGB 信号。接着通过矩阵运算,将 BT.2020 颜色空间的 RGB 信号转换到 BT.709 颜色空间的 RGB 信号。最后再通过使用 ITU-R BT.2087 建议书规定的两种线非线性传递函数(一种是使用反向 EOTF的显示参考方法,另一种是使用 OETF)之一将线性 RGB 信号转换为非线性 RGB 信号。从归一化线性 RGB 信号( EREGEB)到归一化非线性 RGB 信号( E′ RE′ GE′ B)的转换。

该方法具有非常理想的特性,即使在 BT.2020 和 BT.709 之间进行多次转换之后,它也不会改变BT.709 色域内的颜色。 然而, BT.709 色域之外的色彩是硬限幅的,即小于零或大于 1 的 RGB 信号( EREGEB)会被限幅为零或 1,这会导致明显的色调偏移和空间细节的损失。 虽然大多数内容看起来都很好,但色调和空间细节方面还是会有所损失。

色域转换的更多内容,将在本书第二部分的《色域映射》章节中进行介绍。

相关文章:

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到,光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础,但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围,同时也关注于提供更加丰富的色彩。因此&#xff…...

nginx和netcore加载常见的3D模型

背景 数字孪生带火了3D版的Web世界,3D模型格式也是众多,常见的glb适合web传输,fbx,gltf,obj,unity等常用于模型编辑和处理。我们在用netcore或者wasm加载这些3D模型文件时,一般都需要手工增加M…...

ABAP开发学习——标准GUI状态模板的复制

补充一下创建了GUI状态后复制标准状态的方法 首先创建GUI状态 此时按钮全部都是空的 点击顶部的附加-调整模板 选择列表查看器 应用成功,下一步点击激活即可 另外需要注意,功能键中的三个图标的代码并不是习惯性写的”BACK、EXIT、CANCEL",在这个标…...

酷!用豆包MarsCode 写了一个五子棋小游戏

作者:一起重学前端 前言 2017 年,当时大学三本毕业前端工作一年,去深圳找工作面试,在拉勾上海投,接到某公司前端开发团队回复询问邮箱账号,喜滋滋的以为可以有面试了。一看邮箱,抛给我一道面试…...

IntelliJ IDEA 中,自动导包功能

在 IntelliJ IDEA 中,自动导包功能可以极大地提高开发效率,减少手动导入包所带来的繁琐和错误。以下是如何在 IntelliJ IDEA 中设置和使用自动导包功能的详细步骤: 一、设置自动导包 打开 IntelliJ IDEA: 启动 IntelliJ IDEA 并打…...

c#异步编程(async/await)

注:下文摘自ChatGPT,总结与案例都非常完善,可以快速理解并应用 0:使用场景 在winform界面程序中,在ui操作中涉及到一些耗时的等待操作,使用线程自己处理已经显得力不从心,如何能更好的实现&am…...

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…...

cocoscreater3.8.4生成图集并使用

1.安装texturepacker,去官网下载https://www.codeandweb.com/texturepacker 2.将图片拖动进来,即可自动生成精灵表,这里输出选用cocos2d-x,打包用免费版的“基本”就行,高级模式是收费的,然后点击“发布精…...

Ettercap工具使用说明

文章目录 Ettercap 简介Ettercap 的主要功能Ettercap 的安装在 Kali Linux(或基于 Debian 的系统)上安装:在其他操作系统上: Ettercap 的使用方式1. 基本模式2. MITM 攻击ARP 欺骗DNS 欺骗 3. 嗅探模式 常用插件防御建议 Ettercap…...

Linux 如何创建逻辑卷并使用

一、逻辑卷的介绍 生成环境中逻辑卷使用率很高 逻辑卷的诞生:如果对磁盘直接使用fdisk分区,那么这中分区,我们叫做Linux的标准分区,Linux的标准分区格式化成文件系统之后,挂载使用,那么一旦文件系统的空间…...

laravel-operate

php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear 1、查看artisan所有命令; php artisan list 2、查看命令描述及参数和选项; php artisan(n.工匠、技工) help migration&…...

探索Python WebSocket新境界:picows库揭秘

文章目录 探索Python WebSocket新境界:picows库揭秘第一部分:背景介绍第二部分:picows库概述第三部分:安装picows库第四部分:简单库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第…...

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件,适用多种应用场景,可快速组合算法,实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀,自带强大的视觉分析工具库,可…...

Java面试题、八股文——JVM篇最终篇

1.如何选择垃圾收集器? 选择合适的垃圾收集器(Garbage Collector, GC)对于优化Java应用程序的性能至关重要。不同的应用场景和系统需求可能需要不同类型的垃圾收集器来满足。以下是一些考虑因素以及常见的垃圾收集器选项,帮助您做…...

C++ 11重点总结2

1C11多线程 主要对少用的知识点进行详细描述&#xff0c;用的多的就给示例。照猫画虎 #include<thread> // 默认构造函数 thread() // 初始化构造函数 template<class Fn, class... Args> explicit thread(Fn&& fn, Args&&... args) // 移动构造…...

什么是 C++ 中的函数对象?它有什么特点?

在 C 中&#xff0c;函数对象&#xff08;Function Object&#xff09;是一种可调用对象&#xff0c;它允许像函数一样被调用&#xff0c;但实际上它可能并不是真正的函数。函数对象可以是以下几种类型之一&#xff1a; 普通函数&#xff1a; 一个普通的、定义在命名空间或类…...

Golang 反射

一、Go反射的应用场景 &#xff08;一&#xff09;对象序列化和反序列化 场景描述 在处理网络通信&#xff0c;数据存储等场景中&#xff0c;需要将对象转换为字节流&#xff08;序列化&#xff09;以便传输或存储&#xff0c;在接收端再将字节流转换回对象&#xff08;反序列…...

hhdb数据库介绍(10-7)

OEM管理 为方便更换管理平台的产品Logo以及产品名称信息。引入“OEM管理功能”对外提供可视化更新Logo以及产品名称信息的入口。 功能入口&#xff1a; 具有管理权限的用户登录平台&#xff0c;通过 OEM管理的超链接进入功能页面&#xff0c;超链接路径需要在原访问页面url的…...

RabbitMQ的预取值详解

RabbitMQ的预取值&#xff08;Prefetch Value&#xff09;是一个关键概念&#xff0c;它决定了消费者在从队列中获取消息时&#xff0c;一次性可以获取的消息数量。这一机制对于优化消息分发和消费者的负载均衡至关重要。 什么是RabbitMQ的预取值&#xff1f; 预取值是指消费者…...

mysql 触发器进入历史

一、触发器 MySQL 触发器&#xff08;Triggers&#xff09;是一种数据库对象&#xff0c;它与表关联&#xff0c;能在特定的事件&#xff08;如插入、更新或删除&#xff09;发生时自动执行一些指定的操作。使用触发器可以帮助我们自动维护数据库的完整性、一致性&#xff0c;…...

通过数巅能源大模型降本增效

在能源行业中&#xff0c;数据的有效利用对于企业的决策和运营至关重要。随着业务的发展&#xff0c;企业面临着数据分散、数据分析效率低、报告生成耗时等问题&#xff0c;制约了企业的发展和竞争力的提升。 数巅能源大模型解决方案 数巅科技推出了能源大模型解决方案&#x…...

如何编写出色的技术文档

目录 ​编辑 1. 明确文档目的和受众 目的的重要性 了解受众 2. 收集和组织信息 信息收集的技巧 组织信息 3. 规划文档结构 结构规划的重要性 结构规划的步骤 4. 编写内容 语言和风格 内容的组织 编写技巧 5. 审阅和测试 审阅的重要性 测试的必要性 6. 版本控…...

摄像头原始数据读取——gstreamer(gst_parse_launch)

摄像头原始数据读取——gstreamer(gst_parse_launch) #include <stdio.h> #include <string.h> #include <stdlib.h>#ifdef __cplusplus extern "C" { #endif#include <gst/gst.h>#ifdef __cplusplus }; #endifstatic gboolean bus_msg_tim…...

矩阵/矩阵乘法/特征值/特征向量的讲解

线性代数里有很多的概念&#xff0c;很多概念是有几何意义的&#xff0c;了解了几何意义可能会更好的理解各种概念及其相互之间的关系。 矩阵&#xff1a; 矩阵是一个变换&#xff0c;一个坐标系到另一个坐标系的变换。矩阵里的各个参数&#xff0c;代表了如何进行变换。 矩阵…...

docker-compose搭建xxl-job、mysql

docker-compose搭建xxl-job、mysql 1、搭建docker以及docker-compose2、下载xxl-job需要数据库脚本3、创建文件夹以及docker-compose文件4、坑来了5、正确配置6、验证-运行成功 1、搭建docker以及docker-compose 略 2、下载xxl-job需要数据库脚本 下载地址&#xff1a;https…...

《图像形态学运算全解析:原理、语法及示例展示》

简介&#xff1a; 本文详细介绍了图像形态学中的多种运算&#xff0c;包括腐蚀、膨胀、开运算、闭运算、形态学梯度运算、礼帽运算以及黑帽运算。分别阐述了各运算的原理、语法格式&#xff0c;并通过 Python 代码结合具体示例图片&#xff08;如erode.JPG、dilate.JPG、close.…...

【面试分享】C++ 中结构体(struct)和类(class)的区别

在 C中&#xff0c;结构体&#xff08;struct&#xff09;和类&#xff08;class&#xff09;有一些相似之处&#xff0c;但也存在一些重要的区别&#xff1a; 一、默认访问权限 结构体&#xff1a; 在 C中&#xff0c;结构体的默认成员访问权限是public&#xff08;公有&…...

Rk3588 onnx转rknn,出现 No module named ‘rknn‘

一、操作步骤&#xff1a; rk3588 需要将yolo11 的模型onnx转rknn。 https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolo11 这个是用yolo11训练的模型&#xff0c;有80种类型。 完整下载下来后&#xff0c;在按文档描述下载模型下来&#xff1a; 然后进…...

HarmonyOS:@Provide装饰器和@Consume装饰器:与后代组件双向同步

一、前言 Provide和Consume&#xff0c;应用于与后代组件的双向数据同步&#xff0c;应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递&#xff0c;Provide和Consume摆脱参数传递机制的束缚&#xff0c;实现跨层级传递。 其中Provi…...

在并发情况下,Elasticsearch如果保证读写一致?

大家好&#xff0c;我是锋哥。今天分享关于【在并发情况下&#xff0c;Elasticsearch如果保证读写一致&#xff1f;】面试题。希望对大家有帮助&#xff1b; 在并发情况下&#xff0c;Elasticsearch如果保证读写一致&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java…...

通过 SSH 进行WordPress网站的高级服务器管理

我在管理hostease的服务器时&#xff0c;时常需要通过SSH登录服务器进行修改。而在网站管理中&#xff0c;SSH不仅是一个基础工具&#xff0c;更是高级用户用来精细化管理和优化服务器的重要工具。通过SSH&#xff0c;你可以深入监控服务器的性能、精细管理系统资源&#xff0c…...

关闭AWS账号后,服务是否仍会继续运行?

在使用亚马逊网络服务&#xff08;AWS&#xff09;时&#xff0c;用户有时可能会考虑关闭自己的AWS账户。这可能是因为项目结束、费用过高&#xff0c;或是转向使用其他云服务平台。然而&#xff0c;许多人对关闭账户后的服务状态感到困惑&#xff0c;我们九河云和大家一起探讨…...

PostgreSQL数据库参数调优实践

PostgreSQL&#xff08;简称PG&#xff09;数据库的性能调优是一个复杂但至关重要的过程&#xff0c;特别是在处理大量数据和复杂查询时。通过合理设置和调整数据库参数&#xff0c;可以显著提升数据库的性能和响应速度。本文将从多个方面详细介绍PostgreSQL数据库参数调优的实…...

Leetcode - 144双周赛

目录 一&#xff0c;3360. 移除石头游戏 二&#xff0c;3361. 两个字符串的切换距离 三&#xff0c;3362. 零数组变换 III 四&#xff0c;3363. 最多可收集的水果数目 一&#xff0c;3360. 移除石头游戏 本题直接模拟过程&#xff0c;可以额外使用一个布尔变量标记谁赢&…...

微信小程序全局配置:TabBar与页面配置详解

微信小程序全局配置:TabBar与页面配置详解 引言 随着移动互联网的迅猛发展,微信小程序作为一种新兴的应用形式,因其便捷性和丰富的功能而受到广泛欢迎。在小程序的开发过程中,全局配置是非常重要的一环,尤其是tabBar和页面的配置。本文将深入探讨微信小程序的全局配置,…...

Linux创建免密登陆(错误:Permission denied (publickey,gssapi-keyex,gssapi-with-mic))

报错截图 解决方法 1. mkdir -p ~/.ssh 2. chmod 700 ~/.ssh 3. ssh-keygen&#xff0c;一直回车 4. chmod 600 /root/.ssh/id_rsa 5. 将公钥内容追加到服务器上&#xff0c;cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 6. chmod 600 ~/.ssh/authorized_keys…...

机器学习深掘临床研究中小分子代谢标志物的探索与应用

摘要 随着生命科学的发展&#xff0c;小分子生物标志物在临床研究中的作用日益凸显。机器学习技术为挖掘小分子生物标志物提供了强大工具。本文介绍了小分子生物标志物的定义、分类及在临床医学中的应用&#xff0c;阐述了常用机器学习算法在生物标志物挖掘中的优势&#xff0…...

计算机网络 第4章 网络层

计算机网络 &#xff08;第八版&#xff09;谢希仁 第 4 章 网络层4.2.2 IP地址**无分类编址CIDR**IP地址的特点 4.2.3 IP地址与MAC地址4.2.4 ARP 地址解析协议4.2.5 IP数据报的格式题目2&#xff1a;IP数据报分片与重组题目&#xff1a;计算IP数据报的首部校验和(不正确未改) …...

Android按键点击事件三种实现方法

1. 在xml文件中为 Button 添加android:onclick属性 由于没有onclick这个函数&#xff0c;onclick下面会提示红色波浪线错误&#xff0c;然后单击一下"onclick"按住键盘上AltEnter键,选择在activity中生成函数 public void onclick(View view) {Toast.makeText(this,&…...

微信小程序中会议列表页面的前后端实现

题外话&#xff1a;想通过集成腾讯IM来解决即时聊天的问题&#xff0c;如果含语音视频&#xff0c;腾讯组件一年5万起步&#xff0c;贵了&#xff01;后面我们改为自己实现这个功能&#xff0c;这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...

决策树——基于乳腺癌数据集与cpu数据集实现

决策树——乳腺癌数据实现 4.1 训练决策树模型,并计算测试集的准确率 1. 读入数据 from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix …...

2024年11月24日Github流行趋势

项目名称&#xff1a;FreeCAD 项目维护者&#xff1a;wwmayer, yorikvanhavre, berndhahnebach, chennes, WandererFan等项目介绍&#xff1a;FreeCAD是一个免费且开源的多平台3D参数化建模工具。项目star数&#xff1a;20,875项目fork数&#xff1a;4,117 项目名称&#xff1…...

库的操作.

创建、删除数据库 创建语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name[ ]是可选项&#xff0c;IF NOT EXISTS 是表明如果不存在才能创建数据库 //查看数据库&#xff0c;假设7行 show databases; //创建数据库 --- 本质在Linux创建一个目录 create database databa…...

Go错误与日志处理—推荐实践

错误的分类 在 Go 语言中&#xff0c;错误是通过实现 error 接口的类型表示的&#xff0c;但不同场景下的错误可以按性质和用途进行分类。以下是 Go 语言错误的常见分类&#xff0c;以及每类错误的解释和示例&#xff1a; 标准错误类型 标准库中定义了许多常见的错误类型&…...

文件上传upload-labs-docker通关

&#xff08;图片加载不出&#xff0c;说明被和谐了&#xff09; 项目一&#xff1a; sqlsec/ggctf-upload - Docker Image | Docker Hub 学习过程中,可以对照源码进行白盒分析. 补充&#xff1a;环境搭建在Linux虚拟机上的同时&#xff0c;以另一台Windows虚拟机进行测试最…...

C语言——数组基本知识(一)

目录 一.一维数组的初始化 二.数组的排序 ①冒泡排序&#xff1a; 代码&#xff1a; 没有第二个for循环运行结果如下&#xff1a; 正确的运行结果如下&#xff1a; ②选择排序 代码如下&#xff1a; 运行结果如图&#xff1a; 往期回顾&#xff1a; 一.一维数组的初始…...

vue2日历组件

【效果图】 <template><div style"width: 100%"><!-- <div> --><!-- <div>{{ startDate.getMonth() 1 - startDate.getDate() }}</div><div>{{ endDate.getMonth() 1 - endDate.getDate() }}</div> --&g…...

Unity C# 影响性能的坑点

c用的时间长了怕unity的坑忘了&#xff0c;记录一下。 GetComponent最好使用GetComponent<T>()的形式&#xff0c; 继承自Monobehaviour的函数要避免空的Awake()、Start()、Update()、FixedUpdate().这些空回调会造成性能浪费 GetComponent方法最好避免在Update当中使用…...

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库&#xff0c;存在的问题是&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据&#xff0c;查到则返回&#xff0c;…...

多线程

线程是什么&#xff1f; 1、线程是进程的执行分支&#xff0c;一个进程内部的控制程序 2、一个进程至少有一个执行线程 3、从CPU角度来看&#xff0c;线程就是一个更轻量化的线程 4、线程在进程内部运行&#xff0c;所以本质就是在进程地址空间上运行 注意&#xff1a; 一…...