音视频之H.265/HEVC变换编码
H.265/HEVC系列文章:
1、音视频之H.265/HEVC编码框架及编码视频格式
2、音视频之H.265码流分析及解析
3、音视频之H.265/HEVC预测编码
4、音视频之H.265/HEVC变换编码
目录
一、离散余弦变换:
DCT原理及特点:
一维DCT解析例子:
二维DCT:
DCT基图像:
图像DCT变换:
整数DCT的推导:
H.265/HEVC中的整数DCT:
二、离散正弦变换:
DST原理:
H.265/HEVC中的整数DST:
三、变换结构:
变换单元(TU):
相关语法语义:
四、哈达玛变换:
原理及特点:
哈达玛变换的应用:
Hadamard变换的例子:
图像变换编码是指将以空间域中像素形式描述的图像转换至变换域,以变换系数的形式加以表示。绝大多数图像都含有较多平坦区域和内容变化缓慢的区域,适当的变换可使图像能量在空间域的分散分布转为在变换域的相对集中分布,以达到去除空间几余的目的,结合量化、“z”扫描和熵编码等其他编码技术,可以获得对图像信息的有效压缩。
离散余弦变换(DiscreteCosineTransform,DCT)与去相关性能最优的 Karhunen-Loève(K-L)变换相比,DCT 变换形式与输入信号无关且存在快速实现算法,并且其性能接近于前者。因此,越来越多的图像及视频编码标准采用了DCT技术,如JPEG、H.261、MPEG1、H.262/MPEG-2、H.263、MPEG-4、H.264/AVC等,其中 H.264/AVC 首次使用了整数 DCT。目前,DCT是构成主流混合视频编码框架的一项基本技术。
H.265/HEVC 沿用了H.264/AVC所采用的整数DCT,并进行了不同尺寸变换形式的推广。此外,为适应不同预测方式下残差的分布情况H.265/HEVC引入了离散正弦变换(Discrete Sine Transform,DST)类似于整数 DCT,H.265/HEVC也采用了整数DST。
一、离散余弦变换:
DCT原理及特点:
傅里叶变换表明,任何信号都能表示为多个不同振幅和频率的正弦波或余弦波信号的叠加。如果采用的是余弦函数,则信号分解过程成为余弦变换(Cosine Transform);若输入信号是离散的,则称之为离散余弦变换(Discrete Cosine Transform,DCT)。
数学上共存在8种类型的 DCT其一维形式如下所示:
在以上8类DCT中,前4类对应于偶数阶的实偶DFT,后4类对应于奇数阶的实偶 DFT,且在实际应用中,后4类使用较少。在前4类DCT中,I类DCT应用最为广泛,尤其是在图像、音视频编码等多媒体信号处理领域,其逆变换对应于Ш类DCT。为了便于叙述,下文中的DCT均指Ⅱ类 DCT。
DCT 提供了一种在频域中处理和分析信号的方法。由DCT定义可知,当k=0时,不论n取何值,式中所有余弦项都为cos0,即为1,因此 X(0)正比于信号 x(n)的平均值,称之为信号的“直流”(Direct CurrentDC)分量。当k>0时,X(k)反映了信号x(n)在不同频率上的变化情况称之为信号的“交流”(Altermate Current,AC)分量。随着k的增大,余弦函数值的变化越来越快,所表示的频率也越来越高。此外,需要注意的是,DCT系数有可能取负值。例如,对于DC系数,当x(n)平均值小于零时,就会取负值;对于AC系数,若x(n)和某一基函数频率相同,但相位上相差半个周期时,该系数为负值。
一维DCT解析例子:
Ⅱ类 DCT解析,下面给定两个一维8点序列x1(n)和x2(n),分别对二者做I类DCT(结果保留整数)。
当K = 0时:
当K = 1时:
序列x(n)的 DCT 结果为:
同(1)的计算过程,可得序列x(n)的DCT 结果:
从以上两个序列DCT结果可以看出,序列x1(n)各元素幅值差异较大,相邻元素间相关性较弱,其DCT结果能量分布较为分散。而序列x2(n)各元素幅值差异极小,相邻元素间相关性较强,其DCT结果大部分能量集中于DC系数上,AC系数幅值非常小。需要指出的是,序列x2(n)与图像、视频信源特征较为相似,因此采用DCT可以使信号能量集中于少数几个系数中,便于进行信源压缩,如量化、熵编码等。
二维DCT:
图像、视频编码主要使用二维DCT。
DCT基图像:
图5.1给出了二维8x8DCT基图像,其中左上角小图像表示水平和垂直空间频率均为零时的基图像,在任一方向上都没有灰度值的变化;
其余小图像分别对应于不同水平和垂直空间频率的基图像,如基图像右下角小图像对应于最高的水平和垂直频率,这里像素灰度在水平和垂直方向发生连续变化;又如基图像右上角小图像对应于最高水平频率和零垂直频率,而左下角则对应于最高垂直频率和零水平频率。简而言之,离散余弦变换可以解释为:将任一8x8像素块表示为图5.1所示的64个基图像的加权和,其权值即为对应位置的 DCT系数。
由之前例5-1中的分析可知,对于灰度值缓慢变化的像素块来说,经过 DCT 后绝大部分能量都集中在左上角的低频系数中;相反,如果像素块包含较多细节纹理信息,则较多能量分散在高频区域。实际上,大多数图像包含更多的低频分量,并且可以利用人眼对图像高频细节相对不敏感的特性,对高能量的低频系数进行较为精细的量化和处理,而对低能量的高频系数进行粗略的量化或掩盖。这样可以较好地压缩图像,而不会造成明显的主观质量下降。
图像DCT变换:
图5.2为图像Lena(512x512),分别对该图像做 2x2、4x4、8x8和16x16DCT,并计算原始图像与不同变换尺寸所得DCT系数熵的比值,此处像素与 DCT系数都作为独立同分布信源:
原始图像熵为:
同理可得:
其比值(Ratio)分别为1.9325、2.7630、3.3581和3.4325,如图5.3所示。
图5.3给出了DCT去相关性能与变换大小的关系。从图中可以看出随着变换尺寸的增大,DCT去相关性能越来越好,但提升幅度逐渐变缓。考虑到 DCT的计算复杂度会随着变换尺寸的增大而大幅提高,综合考虑性能与复杂度,许多较早的图像与视频编码标准(如JPEG、H.261、H.263.MPEG-1、MPEG-2、MPEG-4等)都采用8x8DCT作为其变换编码方案。然而,DCT也有其缺点,余弦函数的存在使得DCT过程必须使用浮点数,这样不可避免地会带来舍入误差以及编/解码端正反变换失配的问题。针对上述问题,从H.264/AVC 标准开始采用整数 DCT,这一新的技术不但解决了舍入误差以及编解码失配的问题,而且整型数的使用使得 DCT 的运行速度大为提高。
整数DCT的推导:
如上所述,最初的视频编码标准大都采用8x8DCT作为基本变换。而上一代视频编码标准H.264/AVC首次采用整数DCT,最初的3个档次(基本档次 Baseline Profile、主档次 Main Profile 和扩展档次 ExtendedProfile)仅使用了 4x4 整数 DCT,后来的高档次 HighProfile 中增加了 8x8整数 DCT 作为可选变换块大小。
下面以 4x4 DCT为例推导 H.264/AVC 中的4x4整数 DCT 变换矩阵维 4x4 DCT 公式如下:
记括号中的部分为Z(m,l),则上式可分解为以下两式:
可以看出,二维 DCT可以分解成两个一维DCT,即先对像素块的行(或列)做一维 DCT,再对列(或行)做一维DCT。现将一维DCT写成如下矩阵相乘形式:
其中,X代表原始像素块,Y表示变换后的DCT系数矩阵,变换矩阵A可由下式定义:
存在“1”、“2”元素,因此变换过程仅需要加法、移位操作即可,从而大幅提高了计算速度。同时,与浮点DCT相比,整数DCT所有的操作都是针对整型变量的,这样做避免了精度损失,也能够消除编解码器中反变换不匹配的问题。
H.265/HEVC中的整数DCT:
H.265/HEVC 沿用了H.264/AVC 所采用的整数DCT技术,但其变换矩阵与 H.264/AVC 相比有所不同。另外,H.265/HEVC使用了4种不同尺寸的整数 DCT,分别为4x4、8x8、16x16和32x32。下面以 H.265/HEVC中4x4 整数 DCT 变换矩阵为例,说明其与H.264/AVC的区别。
类似于上述整数DCT的推导过程,可以得到:
可以用标量数乘的形式来表示。综上,H.265/HEVC中4x4整数DCT公式为:
H.265/HEVC 中还使用了3种更大尺寸的整数DCT:8x8、16x16和32x32,这3种整数DCT推导方法与4x4基本相同,唯一的区别在于矩阵元素整数化时放大的倍数不同(不同大小的变换对应的修正矩阵元素也不同)。下面给出H.265/HEVC中8x8整数 DCT的变换矩阵,16x16、32x32变换矩阵参见H.265/HEVC 标准。
可以看出,8x8整数DCT变换矩阵第0、2、4、6行前4个元素恰好组成了4x4整数DCT矩阵。事实上,类似的规律也存在于其他大小的变换矩阵中。例如,32x32矩阵偶数行(首行为第0行)前一半元素可组成16x16变换矩阵,32x32矩阵第0、4、8、12、16、20、24、28行前8个元素可组成8x8变换矩阵等。这些规律得益于不同大小的变换矩阵在整数化时放大的倍数满足一定条件,使得放大后各个矩阵元素值大小相同。该条件可具体描述为:NxN的变换矩阵整数化时放大倍数为。此外,利用该规律还可以开发出具有统一形式的整数DCT蝶形算法。
与H.264/AVC相比,H.265/HEVC在整数DCT方面有较大改进,主要表现在以下几个方面。
- H.265/HEVC 采用了更多、更大尺寸的变换。由于H.265/HEVC主要面对的是高分辨率视频,与标清视频相比,高分辨率视频在相同大小的区域内包含了更多的像素,因此像素间的相关性变得更强,此时采用更大尺寸的变换能够提高压缩性能。H.265/HEVC 提供了最大为32x32的4种大小的整数DCT,并且允许根据视频内容自适应地选择变换尺寸。
- H.265/HEVC中的整数DCT更接近于传统的浮点DCT。H.264/AVC 中4x4整数 DCT矩阵在整数化时放大了2~3.16倍(1、3 行放大了2倍,2、4行放大了3.16倍),而H.265/HEVC 4x4整数 DCT矩阵在整数化时放大了128倍。因此H.265/HEVC 整数 DCT 矩阵保留了更多精度,更接近于浮点DCT,能够获得更好的性能。
- H.265/HEVC 不同大小的变换形式较为统一[例如,所有大小变换矩阵第一行(零频)元素都为64等]。这得益于在整数化 DCT矩阵时,不同大小的矩阵放大倍数不同,且满足一定规律。利用这一特征,可为不同大小的整数 DCT 设计出具有统一形式的快速蝶形算法。此外,与H.264/AVC 相比,H.265/HEVC各元素放大倍数相同,因此在量化时对所有元素的缩放倍数都相同:而H.264/AVC的量化过程需要根据不同系数的位置做不同程度的比例缩放。
二、离散正弦变换:
DST原理:
类似于前文的叙述,在信号分解过程中,若采用正弦函数作为基函数,则该分解称为正弦变换(SineTransform)。若输入信号是离散的,则称之为离散正弦变换(DiscreteSineTransform,DST)。与 DCT类似,也存在以下8种类型的 DST。
在上述8类DST中,前4类对应于偶数阶的实奇DFT,后4类对应于奇数阶的实奇 DFT。H.265/HEVC使用的是Ⅶ类DST,记为DST-ⅦI。其二维形式为:
H.265/HEVC中的整数DST:
H.265/HEVC标准规定,在帧内4x4式亮度分量残差编码中使用4x4 整数 DST,而在帧内其他模式、帧间所有模式,以及所有色差分量的残差编码中一律使用整数DCT。这主要是由于帧内预测利用周围已重构块边缘像素预测当前块的方法使得帧内预测残差具有如下特征:距离预测像素越远,预测残差幅度越大。而DST的基函数能够很好地适应这一特征。实验结果表明,使用4x4 整数 DST能使帧内编码性能提高0.8%左右,而编码复杂度基本保持不变 。
下面给出H.265/HEVC中4x4整数 DST矩阵的推导过程。二维4x4DST-Ⅶ公式为:
三、变换结构:
变换单元(TU):
变换单元(Transform Unit,TU)是H.265/HEVC中变换、量化与编码的基本单位。H.265/HEVC 突破了以往标准中对变换尺寸的限制,可支持 4x4、8x8、16x16和32x32 四种大小的TU。此外,H.265/HEVC 还定义了编码单元CU和预测单元PU,并规定CU可以以四叉树(Quad-Tree)的形式划分TU,可划分的层级由当前CU的大小与头信息中规定的最大和最小TU尺寸决定,并且在同一个CU中允许选择不同的组合。编码器可根据视频内容自适应地选择划分方式,例如,在平坦区域和内容缓慢变化的区域可以使用较大的TU,在纹理细节区域可选择较小的TU,具体来说,最优划分方式可用率失真优化(RDO)准则确定。图5.4 给出了一个 32x32 CU 划分为多层不同大小 TU 的四叉树结构。
H.265/HEVC标准突破了之前标准对预测块、变换块大小关系的限制。由于其PU和TU直接由CU划分得到,因此二者大小没有确定的关系。一个PU可能包含多个TU,一个TU也可能跨越多个PU,但二者大小都必须小于CU。需要注意的是,对于帧内编码,由于相邻PU之间存在依赖关系(已编码的PU须用于预测与之相邻的PU),因此一个PU可包含一个或多个 TU,但一个 TU 最多只能对应一个 PU。
相关语法语义:
- SPS:
log2_min_transform_block_size_minus2:该语法元素指定最小TU的大小。
log2_diff_max_min_transform_block_size:该语法元素表示最大 TU尺寸与最小 TU 尺寸的关系。
max_transform_hierarchy_depthinter:该语法元素指定帧间编码中最大 TU 划分深度。
max_transform hierarchy_depthintra:该语法元素指定帧内编码中最大 TU 划分深度。
- PPS:
transform_skip_enable_flag:H.265/HEVC 标准允许直接对预测残差进行量化、熵编码而不进行变换,该技术称为Transform skip。该语法元素表示是否使用该技术。
transquant_bypass_enable _flag:H.265/HEVC 允许对残差不进行变换,量化及环路滤波。该语法元素表示是否使用该技术。
CU层:
cu_transquant_bypass_flag:该语法元素指定当前CU是否使用变换、量化及环路滤波。
rqt_root_cbf:该语法元素表示当前CU中是否存在TU树形结构(即是否存在系数)。
TU层:
split_transformm_flag:该语法元素表示当前层TU 是否需要进行四叉树划分。若该语法元素值为1,则表示当前层TU需要分成4个相同大小的子 TU;若其值为0,则表示当前TU 不需要进一步划分,可直接进行解码。需要注意的是,当CU大小为64时,必须将其划分为4个TU,此时该语法元素不存在。
cbf_luma,cbf_cb,cbf_cr:这3个语法元素分别表示当前 Y、Cb、Cr三个通道是否存在非零系数。
transform_skip_fag:该语法元素表示当前TU的残差是否进行了变换(参见PPS中的transform skip_enable flag语法元素)。
四、哈达玛变换:
原理及特点:
沃尔什-哈达玛变换(Walsh-Hadamard Transform,WHT)是广义傅里叶变换的一种,其变换矩阵 是一个
的矩阵,称为哈达玛矩阵。
其推导定义为:
Hadamard变换及其矩阵有以下几个特性:
- Hadamard 矩阵元素都为土1,且其特征值也只包含士1。
- Hadamard 矩阵为正交、对称矩阵,相应的Hadamard 变换为正交变换。
- Hadamard 矩阵奇数行(列)偶对称,偶数行(列)奇对称。
- Hadamard 变换满足帕斯瓦尔(Parseval)定理(即变换前后能量守恒)。
与离散余弦变换相比,哈达玛变换仅含有加(减)法运算,而且可用递归形式快速实现;另外,其正向变换与反向变换具有相同的形式,因此其算法复杂度较低,且容易实现。
在上一代标准H.264/AVC中,哈达玛变换被用于亮度分量帧内16x16模式DC系数以及色度分量DC系数的变换,以达到进一步去除相关性的目的。编码器须将Hadamard 变换的结果经编码后写入码流传给解码器;同时,解码器也需要进行相应的逆过程。因此,H.264/AVC标准详细规定了这些步骤的实现方法以及相应的语法语义。
哈达玛变换的应用:
H.264/AVC标准规定了Hadamard变换的使用方法以及相对应的语法元素,而在新一代标准 H.265/HEVC中,由于熵编码是以 TU为单位的(一个 TU 仅包含一个 DC 系数),且较大 TU的使用同样具有去除相关性的作用,因此标准未使用 Hadamard 变换。
在图像、视频处理领域,Hadamard变换常用于计算残差信号的SATD。SATD(SumofAbsolute Transformed Difference)是指将残差信号进行 Hadamard 变换后再求各元素绝对值之和。设某残差信号方阵为X,则 SATD 为:
其中M为方阵的大小,H为归一化的MxM Hadamard矩阵。具体应用参见下例。
Hadamard变换的例子:
给定以下4x4残差矩阵X,分别对其做 Hadamard 变换以及DCT,求该残差的SAD和SATD,并与DCT系数绝对值之和做比较。
计算可得,残差SAD为114,SATD为98,所有DCT系数绝对值之和为96。观察可知,残差 SATD与其经 DCT后各系数绝对值之和十分接近,这说明SATD能在一定程度上反映残差在频域中的大小,且其性能接近于视频编码中实际使用的 DCT,相比之下SAD 仅能反映残差在空域上的大小。考虑到Hadamard变换复杂度远小于DCT,同样小于整数DCT,因此 SATD 广泛应用于视频编码中的快速模式选择。
与之前的标准相比,H.265/HEVC采用了更多的编码技术来提高压缩效率。例如在帧内编码中,H.265/HEVC规定了5种不同大小的帧内预测块,每种大小又包含 17~35种模式。若所有模式都使用式(5-7)来计算率失真代价,则其计算复杂度会非常高。
式中SSD(s,c)表示原始像素与重构像素误差的平方和,表示表示编码当前模式下所有信息(包括划分方式、预测式编号、残差系数等)所需要的比特数。为减小模式选择的复杂度,H.265/HEVC官方测试软件HM使用了一种更加简单的方法计算率失真代价,如式(5-8)所示:
式中,SATD(S,P)即为残差的 SATD,仅为编码当前模式所需的比特数。这种方法省去了 DCT、量化、反量化、反变换以及编码过程,极大地减小了复杂度。此外,为了控制编码效率的损失,HM首先使用式(5-8)从所有模式中预先选出少数几种可能最优的模式,再用式(5-7)从预选的几种模式中选择最优的模式。
HM 在帧间编码亚像素精度运动估计过程中也使用了SATD,如式(5-9)所示:
式中,SATD(S,p)是预测误差的 SATD,表示编码运动信息(如运动向量MV、参考图像等)所需的比特数。与整像素运动估计相比,亚像素运动估计各个搜索点匹配误差相差不会太大,此时需要考虑各个点对应残差在变换域的特征,而SATD恰好能够满足需求。因而,在亚像素精度运动估计时,采用SATD作为预测误差衡量准则能够使编码性能获得一定的提高。
参考资料:
《新一代高效视频编码 H.265/HEVC 原理、标准与实现》——万帅 杨付正 编著
相关文章:
音视频之H.265/HEVC变换编码
H.265/HEVC系列文章: 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 目录 一、离散余弦变换: DCT原理及特点: 一维DCT解析例子࿱…...
网工_FTP协议
2025.04.18:网工老姜&小猿网学习笔记 第27节 FTP协议 7.1 FTP概述7.2 FTP工作原理7.2.1 FTP主动模式7.2.2 FTP被动模式 7.3 FTP客户端常用命令7.4 本章小结 7.1 FTP概述 文件传输协议file transfer protocol 常见用途是从FTP服务器批量下载文件,另一…...
Vue2+Vue3 130~180集学习笔记
Vue2Vue3 130~180集(Vue3)学习笔记 一、create-vue搭建vue3项目 create-vue是vue官方新的脚手架工具,底层切换到了vite 步骤: 查看环境条件 node -v版本需要在16.0及以上创建一个vue应用 npm init vuelatest 这一指令会安装并执…...
前端融合图片mask
之前实现了tif文件的融合,现在实现图片的融合,效果如下 第一张是融合右边两张图的结果 我的思路是: 初始使用canvas加载原图,此时未显示标注点击显示标注后,将原图和mask图传给workerworker接受数据后,转…...
什么是单元测试的“覆盖率”
1. 先搞清楚“覆盖率”是啥? 打个比方,你写完作业(代码),老师(测试)要检查是不是每道题都做对了。覆盖率就是说老师检查了多少题。比如: 行覆盖率:老师看了你作…...
SpringAI入门:对话机器人
SpringAI入门:对话机器人 1.引入依赖 创建一个新的SpringBoot工程,勾选Web、MySQL驱动、Ollama: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xm…...
[Java · 初窥门径] Java 语言初识
🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java 学习手册 0x01:Java 编程语言简介 Java 是一种高级计算机编程语言,它是由 Sun Microsystems 公司(已被 Oracle 公司收购)于 1995 年 5 …...
大语言模型智能体:安全挑战与应对之道
在当今科技飞速发展的时代,大语言模型驱动的智能体正逐渐融入我们生活和工作的方方面面,给我们带来了诸多便利。但与此同时,它们的安全问题也引起了广泛的关注。今天,咱们就一起来深入了解一下可信大语言模型智能体所面临的安全挑…...
IHC肿瘤标志物 | 常见乳腺癌诊断——助力守护生命之花
乳腺癌作为一种常见的恶性肿瘤,严重威胁着女性健康。然而,随着医学技术的不断发展,我们有了更为精准和有效的检测方法,为及早发现和治疗乳腺癌提供了强有力的支持。 在这篇文章中,我们将深入了解乳腺癌的IHC检测技术&a…...
利用deepseek+Mermaid画流程图
你是一个产品经理,请绘制一个流程图,要求生成符合Mermaid语法的代码,要求如下: 用户下载文件、上传文件、删除文件的流程过程符合安全规范细节具体到每一步要做什么 graph LRclassDef startend fill:#F5EBFF,stroke:#BE8FED,str…...
Vue3 实战:打造多功能旅游攻略选项卡页面
在旅游类应用开发中,为用户提供全面、直观的信息展示界面至关重要。本文将分享如何基于 Vue3 Axios 技术栈,实现一个包含攻略、游记、问答三大板块的旅游攻略选项卡页面,从样式设计到交互逻辑,带你深入了解整个开发过程。 项目背…...
如何提高单元测试的覆盖率
一、定位未覆盖的代码 利用 IDEA 的覆盖率工具: 右键测试类 → Run with Coverage,或使用 AltShiftF10(Windows)打开运行菜单选择覆盖率。查看高亮标记: 绿色:已覆盖代码行。红色&#x…...
水位传感器详解(STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 water.h文件 water.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 Water Sensor水位传感器是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列…...
linux服务器命令行获取nvidia显卡SN的方法
机房需要变更机器的GPU显卡配置,入库、出库几块显卡,库管让我去获取显卡序列号。 去现场拆机器的事情毕竟很麻烦,而且也没干过拆装服务器,即使拆下来显卡也不一定找到SN。 于是乎搜索:命令行怎么获取linux服务器上的…...
大模型微服务架构模块实现方案,基于LLaMA Factory和Nebius Cloud实现模型精调的标准流程及代码
以下是基于LLaMA Factory和Nebius Cloud实现模型精调的标准流程及代码示例,结合最新技术动态和行业实践整理: 一、LLaMA Factory本地部署方案 1. 环境配置 # 创建Python环境并安装依赖 conda create -n llama_factory python3.10 conda activate llam…...
每天学一个 Linux 命令(20):find
可访问网站查看,视觉品味拉满: http://www.616vip.cn/20/index.html find 是 Linux 系统中最强大的文件搜索工具之一,支持按名称、类型、时间、大小、权限等多种条件查找文件,并支持对搜索结果执行操作(如删除、复制、执行命令等)。掌握 find 可大幅提升文件管理效率…...
Kubernetes Pod 调度策略:从基础到进阶
文章目录 环境Kubernetes 部署Kubernetes Pod 调度策略Kubernetes Pod 调度策略对照表调度流程经历阶段案例展示生成yaml文件默认调度节点选择器为节点添加标签编写 Deployment 配置文件应用资源并查看调度结果 Node Affinity(节点亲和性)为节点添加标签…...
4.18学习总结
完成一道算法题 学习了序列化 敲代码卡bug了...
用于数学定理和逻辑推理的符号系统
当前用于数学定理和逻辑推理的前沿符号系统主要基于依赖类型论(Dependent Type Theory),其中Lean 4和**Metamath Zero (MM0)**是最具代表性的新兴系统。以下从技术特性、使用方法和应用实例三个维度展开说明: 一、前沿符号系统解…...
HTTP:九.WEB机器人
概念 Web机器人是能够在无需人类干预的情况下自动进行一系列Web事务处理的软件程序。人们根据这些机器人探查web站点的方式,形象的给它们取了一个饱含特色的名字,比如“爬虫”、“蜘蛛”、“蠕虫”以及“机器人”等!爬虫概述 网络爬虫(英语:web crawler),也叫网络蜘蛛(…...
代码学习总结(五)
代码学习总结(五) 这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C++ 语言,包括题目内容,代码实现,思路,并会注明题目难度,保证代码运行结果 1 小红的好数 简单 非退化三角形 快速匹配 小红定义一个数对 { x , y } \{x…...
在 Vue 3 项目中引入 js-cookie 库
1. 安装 js-cookie 你可以通过 npm 或者 yarn 来安装 js-cookie: npm install js-cookie # 或者 yarn add js-cookie2. 在组件里引入并使用 js-cookie 以下给出两种使用方式: 全局引入 在 main.js 中全局引入 js-cookie,这样在所有组件里…...
HarmonyOs学习 环境配置后 实验1:创建项目Hello World
HarmonyOS开发入门:环境配置与Hello World实验 实验目标 掌握HarmonyOS开发环境配置,创建首个HarmonyOS应用并实现"Hello World"界面展示 实验准备 已安装DevEco Studio开发环境已配置HarmonyOS开发依赖项熟悉基本TypeScript/ArkTS语法&am…...
Spark on K8s 在 vivo 大数据平台的混部实战与优化
一、Spark on K8s 简介 (一)定义与架构 Spark on K8s 是一种将 Spark 运行在 Kubernetes(K8s)集群上的架构,由 K8s 直接创建 Driver 和 Executor 的 Pod 来运行 Spark 作业。其架构如下。 Driver Pod:相当于 Spark 集群中的 Driver,负责作业的调度和管理,它会根据作业…...
《软件设计师》复习笔记(13)——结构化开发方法
目录 1. 结构化开发方法 1.1 系统分析过程 1.2 系统设计基本原理 (1)内聚性(模块内部关联程度) (2)耦合性(模块间依赖程度) 真题示例: 1.3 系统总体结构设计&…...
Android创建测试配置和生产配置
Android测试与生产环境配置指南 在Android开发中,创建不同的构建配置来适应测试和生产环境是至关重要的。这样的配置能让我们在不同的开发阶段有效管理代码、资源和环境变量。本文将详细介绍如何在Android中创建和管理测试配置以及生产配置的整个过程。 环境准备 …...
DBeaver连接hive
DBeaver是一个非常好用的数据库管理工具,支持多种不同的数据库类型。 dbeaver 要连接hive时,数据库驱动是无法下载,但在hive 的安装配置包中,有一个目录:jdbc里面有一个专门提供外部程序连接hive的jar。将这个jar下载…...
数据结构初阶:二叉树(二)
本篇博客主要讲解二叉树---堆的相关知识。 1.实现顺序结构二叉树 一般堆使用顺序结构的数组来存储数据,堆是一种特殊的二叉树,具有二叉树的特性的同时,还具备其他的特性。 1.1 堆的概念和结构 堆具有以下性质: 堆中某个结点的值…...
React 列表渲染基础示例
React 中最常见的一个需求就是「把一组数据渲染成一组 DOM 元素」,比如一个列表。下面是我写的一个最小示例,目的是搞清楚它到底是怎么工作的。 示例代码 // 定义一个静态数组,模拟后续要渲染的数据源 // 每个对象代表一个前端框架…...
android PackageName ClassName
目录 系统应用: 设置 蓝牙 时钟 计算机 录音机 图库 视频 文件管理 FM 日历 谷歌浏览器 谷歌商店 热门商店 国外应用: amazon spotify deezer pandora audible applemusic omnia mxtech youtubemusic facebook familylink tidal tiktok kindle 系统应用: 设置 …...
万物对接大模型:【爆火】MCP原理与使用指南
###原文链接 OpenAI、谷歌、微软、阿里云、腾讯云、百度等国内外各大厂商都陆续宣布支持MCP服务。MCP是什么,为什么能获得高度的关注? MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司(核心产品是Claude大模型)推出的一种开源协议…...
SAP系统中MD01与MD02区别
知识点普及-MD01与MD02区别 1、从日常业务中,我们都容易知道MD01是运行全部物料,MD02是运行单个物料 2、在做配置测试中,也出现过MD02可以跑出物料,但是MD01跑不出的情况。 3、MD01与MD02的差异: 3.1、只要在物料主数…...
python——字符串使用
目录 1、字符串表示 2、转义字符 (1)将一些具有特殊含义的字符,标识成普通的字符(\) (2)特殊的控制符 (3)(\)还可以表示python中续行符 3、…...
嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc
嵌入式TOOLchain工具 梳理 简介 本文总结和梳理一下一些toolchain的规则和原理,方便后续跨平台的时候,给大家使用toolchain做一个参考。 解释如何理解arm-none-eabi-gcc等含义,以及如何一看就知道该用什么编译器。 当然如果有哪里写的不是…...
团体程序设计天梯赛PTA-SHU冲刺赛4. L22-L32
这是4.18 SHU备赛天梯赛的最后一场冲刺赛 10.病毒溯源 1.本题PTA中拓栈后会MTL,不拓栈会报非零返回 所以本题最好用栈模拟递归过程 2.源头得是入度为0的,也就是没有节点指向它 所以得设置inn是否有指向该节点 3.这题用dfs(用bfs的话不同…...
【数据结构与算法】——插入排序
概要 本文将介绍插入排序方法——直接插入、希尔排序 想了解数据结构其他内容,本人主页 恋风诗 获取源码,gitte仓库:mozhengy 正文 1.排序的分类 目前将主要介绍下面几种排序: 后续学习更多内容后会及时更新 2、插入排序 2…...
手撕STL——vector
目录 引言 1,了解 STL 中的 vector 2,先来一个简易版跑起来 2_1,构造函数 2_2,扩容reserve() 2_3,push_back() 2_4,pop_back() …...
新书速览|DeepSeek移动端AI应用开发:基于Android与iOS
《DeepSeek移动端AI应用开发:基于Android与iOS》 1 本书内容 《DeepSeek移动端AI应用开发:基于Android与iOS》深入剖析了DeepSeek平台的架构原理、API调用及开发实践等核心内容,助力读者在Android与iOS移动端高效集成DeepSeek API,打造出契…...
详解STM32时基单元中参数 TIM_ClockDivision 的含义
在 STM32 定时器时基单元配置中,TIM_TimeBaseInitStruct->TIM_ClockDivision 用于设置 定时器时钟的分频系数,主要影响 输入捕获滤波器 和 输出比较同步信号 的时钟分割。以下是其核心作用、参数含义及应用场景的详细解析: 一、核心作用&…...
黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课
课程大小:60.2G 课程下载:https://download.csdn.net/download/m0_66047725/90615581 更多资源下载:关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …...
【Win】 cmd 执行curl命令时,输出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 请为以下参数提供值: Uri: ’ ?
1.原因: 有一个名为 Invoke-WebRequest 的 CmdLet,其别名为 curl。因此,当您执行此命令时,它会尝试使用 Invoke-WebRequest,而不是使用 curl。 2.解决办法 在cmd中输入如下命令删除这个curl别名: Remov…...
【k8s系列4】工具介绍
1、虚拟机软件 vmware workstation 2、shell 软件 MobaXterm 3、centos7.9 下载地址 (https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.374bf5adOaiFPW) 4、上网软件...
设计模式 --- 装饰器模式
装饰模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 优点: 1.灵…...
docker.desktop下安装普罗米修斯prometheus、grafana并看服务器信息
目标 在docker.desktop下先安装这三种组件,然后显示当前服务的CPU等指标。各种坑已踩,用的是当前时间最新的镜像 核心关系概述 组件角色依赖关系Prometheus开源监控系统,负责 数据采集、存储、查询及告警。依赖 Node-Exporter 提供的指标数据。Node-Exporter专用的 数据采集…...
学习设计模式《二》——外观模式
一、基础概念 1.1、外观模式的简介 外观模式的本质是【封装交互、简化调用】; 外观模式的说明:就是通过引入一个外观类,在这个类里面定义客户端想要的简单方法,然后在这些方法里面实现;由外观类再去分别调用内部的多个…...
python中,处理多分类时,模型之间的参数设置
在Python的机器学习库中,处理多分类问题时,不同的模型可能会有不同的参数设置来适应多分类场景。这里列举几个常见模型及相关的多分类参数: 1. Logistic Regression (逻辑回归) 在Scikit-Learn库中,逻辑回归模型可以通过设置mul…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)真题
青少年软件编程(Python)等级考试试卷(四级) 分数:100 题数:38 答案解析:https://blog.csdn.net/qq_33897084/article/details/147341407 一、单选题(共25题,共50分) 1. 下列程序段…...
蓝桥杯12. 日期问题
日期问题 原题目链接 题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。 小明知道这些日期都在 1960 年 1 月 1 日 至 2059 年 12 月 31 日 之间。 令小明头疼的是,这些日期采用的格式非常不统一: 有的采用 年/月/日有的采用 月…...
【MATLAB代码例程】AOA与TOA结合的高精度平面地位,适用于四个基站的情况,附完整的代码
本代码实现了一种基于到达角(AOA) 和到达时间(TOA) 的混合定位算法,适用于二维平面内移动或静止目标的定位。通过4个基站的协同测量,结合最小二乘法和几何解算,能够有效估计目标位置,并支持噪声模拟、误差分析和可视化输出。适用于室内定位、无人机导航、工业监测等场景…...
ARINC818协议(五)
1.R_CTL,设置固定的0x44即可 2.Dest_ID:目的地D_ID,如果不需要目的地址,就设置为0;ADVB协议支持 多个视频目的地址,广播通信; 3.cs_ctl在FC-AV上不用 4.source_ID:S_ID [23:0]包含源实体的端口的地址标识;不用就设置为0. ADVB允许…...