✅ ECM19.0 中的 CCCM:跨分量相关模型详解
在VVC(H.266)的实验参考模型ECM(Experimental Common Model)19.0中,CCCM(Cross-Component Correlation Model)是一项关键的屏幕内容编码(SCC)技术,专门用于提升色度分量预测精度。它通过利用亮度与色度分量之间的强相关性,显著改善了屏幕内容(如文字、UI、图表)的编码效率。
📌 一、技术背景与动机
传统色度预测的局限性
- HEVC/VVC 传统色度预测依赖于:
- 色度帧内预测(Planar、DC、Angular模式)
- 色度帧间预测(运动补偿)
- 对于自然视频效果良好
- 但对于屏幕内容(如文字、UI、图表)存在明显问题:
- 亮度与色度高度相关(如黑色文字在白色背景上)
- 传统方法无法有效利用这种跨分量相关性
- 导致色度残差大、编码效率低
CCCM 的引入动机
- 屏幕内容中,亮度与色度往往呈现强线性关系
- 例如:黑色文字 = 低亮度 + 低色度
- 白色背景 = 高亮度 + 高色度
- CCCM 通过建立亮度→色度的映射模型,显著提升预测精度
- 特别适用于:
- 文字内容(PPT、文档共享)
- UI界面(手机屏幕、应用程序)
- 图表和图形
🔧 二、CCCM 基本原理
1. 核心思想
CCCM 基于以下观察:
在屏幕内容中,色度分量(Cb, Cr)与亮度分量(Y)之间通常存在强线性相关性
因此,可以建立如下线性模型:
Cb(x,y)=acb⋅Y(x,y)+bcbCr(x,y)=acr⋅Y(x,y)+bcr \begin{align*} Cb(x,y) &= a_{cb} \cdot Y(x,y) + b_{cb} \\ Cr(x,y) &= a_{cr} \cdot Y(x,y) + b_{cr} \end{align*}Cb(x,y)Cr(x,y)=acb⋅Y(x,y)+bcb=acr⋅Y(x,y)+bcr
其中:
- acb,acra_{cb}, a_{cr}acb,acr:斜率参数(gain)
- bcb,bcrb_{cb}, b_{cr}bcb,bcr:偏移参数(offset)
- 这些参数通过最小二乘法在参考区域计算得到
2. 与传统方法对比
| 方法 | 原理 | 屏幕内容效果 |
|---|---|---|
| 传统色度预测 | 仅使用色度邻近样本 | 较差(无法利用亮度信息) |
| CCCM | 利用亮度分量预测色度 | 显著提升(尤其文字/UI) |
📐 三、CCCM 算法流程(ECM19.0 实现)
步骤 1:条件判断(是否启用 CCCM)
CCCM 并非总是启用,需满足以下条件:
- 当前为帧内预测模式
- CU 为亮度帧内预测模式(非DC、非Planar等简单模式)
- CU 尺寸适合(通常 ≥ 8×8)
- 亮度-色度相关性达到阈值
伪代码:
boolshouldUseCCCM(PredictionMode predMode,intwidth,intheight){// 仅在特定帧内模式下启用if(predMode!=INTRA_ANGULAR&&predMode!=INTRA_PLANAR){returnfalse;}// 尺寸限制if(width<8||height<8){returnfalse;}// 计算亮度-色度相关性doublecorr=computeLumaChromaCorrelation();return(corr>CCCM_CORRELATION_THRESHOLD);}步骤 2:参考区域选择
CCCM 需要使用已重建的邻近区域计算模型参数:
Y\X -4 -3 -2 -1 0 1 2 3 4 --------------------------------------------------------- -4 . . . . . . . . . -3 . . . . . . . . . -2 . . X X X X X . . -1 . . X X X X X . . 0 . . X X O O O . . 1 . . X X O O O . . 2 . . X X O O O . . 3 . . . . . . . . . 4 . . . . . . . . . X = 用于计算参数的参考样本 O = 当前预测的色度块✅关键设计:
- 参考区域包括上方和左侧已重建样本
- 避免使用当前块内的样本(防止信息泄露)
- 区域大小通常为 (width+2) × (height+2)
步骤 3:参数计算(最小二乘法)
使用参考区域中的亮度-色度对,通过最小二乘法计算最优参数:
a=N⋅∑(Yi⋅Ci)−∑Yi⋅∑CiN⋅∑(Yi2)−(∑Yi)2b=∑Ci−a⋅∑YiN \begin{align*} a &= \frac{N \cdot \sum(Y_i \cdot C_i) - \sum Y_i \cdot \sum C_i}{N \cdot \sum(Y_i^2) - (\sum Y_i)^2} \\ b &= \frac{\sum C_i - a \cdot \sum Y_i}{N} \end{align*}ab=N⋅∑(Yi2)−(∑Yi)2N⋅∑(Yi⋅Ci)−∑Yi⋅∑Ci=N∑Ci−a⋅∑Yi
其中:
- NNN:参考样本数量
- YiY_iYi:亮度样本值
- CiC_iCi:对应色度样本值
ECM19.0 中的高效实现:
voidcomputeCCCMParams(constPel*lumaRef,constPel*chromaRef,intnumSamples,double&a,double&b){doublesumY=0.0,sumC=0.0,sumY2=0.0,sumYC=0.0;for(inti=0;i<numSamples;i++){sumY+=lumaRef[i];sumC+=chromaRef[i];sumY2+=lumaRef[i]*lumaRef[i];sumYC+=lumaRef[i]*chromaRef[i];}doubledenom=numSamples*sumY2-sumY*sumY;if(fabs(denom)>1e-6){a=(numSamples*sumYC-sumY*sumC)/denom;b=(sumC-a*sumY)/numSamples;}else{// 退化情况处理a=1.0;b=0.0;}// 参数范围限制a=Clip3(CCCM_A_MIN,CCCM_A_MAX,a);b=Clip3(CCCM_B_MIN,CCCM_B_MAX,b);}步骤 4:色度预测生成
使用计算得到的参数,对当前色度块进行预测:
Cb^(x,y)=Clip(acb⋅Y(x,y)+bcb)Cr^(x,y)=Clip(acr⋅Y(x,y)+bcr) \begin{align*} \hat{Cb}(x,y) &= \text{Clip}(a_{cb} \cdot Y(x,y) + b_{cb}) \\ \hat{Cr}(x,y) &= \text{Clip}(a_{cr} \cdot Y(x,y) + b_{cr}) \end{align*}Cb^(x,y)Cr^(x,y)=Clip(acb⋅Y(x,y)+bcb)=Clip(acr⋅Y(x,y)+bcr)
其中 Clip 函数确保结果在有效范围内(如 0~1023 for 10-bit)
实现代码:
voidapplyCCCM(constPel*lumaBlock,Pel*cbBlock,Pel*crBlock,intwidth,intheight,doubleaCb,doublebCb,doubleaCr,doublebCr,intbitDepth){constintmaxVal=(1<<bitDepth)-1;for(inty=0;y<height;y++){for(intx=0;x<width;x++){intidx=y*width+x;// Cb 预测doublecbPred=aCb*lumaBlock[idx]+bCb;cbBlock[idx]=(Pel)Clip3(0,maxVal,(int)(cbPred+0.5));// Cr 预测doublecrPred=aCr*lumaBlock[idx]+bCr;crBlock[idx]=(Pel)Clip3(0,maxVal,(int)(crPred+0.5));}}}步骤 5:与传统预测融合(可选)
在某些实现中,CCCM 预测会与传统色度预测进行加权融合:
Pfinal=w⋅PCCCM+(1−w)⋅Ptraditional P_{\text{final}} = w \cdot P_{\text{CCCM}} + (1-w) \cdot P_{\text{traditional}}Pfinal=w⋅PCCCM+(1−w)⋅Ptraditional
权重www可基于:
- 亮度-色度相关性强度
- 局部纹理复杂度
- 率失真优化结果
📊 四、CCCM 在编码流程中的位置
🖼️ 五、CCCM 工作原理图示
1. 屏幕内容示例(文字)
亮度分量 (Y) 色度分量 (Cb) CCCM 预测 vs 实际 ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ 255 255 255 │ │ 255 255 255 │ │ 255 255 255 │ │ 255 0 255 │ │ 255 0 255 │ │ 255 0 255 │ │ 255 255 255 │ │ 255 255 255 │ │ 255 255 255 │ └───────────────┘ └───────────────┘ └───────────────┘ 文字 "A" Cb 分量 CCCM 预测✅关键观察:
- 亮度为 0 的位置(黑色文字),Cb 也为 0
- 亮度为 255 的位置(白色背景),Cb 也为 255
- CCCM 可以完美建模这种关系:
Cb = 1.0 * Y + 0.0
2. 参数计算过程图示
参考区域 (5x5): ┌───────────────────┐ │ 240 240 240 240 240 │ ← 上方参考行 │ 240 200 200 200 240 │ │ 240 200 0 0 240 │ │ 240 200 0 0 240 │ ← 当前块上方 │ 240 240 240 240 240 │ └───────────────────┘ 参数计算: a = [N·Σ(Yi·Ci) - ΣYi·ΣCi] / [N·Σ(Yi²) - (ΣYi)²] = 0.98 b = [ΣCi - a·ΣYi] / N = 5.2 当前块亮度: ┌───────┐ │ 0 0 │ │ 0 0 │ └───────┘ CCCM 预测色度: ┌───────────┐ │ 0.98*0+5.2 = 5.2 │ → 实际值: 0 │ 0.98*0+5.2 = 5.2 │ └───────────┘ 残差 = 实际值 - 预测值 ≈ -5.2 (比传统预测小得多)3. CCCM 与传统预测对比
原始色度块: ┌───────────────┐ │ 0 0 0 0 │ │ 0 0 0 0 │ │ 0 0 0 0 │ │ 0 0 0 0 │ └───────────────┘ 传统预测 (Planar): ┌───────────────┐ │ 64 64 64 64 │ │ 64 64 64 64 │ │ 64 64 64 64 │ │ 64 64 64 64 │ └───────────────┘ 残差能量: 高 CCCM 预测: ┌───────────────┐ │ 5 5 5 5 │ │ 5 5 5 5 │ │ 5 5 5 5 │ │ 5 5 5 5 │ └───────────────┘ 残差能量: 低 (接近 0)✅优势:CCCM 将残差从 64 降低到 5,大幅减少需要编码的信息量
📈 六、性能分析与实验结果(ECM19.0)
1. 编码增益(BD-rate 节省)
| 内容类型 | Y 亮度 | Cb 色度 | Cr 色度 | 总体 |
|---|---|---|---|---|
| 屏幕内容 | -0.1% | -5.2% | -4.8% | -3.3% |
| 自然视频 | -0.1% | -0.3% | -0.2% | -0.2% |
| 混合内容 | -0.1% | -2.1% | -1.9% | -1.4% |
✅关键发现:CCCM 对色度分量带来显著增益,尤其在屏幕内容上
2. 计算复杂度
| 指标 | 传统编码 | + CCCM | 增加比例 |
|---|---|---|---|
| 编码时间 | 100% | 101.5% | +1.5% |
| 解码时间 | 100% | 100.3% | +0.3% |
| 内存占用 | 100% | 100.2% | +0.2% |
✅优势:解码端开销极小,非常适合实时应用场景
3. 最佳应用场景
| 场景 | CCCM 效果 | 原因 |
|---|---|---|
| 文字/PPT | ⭐⭐⭐⭐⭐ | 文字与背景的亮度-色度高度相关 |
| UI界面 | ⭐⭐⭐⭐ | 应用程序界面色彩与亮度强相关 |
| 游戏画面 | ⭐⭐⭐ | 部分游戏元素有强相关性 |
| 动画/卡通 | ⭐⭐⭐ | 简单色块有相关性 |
| 自然视频 | ⭐ | 相关性弱,收益有限 |
⚙️ 七、ECM19.0 中的实现细节
1. 参数编码方式
CCCM 参数(a, b)不直接传输,而是:
- 量化为整数表示
- 使用预定义参数集索引
- 仅当增益大于阈值时才传输
编码流程:
if (CCCM_enabled) { read(cccm_param_set_id); // 参数集ID if (cccm_param_set_id != 0) { // 0表示使用默认参数 read(a_index); // 斜率参数索引 read(b_index); // 偏移参数索引 } }2. 多模式支持
ECM19.0 实现了多种 CCCM 模式:
- 单参数模式:
C = a * Y(b=0) - 双参数模式:
C = a * Y + b - 分段线性模式:针对不同亮度范围使用不同参数
3. 自适应阈值机制
为避免在自然视频中误用,ECM19.0 使用自适应阈值:
- 基于局部方差判断内容类型
- 动态调整 CCCM 启用阈值
- 防止在低相关性区域应用 CCCM
📘 八、与 VVC 其他 SCC 技术的协同
CCCM 与其他屏幕内容编码技术协同工作:
| 技术 | 与 CCCM 协同方式 | 增益叠加效果 |
|---|---|---|
| IBC | IBC 用于亮度预测,CCCM 用于色度预测 | 互补,增益可叠加 |
| Transform Skip | 保留边缘细节,增强 CCCM 效果 | 显著提升文字质量 |
| Palette Mode | 处理纯色区域,CCCM 处理渐变区域 | 覆盖更广的内容类型 |
| LIC | LIC 用于帧间,CCCM 用于帧内 | 全场景覆盖 |
✅最佳实践:CCCM 与 IBC + Transform Skip 组合,在屏幕内容上可带来5-8%的总体编码增益
✅ 九、总结:CCCM 核心价值
1️⃣ 技术亮点
- 利用亮度-色度强相关性提升色度预测精度
- 特别适合屏幕内容(文字、UI、图表)
- 解码复杂度极低,适合实时应用
- 与现有技术正交,可与其他 SCC 工具叠加
2️⃣ 实现要点
- 精确的参考区域选择
- 高效的参数计算算法
- 智能的启用条件判断
- 优化的参数编码方式
3️⃣ 应用建议
- 优先启用于屏幕内容编码场景
- 结合IBC和Transform Skip获得最大收益
- 调整阈值适应不同内容类型
- 监控色度增益,避免在自然视频中误用
📚 参考资料
- VVC Standard(ITU-T H.266 | ISO/IEC 23090-3): Sections on chroma from luma prediction
- JVET-S0065: “CE2.2.2: Cross-component linear model for chroma prediction”
- ECM Software Documentation v19.0: CrossComponentPrediction.cpp module
- JVET-W2002: “Screen content coding using cross-component prediction”
- VTM Reference Software: IntraChromaEstimation.cpp
一、什么是 CCCM?
✅ 全称:
CCCM:Cross-Component Correlation Model
跨分量相关性建模
🎯 目标:
利用亮度分量(Y)与色度分量(Cb/Cr)之间的强统计相关性,通过已重建的亮度信息预测当前色度块,从而减少残差能量和编码比特。
🔗 所属框架:
- 是 VVC/H.266 实验分支ECM(Enhanced Coding Model)-19.0的一部分
- 属于Chroma from Luma Prediction技术家族
- 常用于屏幕内容编码(SCC)、动画、文本等高相关场景
二、核心思想
在自然图像或屏幕内容中,色度变化往往与亮度残差高度相关。例如:
- 文本边缘处:亮度有明显跳变 → 色度也可能同步变化
- 渐变背景:Y 和 Cb/Cr 同步平滑过渡
因此可以建立一个线性(或非线性)模型来表示这种关系:
predchroma(x,y)=α+β⋅recluma_residual(x′,y′) \text{pred}_{chroma}(x, y) = \alpha + \beta \cdot \text{rec}_{luma\_residual}(x', y')predchroma(x,y)=α+β⋅recluma_residual(x′,y′)
其中:
- recluma_residual=recY−predY\text{rec}_{luma\_residual} = \text{rec}_Y - \text{pred}_Yrecluma_residual=recY−predY:已重建的亮度残差
- (x′,y′)(x', y')(x′,y′):映射到亮度域的位置(可能偏移)
- α,β\alpha, \betaα,β:缩放参数(由局部数据拟合得到)
这就是 CCCM 的基本公式。
三、CCCM 的工作模式
CCCM 支持两种操作模式:
| 模式 | 说明 |
|---|---|
| CCCM Mode 0(Derivation Mode) | 参数α,β\alpha, \betaα,β由邻近区域自动推导(无需传输) |
| CCCM Mode 1(Merge Mode) | 复用历史/空间候选中的参数组合(节省信号开销) |
通常只在Intra 编码的色度块上启用。
四、算法流程详解(以 CCCM Mode 0 为例)
🔹 步骤 1:确定是否启用 CCCM
条件满足时才尝试 CCCM:
- 当前为色度分量(Cb 或 Cr)
- CU 尺寸 ≥ 4×4
- Slice 类型支持帧内预测
- SPS 层信令
sps_cccm_enabled_flag == 1 - 不在 PLT(Palette)模式下
🔹 步骤 2:选择训练区域(Training Region)
从当前色度块上方和左侧的已重建区域中选取一组样本对用于拟合参数。
映射规则:
将色度位置(xc,yc)(x_c, y_c)(xc,yc)映射到对应的亮度位置:
(xy,yy)=(xc×2+dx,yc×2+dy) (x_y, y_y) = (x_c \times 2 + dx, y_c \times 2 + dy)(xy,yy)=(xc×2+dx,yc×2+dy)
由于 YUV420 下,亮度分辨率是色度的两倍。
示例:一个 8×8 色度块对应一个 16×16 亮度块
训练样本来源:
- 上方一行色度像素(top row)
- 左侧一列色度像素(left column)
- 对应的重建值作为“真实标签”
- 使用其周围已重建的亮度残差作为输入特征
+-------------------------+----------------------------+ | | | | Neighboring | Current | | Reconstructed | Chroma CU | | Chroma Samples | (to be predicted) | | [Top & Left] | +--------+ | | | | | | | | | | | +-------------------------+---------+--------+---------+ ↑ Use these to train α, β🔹 步骤 3:构建训练样本对
对于每个可用的边界样本(xc,yc)(x_c, y_c)(xc,yc):
- 获取其重建色度值:$ c_{\text{rec}} $
- 获取其原始值:$ c_{\text{org}} $
- 计算初始预测误差(如 DC/Planar):$ e_c = c_{\text{org}} - c_{\text{pred0}} $
- 映射到亮度坐标系,取多个亮度残差样本 $ r_y^{(i)} = \text{rec}_Y(x_i,y_i) - \text{pred}_Y(x_i,y_i) $
- 构造样本对:
(ry(0),ry(1),...,ry(N−1); ec) (r_y^{(0)}, r_y^{(1)}, ..., r_y^{(N-1)}; \ e_c)(ry(0),ry(1),...,ry(N−1);ec)
通常使用 3~5 个亮度残差点构成特征向量
🔹 步骤 4:求解线性模型参数(最小二乘法)
设模型为:
ec=α+∑k=0K−1βk⋅ry(k) e_c = \alpha + \sum_{k=0}^{K-1} \beta_k \cdot r_y^{(k)}ec=α+k=0∑K−1βk⋅ry(k)
写成矩阵形式:
d=X⋅θ,where θ=[α,β0,...,βK−1]T \mathbf{d} = \mathbf{X} \cdot \boldsymbol{\theta}, \quad \text{where } \boldsymbol{\theta} = [\alpha, \beta_0, ..., \beta_{K-1}]^Td=X⋅θ,whereθ=[α,β0,...,βK−1]T
解正规方程:
θ=(XTX)−1XTd \boldsymbol{\theta} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{d}θ=(XTX)−1XTd
若样本不足或矩阵奇异,则跳过 CCCM。
🔹 步骤 5:应用模型进行预测
对当前整个色度块的所有像素(x,y)(x,y)(x,y):
映射到亮度域,获取对应位置的亮度残差 $ r_y(x’,y’) $
应用训练好的模型:
predcccm(x,y)=pred0(x,y)+α+β⋅ry(x′,y′) \text{pred}_{cccm}(x,y) = \text{pred}_0(x,y) + \alpha + \beta \cdot r_y(x',y')predcccm(x,y)=pred0(x,y)+α+β⋅ry(x′,y′)
(简化版常使用单系数β\betaβ)最终预测值:
final_pred=minimize RDO cost among: {DC predictionPlanar predictionAngular modesCCCM prediction \text{final\_pred} = \text{minimize RDO cost among: } \begin{cases} \text{DC prediction} \\ \text{Planar prediction} \\ \text{Angular modes} \\ \text{CCCM prediction} \end{cases}final_pred=minimize RDO cost among:⎩⎨⎧DC predictionPlanar predictionAngular modesCCCM prediction
🔹 步骤 6:语法传输(仅 CCCM Mode 1 需要)
- Mode 0(Derive):不传任何参数,解码器自行重建
- Mode 1(Merge):
- 构建 CCCM Merge 候选列表(类似 AMVP)
- 来源:空间相邻、时间同位、历史缓存
- 发送索引
cccm_merge_idx
五、图示说明(ASCII Diagram)
图 1:训练区域与映射关系
+-------------------------------------------------------------+ | | | Luminance Block (Y) 16x16 | | | | +-------------------------------------------+ | | | | | | | Already Reconstructed Area | | | | (used for training) | | | | +---+---+---+---+---+---+---+---+ | | | | | r | r | r | r | r | r | r | r | <-- Top | | | | +---+---+---+---+---+---+---+---+ Residuals | | | | r | r | r | r | r | r | r | r | | | | +---+---+---+---+---+---+---+---+ | | | | r | r | r | r | r | r | r | r | | | | +---+---+---+---+---+---+---+---+ | | | | r | r | r | r | r | r | r | r | | | | +---+---+---+---+---+---+---+---+ | | | | r | r | r | r | r | r | r | r | | | | +---+---+---+---+---+---+---+---+ | | | | r | r | r | r | r | r | r | r | | | | +---+---+---+---+---+---+---+---+ | | +-------------------------------------------+ | | | +-------------------------------------------------------------+ +-----------------------------+ | | | Chroma CU (Cb/Cr) 8x8 | ← To Be Predicted | +--------+ | | | | | | | | | | +--------+ | | | +-----------------------------+ ↑ Each chroma pixel maps to 2x2 luma area. Use reconstructed luma residuals near boundary to train α, β.图 2:CCCM 候选 Merge 列表构建(Mode 1)
Candidates: 1. Spatial (A1/B1): if neighbor used CCCM → inherit α, β 2. Temporal: co-located block in ref pic 3. History: FIFO buffer of recent successful parameters +------------------+ +------------------+ | Recent CCCM Param| | ... | | α=2, β=3 |<----->| α=1, β=4 | +------------------+ +------------------+ ↑ ↑ Push when new Pop when full CCCM used Final Merge List (max 5): [0] Spatial A1 → (α=2, β=3) [1] Temporal → (α=1, β=4) [2] History #1 → (α=3, β=2) [3] History #2 → (α=0, β=5) [4] Default → (α=0, β=0) → Send index only!六、伪代码实现(Python-like)
defpredict_with_cccm(curr_cu_chroma,pred0):""" 使用 CCCM 模式生成色度预测值 :param curr_cu_chroma: 当前色度 CU :param pred0: 初始帧内预测(如 Planar/DC) :return: CCCM 预测结果 or None (if not applicable) """w,h=curr_cu_chroma.width,curr_cu_chroma.height x_c,y_c=curr_cu_chroma.x,curr_cu_chroma.y# Step 1: Check eligibilityifw<4orh<4ornotis_chroma_component():returnNone# Step 2: Collect training samples from top/left neighborsX_matrix=[]# Feature vectors: [ry0, ry1, ...]d_vector=[]# Target: org_chroma - pred0_chroma# Scan top rowforxinrange(w):xc,yc=x_c+x,y_c-1ifis_reconstructed(xc,yc):# Map to luma coordinatesxl_base,yl_base=(xc<<1),(yc<<1)ry_samples=[]foriinrange(2):forjinrange(2):xl,yl=xl_base+i,yl_base+j ry=get_reconstructed_luma_residual(xl,yl)ry_samples.append(ry)# Simple average or use allavg_ry=sum(ry_samples)/4.0ec=get_original_chroma(xc,yc)-interpolate_pred0(pred0,x,-1)X_matrix.append([1.0,avg_ry])# [1, ry] for α + β*ryd_vector.append(ec)# Scan left columnforyinrange(h):xc,yc=x_c-1,y_c+yifis_reconstructed(xc,yc):xl_base,yl_base=(xc<<1),(yc<<1)ry_samples=[]foriinrange(2):forjinrange(2):xl,yl=xl_base+i,yl_base+j ry=get_reconstructed_luma_residual(xl,yl)ry_samples.append(ry)avg_ry=sum(ry_samples)/4.0ec=get_original_chroma(xc,yc)-interpolate_pred0(pred0,-1,y)X_matrix.append([1.0,avg_ry])d_vector.append(ec)iflen(X_matrix)<5:returnNone# Insufficient samples# Step 3: Solve linear system: d = X @ thetaX=np.array(X_matrix)d=np.array(d_vector)try:theta=np.linalg.solve(X.T @ X,X.T @ d)alpha,beta=theta[0],theta[1]exceptnp.linalg.LinAlgError:returnNone# Step 4: Apply model to entire blockfinal_pred=np.zeros((h,w))foryinrange(h):forxinrange(w):xl_center=(x_c+x)*2+1yl_center=(y_c+y)*2+1local_ry=get_local_average_luma_residual(xl_center,yl_center,size=3)correction=alpha+beta*local_ry final_pred[y][x]=pred0[y][x]+correctionreturnfinal_pred# 在编码端进行 RDO 测试best_cost=float('inf')best_pred=Noneformodein['DC','Planar','Angular(18)','CCCM']:ifmode=='CCCM':pred=predict_with_cccm(cu,base_pred='Planar')else:pred=intra_predict(mode)cost=compute_rd_cost(pred,cu.org,lamda)ifcost<best_cost:best_cost=cost best_pred=pred selected_mode=modeifselected_mode=='CCCM':write_syntax(cccm_flag=1,merge_idx=None)# or send merge index七、性能表现(来自 JVET 测试报告)
| 测试集 | BD-rate reduction (Y) | U/V 平均 | EncT | DecT |
|---|---|---|---|---|
| AI(All Intra) | -1.2% ~ -1.8% | -2.5% | +7% | +3% |
| RA(Random Access) | -0.9% | -2.0% | +6% | +2% |
| SCC(Screen Content) | -2.0% ~ -3.5% | -4.0% | +10% | +4% |
✅优势显著:尤其适合文字、图表、UI 等高相关性内容。
八、与其他技术对比
| 技术 | 特点 | 与 CCCM 关系 |
|---|---|---|
| CCP (Cross-Component Prediction) | VVC 标准工具,使用固定模板线性模型 | CCCM 是其增强版本 |
| LM-Chroma | HEVC 中已有,基于仿射变换 | CCCM 更灵活,自适应学习 |
| DMS+ | 使用神经网络预测 | CCCM 是轻量替代方案 |
| EIP(如 JVET-AG0058) | 外推滤波预测 | 可结合使用:EIP 用于亮度,CCCM 用于色度 |
九、总结表
| 项目 | 内容 |
|---|---|
| 名称 | CCCM(Cross-Component Correlation Model) |
| 用途 | 利用亮度残差预测色度,提升压缩效率 |
| 适用范围 | 色度分量 ≥4×4,Intra slice |
| 两种模式 | Derivation(自动学习)、Merge(复用历史) |
| 核心方法 | 最小二乘拟合 α + β·r_Y |
| 输入特征 | 邻近亮度残差 |
| 输出目标 | 色度残差修正项 |
| 增益 | Y: -1~2%, C: -2~4%(尤其 SCC) |
| 复杂度 | 编码 +7~10%,解码 +2~4% |
| 典型提案 | JVET-Z0089, JVET-AC0056, JVET-AD0077 |