[0127] PredictorPaletteEntries[i][comp]= palette_predictor_initializers[i][comp]
[0128] –否则(palette_predictor_initializer_present_flag等于0), PredictorPaletteEntries被设置为0.
[0129] 如果调色板预测值初始化器在SPS(序列参数集)或片标头(slice header) 处被标志,则可以应用相同的聚集方法。换句话说,Y分量的所有初始化值一起被标示,Cb分量的所有初始化值一起被标示,且Cr分量的所有初始化值一起被标示。
[0130] 对相同颜色分量的调色板预测值更新过程进行聚集
[0131] 现有的调色板预测值更新过程如下。
[0132] 如等式(1)所示导出变量numComps:
[0133] numComps=(ChromaArrayType==0)?1:3 (1)
[0134] 变量PredictorPaletteSize和Predictor Palette Entries被
修改,如表5中的伪代码所示。
[0135] 表5.
[0136]
[0137]
[0138] 如表5所示,newPredictorPaletteEntries更新过程的第一部分在由注释(5-1) 和注释(5-2)表示的双重do-loop中执行,其中与颜色分量相关联的do-loop(即 cIdx)在内部do-loop中。因此,对于每个调色板条目,更新三个颜色分量。其余的newPredictorPaletteEntries更新的两个do-loop语句由注释(5-3)和注释(5-4) 表示,其中不同颜色分量的do-loop语句对应于内循环(inner loop)。因此,对于每个条目,更新三个颜色分量。PredictorPaletteEntries更新的两个do-loop语句由注释(5-5)和注释(5-6)表示,其中不同颜色分量的do-loop语句对应于外循环(outer loop)。因此,为每个颜色分量更新PredictorPaletteEntries值。
[0139] 在一个实施例中,对于三个相应分量的调色板预测值被聚集,然后被更新。对现有更新过程的示例性修改如下所示。
[0140] 可变numComps的导出与等式(1)保持相同。变量PredictorPaletteSize和 PredictorPaletteEntries被修改,如表6中的以下示例性伪代码所示。
[0141] 表6.
[0142]
[0143] 在上述示例中,第一部分newPredictorPaletteEntries更新的两个do-loop语句由注释(6-1)和注释(6-2)表示,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新其余的newPredictorPaletteEntries值。由注释(6-3 )和注释(6-4)表示的双重do-loop指示的newPredictorPaletteEntries更新过程与表5中现有的更新过程保持一致。由注释(6-5) 和注释(6-6)表示的双重do-loop 指示的PredictorPaletteEntries更新过程与表5中现有的更新过程保持一致。
[0144] 在另一个实施例中,变量PredictorPaletteSize和PredictorPaletteEntries被修改,如表7中的以下示例性伪代码所示。
[0145] 表7.
[0146]
[0147]
[0148] 在上述示例中,newPredictorPaletteEntries更新的第一部分的两个do-loop语句由注释(7-1)和注释(7-2)表示,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新其余的newPredictorPaletteEntries值。由注释(7 -3)和注释(7-4)表示双重do-loop指示的newPredictorPaletteEntries更新过程,其中不同分量的do-loop语句对应于外循环。因此,为每个颜色分量更新newPred ictorPaletteEntries值。由Note(7-5)和Note(7-6)表示的双重do-loop指示的Pre dictorPaletteEntries更新过程与表5中现有的更新过程保持一致。
[0149] 在另一个实施例中,变量PredictorPaletteSize和PredictorPaletteEntries被修改,如表8中的以下示例性伪代码所示。
[0150] 表8.
[0151]
[0152]
[0153] 在上述示例中,newPredictorPaletteEntries和PredictorPaletteEntries更新过程的双循环(two-loop)语句由注释(8-1)、注释(8-2)、注释(8-3)和注释(8 -4)表示,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新newPredictorPaletteEntries值和PredictorPaletteEntries。
[0154] 在表6至表8中已经示出了用于更新过程对相同颜色分量的调色板预测值进行聚集的各种示例,其中根据本发明的实施例,已经使用HEVC语法元素来通过对相同颜色分量的调色板预测值进行聚集来演示更新过程。然而,本发明不限于这些示例中列出的特定语法元素和特定伪代码。本领域的技术人员可以在不偏离本发明的精神的情况下实践本发明。
[0155] 将相同颜色分量的调色板条目语义聚集
[0156] 在当前的SCM4.0中,语法元素palette_entry用于指定当前调色板的调色板条目中的分量的值。变量PredictorPaletteEntries[cIdx][i]指定颜色分量cIdx的预测值调色板中的第i个元素。变量numComps是如等式(1)所示导出的。变量CurrentPaletteEntries[cIdx][i]指定颜色分量cIdx的当前调色板中的第i个元素,并且如表9中的以下示例性伪代码所示导出。
[0157] 表9.
[0158]
[0159] 如表9所示,调色板预测值的CurrentPaletteEntries如注释(9-1)和注释(9-2 )所示更新,其中不同颜色分量的do-loop语句对应于内循环。因此,对于每个条目,更新三个颜色分量。此外,来自新调色板条目的CurrentPaletteEntries将更新为注释(9-3)和注释(9-4)所示,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新CurrentPaletteEntries值。
[0160] 在一个实施例中,三个分量中的每一个的调色板预测值可以聚集在一起。对现有过程的示例性改变如下所示。
[0161] 如等式(1)所示导出变量numComps。变量CurrentPaletteEntries[cIdx][i] 指定颜色分量cIdx的当前调色板中的第i个元素,并且如表10中的以下示例性伪代码所示导出。
[0162] 表10.
[0163]
[0164]
[0165] 如表10所示,来自调色板预测值的CurrentPaletteEntries如注释(10-1)和注释(10-2)所示更新,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新CurrentPaletteEntries值。新调色板条目中的CurrentPaletteEn tries如注释(10-3)和注释(10-4)所示更新,且与表9保持一致。
[0166] 在另一实施例中,三个分量可以组合在一起。更改如下所示。
[0167] 如等式(1)所示导出变量numComps:
[0168] 变量CurrentPaletteEntries[cIdx][i]指定用于颜色分量cIdx的当前调色板中的第i个元素,并且如表11中的以下示例性伪代码所示导出。
[0169] 表11.
[0170]
[0171]
[0172] 如表11所示,调色板预测值中的CurrentPaletteEntries和来自新调色板条目的CurrentPaletteEntries如注释(11-1)、注释(11-2)、注释(11-3)和注释(11 -4)所示更新,其中不同颜色分量的do-loop语句对应于外循环。因此,为每个颜色分量更新CurrentPaletteEntries值。
[0173] 根据本发明的实施例,在表10和表11中已经示出了用于更新处理的相同颜色分量的调色板条目语义的聚集的各种示例,其中HEVC语法元素已经用于通过对相同颜色分量的调色板条目语义进行聚集来演示更新过程。然而,本发明不限于这些示例中列出的特定语法元素和特定伪代码。本领域的技术人员可以在不偏离本发明的精神的情况下实践本发明。
[0174] 其他调色板语法聚集
[0175] 在SCM-4.0中,调色板索引被聚集在前面,并且跳出值在最后被聚集。调色板索引和跳出值用旁路二进制文件(bypass bin)编解码。使用调色板索引对跳出值进行聚集(即,聚集旁路编解码的二进制文件)可以增加解析吞吐量。在S CM-4.0中,要解析的跳出值的数量取决于调色板运行模式、调色板索引和调色板运行。因此,跳出值只能在最后聚集。为了使用调色板索引对跳出值进行聚集,公开如下几种方法。
[0176] 方法一:使用调色板索引对前面的跳出值进行聚集:
[0177] 如果跳出值聚集在前面,则要解析的跳出值的数量应该与调色板运行无关。对于跳出值解析,为了去除调色板运行的数据依赖性,当从上方行复制跳出样本时,本发明的实施例改变了复制上方运行模式行为。如果预测变量是跳出样本,则将跳出样本视为预测变量复
制模式中的预定义颜色索引。
[0178] 在复制上方运行模式中,传送或导出“调色板运行”值以指示要从上方行复制的随后样本的数量。颜色指数等于上方行中的颜色指数。在一个实施例中,如果上方或左侧样本是跳出样本,则将上方样本的颜色指数视为预定义的颜色指数(例如0)。当前索引设置为预定义的索引。这些预测值复制模式不需要跳出值。在该方法中,即使被标志的索引等于跳出索引,调色板运行也可以被标志用于索引运行模式。如果跳出索引的运行大于0(例如N,N>0),则用编解码的跳出值重构第一个样本。可以将第一个样本的索引设置为跳出索引或预定义的颜色索引。将剩余N个样本的索引设置为预定索引(例如,索引0),并且利用预定索引(例如,索引0)的值重构剩余的N个样本。在一个实施例中,除了索引运行模式的第一个样本之外,运行模式(例如,adjustIndexMax)中的最大码字索引是固定的(例如固定为indexMax-1)。对于CU中的第一个样本,adjus tIndexMax等于indexMax。仍然可以应用冗余索引删除。在这种方法中,需要解析的跳出值的数量取决于等于跳出索引的解析/重构索引的数量。例如,如果调色板索引用截断的二进制代码编解码,并且编解码的二进制文件都是
1,那么解析索引(parsed index)是跳出索引。需要解析的跳出值的数量与调色板运行无关。因此,利用调色板索引,跳出值的语法可以放到前面(即调色板运行之前)。
[0179] 语法顺序示例1:copy_above_run或number_run的数量→last_run_mode→运行类型聚集(上下文编解码)→调色板索引聚集(旁路编解码)→跳出值聚集 (旁路编解码)→运行长度聚集。
[0180] 在这种情况下,last_run_mode表示最后一个运行模式是copy_above_run或in dex_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,并且last_run_mode是index_run,则运行类型聚集将被终止。如果编解码/解码的index_run数量等于index_run的数量,而last_run_mode是c opy_above_run,则运行类型聚集也将被终止,而copy_above_run被插入到末尾。
[0181] 语法顺序示例2:copy_above_run或index_run的数量→运行类型聚集(上下文编解码)→last_run_mode→调色板索引聚集(旁路编解码)→跳出值聚集(旁路编解码)→运行长度聚集。
[0182] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止,并且last_run_mode被标示。如果last_run_mode为copy_above_run,则在末尾插入copy_above_run。
[0183] 语法顺序示例3:copy_above_run或index_run的数量→运行类型聚集(上下文编解码)→调色板索引聚集(旁路编解码)→跳出值聚集(旁路编解码) →last_run_mode→运行长度聚集。
[0184] 在这种情况下,last_run_mode表示最后一个运行模式是copy_above_run或index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止。标示last_run_mode。如果 last_run_mode为copy_above_run,则在末尾插入一个copy_above_run。
[0185] 语法顺序示例4:copy_above_run的数量或index_run的数量→运行类型聚集 (上下文编解码)→调色板索引聚集(旁路编解码)→last_run_mode→跳出值( 旁路编解码)聚集→运行长度聚集。
[0186] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止。标示last_run_mode。如果 last_run_mode为copy_above_run,则在最后插入一个copy_above_run。
[0187] 语法顺序示例5:copy_above_run的数量或index_run的数量→调色板索引聚集→跳出值聚集→last_run_mode→运行类型聚集→运行长度聚集。
[0188] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止。如果last_run_mode为 copy_above_run,则在末尾插入一个不被标示的copy_above_run。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0189] 语法顺序示例6:copy_above_run的数量或index_run的数量→调色板索引聚集→last_run_mode→跳出值聚集→运行类型聚集→运行长度聚集。
[0190] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数等于index_run的数量,则运行类型聚集将被终止。如果last_run_mode为 copy_above_run,则copy_above_run被插入在末尾,而不标示。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0191] 语法顺序示例7:copy_above_run的数量或index_run的数量→调色板索引聚集→跳出值聚集→last_run_mode→交错{调色板运行类型,调色板运行长度}。
[0192] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止。如果last_run_mode为 copy_above_run,则copy_above_run被插入在末尾,而不标示。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0193] 语法顺序示例8:copy_above_run的数量或index_run的数量→调色板索引聚集→last_run_mode→跳出值聚集→交错{调色板运行类型,调色板运行长度}。
[0194] 在这种情况下,last_run_mode指示最后一个运行模式是copy_above_run还是 index_run。例如,在编码/解码运行类型聚集中,如果编解码/解码的index_run数量等于index_run的数量,则运行类型聚集将被终止。如果last_run_mode为 copy_above_run,则copy_above_run被插入在末尾,而不被标示。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0195] 在上述示例中,copy_above_run对应于上述“复制上方运行模式”的示例性语法元素。此外,index_run对应于“运行模式”的示例性语法元素。
[0196] 在上述语法顺序的示例1、2、3和5中,“调色板索引聚集(旁路编解码)→跳出(旁路编解码)值聚集”可以是“交错{调色板索引,跳出值}”。调色板索引和跳出值可以以交错方式进行编解码。如果解析的索引等于跳出索引,则可以立即解析跳出值。
[0197] 在上述语法顺序的示例2至7中,“last_run_mode”可以在“copy_above_run的数量或index_run的数量”之后被标示。
[0198] 在上述语法顺序的示例1至8中,可以在标示最后一个调色板运行之前的任何地方标示“last_run_mode”。
[0199] 在上述语法顺序的示例1至4中,调色板运行聚集在调色板运行聚集之前被解码。因此,对于调色板运行信令,最大可能运行(maximum possible run)可以进一步减去(subtracted by)剩余的索引运行模式的数量、剩余的复制上方运行模式的数量、或剩余的索引的数量运行模式+剩余的复制上方运行模式的数量。例如,maxPaletteRun=nCbS*nCbS–scanPos–1–剩余的 COPY_INDEX_MODE的数量,或maxPaletteRun=nCbS*nCbS–scanPos–1–剩余的COPY_ABOVE_MODE的数量,或maxPaletteRun=nCbS*nCbS– scanPos–1–剩余的COPY_ABOVE_MODE的数量–剩余的 COPY_INDEX_MODE的数量。在上述示例中,maxPaletteRun对应于用于最大调色板运行的示例性语法元素,nCbS对应于用于当前
亮度编解码块的大小的示例性语法元素,scanPos对应于当前像素的扫描位置。
[0200] 在上述语法顺序的示例1至7中,对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0201] 方法2:使用跳出值将调色板索引聚集到最后。
[0202] 在SCM-4.0中,调色板运行的上下文形成取决于调色板索引。因此,调色板索引只能在调色板运行前进行编解码。为了将调色板索引聚集到最后,调色板运行的上下文形成应该与调色板索引无关。
[0203] 因此,调色板运行的上下文形成需要改变,使得调色板运行的上下文形成将仅取决于当前调色板运行模式、先前调色板运行模式、先前调色板运行、前一样本的调色板运行模式、前一样本的调色板运行,或上述信息的组合。或者,调色板运行可以用旁路二进制文件进行编解码。
[0204] 调色板索引映射编解码的语法顺序的各种示例如下所示。
[0205] 语法顺序示例1:copy_above_run的数量或index_run的数量→last_run_mode→运行类型聚集(上下文编解码)→运行长度聚集(不依赖于调色板索引)→调色板索引聚集(旁路编解码)→跳出值聚集(旁路编解码)。
[0206] 在这种情况下,last_run_mode表示最后一个运行模式是copy_above_run还是 index_run。例如,当编码/解码运行类型聚集时,如果编解码/解码的index_run数量等于index_run的数量,且last_run_mode是index_run,则运行类型聚集将被终止。如果编解码/解码的index_run数量等于index_run的数量,而last_run_mode为c opy_above_run,则运行类型聚集也将被终止,并且copy_above_run被插入至末尾。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0207] 语法顺序示例2:copy_above_run的数量或index_run的数量→运行类型聚集→last_run_mode→运行长度聚集→调色板索引聚集→跳出值聚集。
[0208] 在这种情况下,last_run_mode表示最后一个运行模式是copy_above_run还是 index_run。例如,当编码/解码运行类型分组时,如果编解码/解码的index_run 数量等于index_run的数量,则运行类型聚集将被终止,并且标示last_run_mode 。如果last_run_mode为copy_above_run,则将copy_above_run插入到末尾。对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0209] 语法顺序示例3:交错{调色板运行类型,调色板运行长度},调色板索引聚集→跳出值聚集。
[0210] 在上述语法顺序的示例1至3中,“调色板索引聚集→跳出值聚集”可以是“交错{调色板索引,跳出值}”。调色板索引和跳出值可以以交错方式进行编解码。如果解析的索引等于跳出索引,则可以立即解析跳出值。
[0211] 在上述语法顺序的示例1至3中,可以在标示最后一个调色板运行之前的任何地方标示“last_run_mode”。
[0212] 在上述语法顺序的示例1和2中,调色板运行聚集可以在调色板索引聚集之前被解码。因此,对于调色板运行信令,最大可能的运行可以进一步减去剩余索引运行模式、剩余复制上方运行模式的数量、或剩余索引运行模式的数量+剩余复制上方运行模式的数量。例如,maxPaletteRun=nCbS*nCbS–scanPos–1–剩余COPY_INDEX_MODE的数量,或maxPaletteRun=nCbS*nCbS–scanPos– 1–剩余COPY_ABOVE_MODE的数量,或maxPaletteRun=nCbS*nCbS– scanPos–1–剩余COPY_ABOVE_MODE的数量–剩余COPY_INDEX_MODE的数量。
[0213] 在上述语法顺序的示例1和2中,对于最后一个调色板运行模式,调色板运行被推断为在PU/CU的末尾。
[0214] 本发明还涉及下面所公开的调色板编解码的各个方面。
[0215] 移除调色板索引映射解析中的行缓冲器
[0216] 在SCM-3.0中,以交错方式编解码四个调色板索引映射语法元素(即,调色板运行模式、调色板索引、调色板运行和跳出值)。虽然调色板运行模式的上下文形式被修改为独立于SCM-4.0中的上方样本的调色板运行模式,索引映射解析需要上方行的信息。例如,当使用复制上方运行模式时,要解析的跳出值的数量取决于要从上方行复制的跳出像素的数量。当先前编解码模式是复制上方运行模式时,索引重构也取决于上方样本的调色板索引。为了在调色板索引映射解析中保存(save)行缓冲器,公开了从上述示例中去除数据依赖关系的几种方法。
[0217] 方法-1:如果预测值是跳出样本,则以预测值复制模式直接复制跳出值。
[0218] 为了在计算在复制上方运行模式中要解析的跳出像素的数量期间去除依赖关系,根据本发明的实施例修改了复制上方运行模式行为,用于从上方行复制移除样本。
[0219] 在复制上方运行模式中,传送或导出“调色板运行”值以指示要从上方行复制的以下样本的数量。颜色指数等于上方行中的颜色指数。根据一个实施例,如果预测值(即,上面的位置)是跳出样本,则当前样本不仅复制索引(跳出索引),而且还复制来自上方行的跳出值。在这些样本中不需要解析跳出值。在这种方法中,即使标示的索引等于跳出索引,仍可以标示运行用于索引运行模式。如果跳出索引的运行大于0(例如N,N>0),解码器将从第一个样本开始填充N个样本的重构值(或跳出值)。运行语法之后可以标示跳出值。
[0220] 为了在先前的模式是复制上方运行模式时,去除索引解析和索引运行模式的重构的数据依赖性,当先前的模式是复制上方运行模式时,冗余索引删除被禁用,如JCTVC-T0078(JCTVC-T00784:Kim等,CE1-related:simplification for index map coding in palette mode,ITU-T SG 16WP 3和ISO/IEC JTC 1/SC 29/ WG 11视频编解码联合协作小组(Joint Collaborative Team on Video Coding)( JCT-VC),第20次会议:Geneva,CH,2015.2.10-18,文档编号:JCTVC-T0078) 中所述。
[0221] 基于方法-1,索引映射解析不依赖于上方行的信息。熵解码器可以通过仅使用先前编解码调色板运行模式和调色板索引的依赖来解析所有调色板索引映射语法。
[0222] 在一个实施例中,在复制索引运行模式中,发送或导出“调色板运行”值以指示要在位流中编解码的以下样本的数量。当前位置的颜色索引被编解码。然而,如果当前位置的样本是跳出样本,则不仅对当前样本的索引(跳出索引)进行编解码,而且对跳出值进行编解码。在这种方法中,即使标示的指数等于跳出索引,也可以为索引运行模式标示运行。如果跳出索引的运行大于0(例如, N,N>0),则解码器将从第一个样本开始填充N个样本的重构值(或跳出值) 。运行语法之后可以标示跳出值。
[0223] 为了在先前的模式是复制索引运行模式时,去除索引解析和复制索引运行模式的重构的数据依赖性,当先前的模式是复制索引运行模式时,禁用冗余索引删除。
[0224] 利用上述方法,索引映射解析不依赖于先前索引的信息。熵解码器可以通过使用对先前编解码的调色板运行模式和调色板索引的依赖来解析所有调色板索引映射语法。
[0225] 方法-2:如果预测值是跳出样本,则将跳出样本作为预测值复制模式中的预定颜色索引进行处理。
[0226] 在复制上方运行模式中,传送或导出“调色板运行”值以指示要从上方行复制的以下样本的数量。颜色索引等于上方行中的颜色索引。根据一个实施例,如果上方或左侧样本是跳出样本,则将上方样本的颜色索引视为预定义的颜色索引(例如0)。当前索引设置为预定义的索引。这些预测值复制模式不需要跳出值。根据一个实施例,即使标示的索引等于跳出索引,也可以为索引运行模式标示调色板运行。运行语法之后可以标示跳出值。如果跳出索引的运行大于0( 例如N,N>0),则用编解码的跳出值重构第一个样本。可以将第一个样本的索引设置为跳出索引或预定义的颜色索引。剩余N个样本的索引被设置为预定索引 (例如,索引0)。其余N个样本用预定义索引(例如索引0)的值重构。在另一个例子中,如果跳出索引的运行大于0(例如N,N>0),则用跳出值重构第一个样本,并且还需要标示随后N个样本的跳出值。剩余的样本分别标示跳出值重构。可以将第一样本和其余N个样本的索引设置为预定索引(例如,索引0)。
[0227] 根据方法-2,除了索引运行模式的第一个样本之外,运行模式(即, adjustedIndexMax)中的最大码字索引是固定的(例如固定为indexMax-1)。对于CU中的第一个样本,adjustIndexMax等于indexMax。可以继续应用冗余索引删除。
[0228] 根据方法-2,虽然索引映射重构仍然需要上述样本的索引值,但是熵解码器可以通过仅使用对先前编解码的调色板运行模式和调色板索引的依赖来解析所有的调色板索引映射语法。
[0229] 根据JCTVC-T0078,为了在先前的模式是复制上方运行模式时,去除索引运行模式的索引重构的数据依赖性,当先前的模式是复制上方运行模式.时,冗余索引删除将被禁用。
[0230] 索引映射翻转下的复制上方模式
[0231] 本发明还涉及与索引映射编解码之前的索引映射翻转有关的问题。在解码器翻转索引映射之后,复制上方运行模式中的预测源是与以前不同的物理位置上的上方像素(physical above pixels)。图3A示出了索引编解码之前的示例索引映射翻转。图3B示出了翻转索引映射的示例。
[0232] 图3A示出了原始编解码单元的示例。在索引映射翻转后,最后一行中的像素(即像素0至像素7)将被翻转到第一行,如图3B所示。如果预测可以跨越CU ,则由上方相邻构造像素(neighboring constructed pixel,简写为NCP)预测现在的第一行像素。如图3B所示,线填充块指示翻转的索引映射,而图3A中的透明块(clear block)表示原始索引映射。对于翻转后的其他行中的像素,复制上方运行模式中的预测成为翻转之前由下面物理位置的像素位置的预测。在该方法中,索引重构不需要第二遍(second pass)。
[0233] 然而,在索引映射编解码之前翻转索引映射意味着使用上述NCP来预测物理位置中最后一行中的像素,如图4所示。这个预测过程是无效的,因为预测值和要预测的潜在索引之间的距离很大。
[0234] 因此,以下公开了提高与索引映射翻转有关的编解码效率的方法。
[0235] 方法1:如图5A和图5B所示,无论索引映射是否被翻转,复制上方运行模式中的索引是从其物理的上方位置(如果转置标志开启(transpose flag is on),则为左侧位置)预测的。如图5A所示,线填充块表示翻转索引映射,而图5B中的透明块代表原始的索引映射。
[0236] 方法2:信令不同的运行扫描起始位置。该方法类似于方法1,其中复制上方运行模式中的索引是从物理的上方位置中的像素预测的。可以标示附加信息以指示“运行扫描起始位置”或“扫描模式”。“运行扫描起始位置”可以是左上、右上、左下或右下。“扫描图案”可以是水平扫描、垂直扫描、水平遍历扫描或垂直遍历扫描。
[0237] 方法3:如果索引映射被翻转,则从其物理的最近位置的样本预测第一行的复制上方运行编解码像素,如图6A和图6B所示。图6A示出了如线填充块所示的翻转样本,图6B示出了原始物理位置的样本。如果转置标志关闭,物理位置中最后一行的复制上方运行编解码像素是从其物理的最近位置的样本中预测的。
[0238] 方法4:如果索引映射被翻转,则从上述相邻CU的物理像素位置预测最后行的复制上方运行编解码像素,如图7A和图7B所示。图7A示出了由线填充块指示的翻转像素,图7B示出了原始物理位置的样本。如果转置标志关闭,则可以从上述相邻CU的物理像素位置预测物理位置的第一行(或前M行)。M可以是1、 2、或3。M也可以取决于CU大小。可以标示M,使得解码器可以相应地进行解码。
[0239] 跨CU预测
[0240] 为了进一步提高编解码效率,公开了一种特殊的运行。这个特别的运行扩展了从调色板编解码CU的第一个样本开始的复制上方运行。该特殊运行可以标示一次(signaled once)。扩展复制上方运行模式中的样本是从相邻CU中的重构像素预测的。使用SCM-4.0或SCM-3.0中指定的调色板语法对该CU中的其余样本进行编解码,不同之处在于PU/CU中的总调色板编解码样本减少。
[0241] 方法1:首先标示语法元素(例如,由L表示的line_num),以指示从相邻 CU中的重构像素预测前L行样本,其中L是正整数。使用SCM-4.0或SCM-3.0中的调色板语法对剩余的样本进行编解码,不同之处在于PU/CU中的总调色板编解码样本减少。对于前L行样本,自其相邻CU中的重构像素预测它们的像素值。例如,如果palette_transpose_flag为0,则使用上方CU中的重构像素。前L行样本的像素值是上方CU的最后一行的重构像素值。类似于将垂直内部预测(Intra vertical prediction)应用于前L行样本,而其余行用正常调色板模式进行编解码。
[0242] 图8A示出了扩展复制上方运行模式的示例,其中从位于CU边界810上方的上一行复制两行像素(即,L=2)。
[0243] 方法2:首先标示语法元素(例如,由M表示的pixel_num),以指示从相邻 CU中的重构像素预测前M个样本,其中M是正整数。使用SCM-4.0或SCM-3.0中的调色板语法对剩余的样本进行编解码,不同之处在于PU/CU中的总调色板编解码样本减少。例如,如果palette_transpose_flag为0,则使用上方CU中的重构像素。前M个样本的像素值是上方CU的最后一行的重构像素值。类似于将垂直内部预测应用于前M行样本。如果CU的宽度为CU_width,根据SCM-4.0中的语法,从(M+1)处的第一个样本开始到CU中的(M+CU_width)个样本的第一个CU_width样本不能在复制上方运行模式中编解码。换句话说,根据SCM-4.0 中的语法,扫描位置等于M到(M+CU_width-1)的样本不能在复制上方运行模式中编解码。图8B示出了通过标示语法元素pixel_num(M)来指示从重构像素预测前M(即,M=11)个样本的跨CU的预测的示例。
[0244] 例如,可以修改SCM-3.0中palette_coding的语法表,如表12所示。
[0245] 表12.
[0246]
[0247]
[0248] 如表12所示,语法元素pixel_num被并入,如注释(12-1)所示,其中在调色板索引映射编解码之前标示pixel_num。从如注释(12-2)所示的pixel_num开始的扫描位置编解码其余的调色板样本。之前的调色板样本位置是根据注释( 12-3)得出的。在前pixel_num样本之后的第一个样本行不允许复制上方模式,如注释(12-4)所示。
[0249] 表示经调整的最大索引的变量adjustIndexMax如下导出:
[0250] adjustedIndexMax=indexMax
[0251] if(scanPos>pixel_num)
[0252] adjustedIndexMax-=1
[0253] 表示经调整的最大参考索引的变量adjustRefIndexMax导出如下:
[0254]
[0255] 在上述方法1和方法2中,可以首先标示语法元素 copy_from_neighboring_CU_flag。如果copy_from_neighboring_CU_flag为0,则不会标示line_num和pixel_num,并将其推断为0。如果 copy_from_neighboring_CU_flag为1,则会标示line_num和pixel_num。与解析的line_num和pixel_num相等的实际line_num和pixel_num增加1。
[0256] 方法3:在该方法中,相邻像素用于预测在调色板模式下编解码的当前像素。首先标示Num_copy_pixel_line,指示从相邻CU中的重构像素预测前 num_copy_pixel_line样本行。除了起始点改变,PU/CU中的总调色板编解码样本减少之外,剩余样本由正常调色板索引映射编解码进行编解码。
[0257] 对于样本的前num_copy_pixel_line行,它们的像素值是从相邻CU中的重构像素预测的,其中语法元素num_copy_pixel_line对应于要复制的像素线的数量。例如,如果palette_transpose_flag为0,则使用上方CU中的重构像素,如图9A所示。通过上方CU的最后一行的重构像素值来预测前num_copy_pixel_line(例如K )行样本的像素值。其类似于将帧内垂直预测(Intra vertical prediction)应用于样本的前K行,而其余行用正常的调色板模式进行编解码。如果 palette_transpose_flag为1,则使用左CU中的重构像素,如图9B所示。
[0258] num_copy_pixel_line的语法可以在调色板模式标示之后并在调色板表编解码之前标示。如果num_copy_pixel_line等于CU宽度或CU高度,则标示 palette_transpose_flag以指示从上方像素或左侧像素预测整个CU。由于预测了当前CU中的所有样本,所以跳过调色板表编解码和索引映射编解码的语法。
[0259] 如果num_copy_pixel_line小于CU宽度或CU高度,则应用普通调色板表编解码和调色板索引映射编解码。在SCM-4.0中,如果MaxPaletteIndex等于0,则 palette_transpose_flag被推断为0。但是,根据当前方法,如果MaxPaletteIndex等于0,且num_copy_pixel_line不等于0,palette_transpose_flag仍然需要标示,以指示要从上方CU或左侧CU中的重构像素预测的前num_copy_pixel_line行或列样本。对于索引映射编解码,起始样本位置设置为num_copy_pixel_line*CU_width 。对于具有num_copy_pixel_line*CU_width和(num_copy_pixel_line+1)*CU_width –1之间的样本位置的样本,无法选择复制上方运行模式。换句话说,样本位置小于CU_width*(num_copy_pixel_line+1)的样本不能标示为复制上方运行模式。
[0260] 表13示出了根据上述公开的方法的实施例的调色板编解码的示例性语法表。
[0261] 表13.
[0262]
[0263]
[0264]
[0265]
[0266] 在表13中,语法元素num_copy_pixel_line被并入所有语法的前面,如注释( 13-1)所示。如果num_copy_pixel_line等于nCbS(即CU宽度或CU高度),则语法palette_transpose_flag如注释(13-2)所示被合并。整个CU的调色板索引被分配为-1,如注释(13-
3)所示,其指示从相邻CU复制像素值。如果 num_copy_pixel_line不等于0,
MaxPaletteIndex不大于0(例如MaxPaletteIndex等于0),则语法元素palette_transpose_flag如注释(13-4)所示被合并。 num_copy_pixel_line行中的样本的调色板索引分配为-
1,如注释(13-5)所示。在前nCbS*num_copy_pixel_line行之后的第一个样本行不允许复制上方模式,如注释(13-6)所示。
[0267] 变量AdjustedMaxPaletteIndex导出如下:
[0268] AdjustedMaxPaletteIndex=MaxPaletteIndex
[0269] if(PaletteScanPos>num_copy_pixel_line*nCbS)
[0270] AdjustedMaxPaletteIndex-=1
[0271] 变量adjustRefPaletteIndex如下导出:
[0272]
[0273]
[0274] 如果PaletteIndexMap[xC][yC]等于-1,则相应的像素值与其相邻像素相同。根据该方法,如果上方或左侧像素不可用(例如,当应用限制性帧内预测时,在帧边界处的样本或帧间编解码的样本),则使用具有等于0的调色板索引的颜色。如果当前CU的调色板表未被编解码(例如,num_copy_pixel_line等于 CU_width),则使用调色板预测值表中的第一个调色板。
[0275] 在另一示例中,如果上方或左侧像素不可用,则可以使用HEVC帧内预测边界像素填充方法来生成替换相邻像素。
[0276] 使用复制上方像素行模式的行数可以根据语法元素 num_copy_pixel_line_indication导出,而不是作为num_copy_pixel_line直接标示。如果num_copy_pixel_line_indication为0,则将num_copy_pixel_line导出为0.如果num_copy_pixel_line_indication为1,则将num_copy_pixel_line导出为N,其为预定义的数字。如果num_copy_pixel_line_indication为k,则将 num_copy_pixel_line导出为k*N。
[0277] 方法4:在该方法中,在palette_transpose_flag语法之前标示 num_copy_pixel_line语法。表14示出了根据该方法的实施例的示例性调色板编解码语法表。
[0278] 表14.
[0279]
[0280]
[0281]
[0282] 在表14中,在palette_escape_val_present_flag信令之后,语法元素 num_copy_pixel_line被并入,如注释(14-1)所示。如果num_copy_pixel_line不等于0,MaxPaletteIndex不大于0(例如MaxPaletteIndex等于0),则语法 palette_transpose_flag如注释(14-2)所示被并入。num_copy_pixel_line行中的样本的调色板索引被分配为-
1,如注释(14-3)所示。在前nCbS* num_copy_pixel_line之后的第一个样本行不允许复制上方模式,如注释(14-4) 所示。
[0283] 语法元素num_copy_pixel_line可以在语法元素 palette_escape_val_present_flag前面标示。表15示出了根据该方法的调色板编解码的示例性语法表。
[0284] 表15.
[0285]
[0286]
[0287] 在表15中,在palette_escape_val_present_flag语法信令之前,语法元素 num_copy_pixel_line被并入,如注释(15-1)所示。如果num_copy_pixel_line不等于0并且MaxPaletteIndex不大于0(例如MaxPaletteIndex等于0),则会按照注释(15-2)所示的方式合并语法palette_transpose_flag。num_copy_pixel_line行中的样本的调色板索引被分配为-1,如注释(15-3)所示。在前个nCbS* num_copy_pixel_line行之后的第一个样本行不允许复制上方模式,如注释(15-4 )所示。
[0288] 在该实施例中,如果语法元素num_copy_pixel_line等于CU_width,则语法元素NumPredictedPaletteEntries和num_signaled_palette_entries均应当为0。第一编解码语法元素palette_predictor_run应为1。
[0289] 在palette_escape_val_present_flag(例如表15)之前的信令(signaling) num_copy_pixel_line的语法设计中,NumPredictedPaletteEntries和 num_signaled_palette_entries应当都为0,第一个编解码的palette_predictor_run应为1,而palette_escape_val_present_flag被推断为0。
[0290] 方法5:根据该方法,在palette_transpose_flag之后标示num_copy_pixel_line 。在这种语法设计中,即使MaxPaletteIndex等于0,也需要标示语法元素 palette_transpose_flag。表16示出了根据该方法的实施例的调色板编解码的示例性语法表。
[0291] 表16.
[0292]
[0293]
[0294] 由于语法元素palette_transpose_flag即使在MaxPaletteIndex等于0的情况下也需要标示,所以在测试“if(MaxPaletteIndex>0)”之外会合并语法(如注释(16-1 )所示)。同时,测试“if(MaxPaletteIndex>0)”中的语法元素palette_transpose_flag 如注释(16-2)中的行填充文本所示删除。语法元素num_copy_pixel_line如注释 (16-3)所示被并入。num_copy_pixel_line行中的样本的调色板索引被分配为-1 ,如注释(16-4)所示。
[0295] 如果num_copy_pixel_line是偶数,则对于第一法线(normal line)使用从左到右扫描是自然的,如图10A所示。但是,如果num_copy_pixel_line是奇数,则有两种类型的扫描可以选择。一个是如图10B所示的第一法线的从左到右的扫描,另一个是如图10C所示的第一法线的从右到左的扫描。
[0296] 如图10B所示,它向下移动遍历扫描(traverse scan downward)或从第一个法线使用遍历。在图10C,它是使用从当前CU中第一个样本的遍历扫描,并跳过前num_copy_pixel_line行的扫描。在表13至16中,使用图10C中的扫描。可以相应地修改语法表用于图10B中的扫描。
[0297] 方法6:表17示出了用于图10B中扫描的调色板编解码的示例性语法表。
[0298] 表17.
[0299]
[0300]
[0301]
[0302]
[0303]
[0304] 在表17中,语法元素num_copy_pixel_line被并入所有语法的前面,如注释( 17-1)所示。如果num_copy_pixel_line等于nCbS(即CU宽度或CU高度),则语法palette_transpose_flag被并入,如注释(17-2)所示。整个CU的调色板索引被分配为-1,如注释(17-
3)所示,其指示从相邻CU复制像素值。如果 num_copy_pixel_line不等于0,并且MaxPaletteIndex不大于0(例如MaxPaletteIndex 等于0),则会按照注释(17-4)的方式合并语法palette_transpose_flag。 num_copy_pixel_line行中的样本的调色板索引分配给-1,如注释(17-5)所示。 PaletteScanPos将重置为0,如注释(17-6)所示。由于PaletteScanPos被复位(reset ),实际的样本索引需要增加num_copy_pixel_line*nCbS,如注释(17-7和17-10 到17-12)所示。垂直位置需要增加num_copy_pixel_line,如注释(17-8,17-9和 17-13)所示。
[0305] 变量AdjustedMaxPaletteIndex如下导出:
[0306] AdjustedMaxPaletteIndex=MaxPaletteIndex
[0307] if(PaletteScanPos>0)
[0308] AdjustedMaxPaletteIndex-=1
[0309] 变量adjustRefPaletteIndex如下导出:
[0310]
[0311]
[0312] 注意,在上述方法3至方法6中,num_copy_pixel_line的信令也可以通过使用现有HEVC SCC规范中的palette_run语法元素和上下文来构造。例如,其可以如表18所示标示。
[0313] 表18.
[0314]
[0315] 在表18中,使用上述语法,解码的copy_pixel_line_length可以在语义上是复制像素行的数量。该编解码元素的最大值为块高度-1。
[0316] 解码的copy_pixel_line长度也可以是使用复制像素模式的实际样本数,并且将复制像素线的数量导出为copy_pixel_line长度/block_width。注意,在该方法中,对copy_pixel_line长度施加一致性约束(conformance constraint),使得它必须是block_width的倍数。
[0317] 方法7:在该方法中,使用具有修改解码过程的当前语法结构来标示块是否从当前CU外部的复制像素模式开始的指示,以及使用复制像素模式的行数(样本数)。例如,这可以通过以下方式实现:
[0318] ●允许复制上方运行模式用于块中的第一个样本。这通过使用语法元素 palette_run_type_flag[0][0]来指示。如果palette_run_type_flag[0][0]为1,以下行使用复制像素填充标示行数的样本。如果palette_run_type_flag[0] [0]为0,剩余的语法信令(syntax signaling)将保持与当前语法结构相同。
[0319] ●当palette_run_type_flag[0][0]为1时,使用用于信令调色板运行长度的相同的语法元素来标示使用复制像素的行数。有两种方法可以使用调色板运行长度语法来通知行数。
[0320] ○用于复制像素模式的解码调色板运行长度R语义意味着行数(而不是样本数)。因此,复制像素的实际运行是水平扫描的解码值R *block_width,或垂直扫描的解码值R*block_height。该解码的R 的最大值应为块高度(或宽度)。
[0321] ○另一种方法是解码的调色板运行长度R是实际的复制像素运行。该方法不需要更改复制像素运行的语义和解码过程。
[0322] 注意,对于该方法,必须对解码值R施加一致性约束,使得它必须是block_width的倍数。
[0323] ●当palette_run_type_flag[0][0]为1时,复制像素行之后,下一行样本不能使用复制上方运行模式。根据此条件修改解析标准,以不解析此行的 run_type标志。
[0324] ●当palette_run_type_flag[0][0]为0时,第一行中的其余样本不能使用复制上方运行模式。解析标准根据此条件进行修改,以不解析这些样本的 run_type标志。
[0325] 表19示出了根据该方法的调色板编解码的示例性语法表。复制像素模式的“调色板运行长度R”的编解码语义上意味着行数(不是样本数)。
[0326] 表19.
[0327]
[0328]
[0329]
[0330]
[0331] 在表19中,由于即使MaxPaletteIndex等于0,也需要标示语法元素 palette_transpose_flag,所以在测试“if(MaxPaletteIndex>0)”之外,结合了语法 (如注(19-1)所示)。同时,注释(19-2)中的行填充文本表示删除测试“if (MaxPaletteIndex>0)”内的语法元素palette_transpose_flag。整个CU的调色板索引首先被重新设置为-1,如注释(19-3)所示,其指示像素值从相邻CU复制。第一个样本(PaletteScanPos==0)的Palette_run_type_flag和paletteRun用于指示num_copy_pixel_line。如注释(19-5)所示,对于第一个样本,如果 palette_run_type_flag等于COPY_ABOVE_MODE,所述maxPaletteRun被设定为等于nCbS–1,如注释(19-4)所示,并且num_copy_pixel_line等于解码的 paletteRun。否则,num_copy_pixel_line设置为0。
[0332] 表20示出了根据该方法的调色板编解码的另一示例性语法表。复制像素模式的“调色板运行长度R”的编解码是实际的运行长度,并且施加一致性约束使得 R必须是CU_width的倍数。
[0333] 表20.
[0334]
[0335]
[0336]
[0337] 在表20中,由于即使MaxPaletteIndex等于0,也需要标示语法元素 palette_transpose_flag,所以在测试“if(MaxPaletteIndex>0”之外,结合了语法( 如注(20-1)所示)。同时,注释(20-2)中的行填充文本表示删除测试“if( MaxPaletteIndex>0)”内的语法元素palette_transpose_flag。整个CU的调色板索引首先被重新设置为-1,如注释(20-3)所示,表示像素值从相邻的CU复制。第一个样本(PaletteScanPos==0)的palette_run_type_flag和paletteRun用于指示 num_copy_pixel_line。如注释(20-4)所示,对于第一个样本,如果 palette_run_type_flag等于COPY_ABOVE_MODE,则num_copy_pixel_line等于解码的paletteRun/nCbs。请注意,在这种情况下,对paletteRun施加一致性约束,使其必须是nCbs的倍数。否则(即palette_run_type_flag不等于 COPY_ABOVE_MODE),num_copy_pixel_line设置为0。
[0338] 方法8:根据该方法,仅测试num_copy_pixel_line=0或CU_width。通过引入新的语法元素pred_from_neighboring_pixels提供调色板模式的快捷方式。如果 pred_from_neighboring_pixels为1,则显示palette_transpose_flag。
[0339] 如果pred_from_neighboring_pixels为1,并且palette_transpose_flag为0,则从上方CU的像素预测所有样本。如果pred_from_neighboring_pixels为1,且 palette_transpose_flag为1,则从左侧CU的像素预测所有样本。如果相邻像素不可用,则有两种方法来生成替换像素。根据第一种方法,可以使用帧内预测边界 (Intra prediction boundary)像素生成方法。它类似于没有残差编解码的水平或垂直帧内预测。根据第二种方法,使用调色板指数等于0的颜色。如果当前CU 的调色板表未被编解码(例如,num_copy_pixel_line等于CU_width),则使用调色板预测值表中的第一个调色板。
[0340] 表21示出了根据该方法的调色板编解码的示例性语法表。
[0341] 表21.
[0342]
[0343] 在表21中,语法元素pred_from_neighboring_pixels语法如注释(21-1)所示被合并。如果pred_from_neighboring_pixels为真实(true),palette_transpose_flag 被合并,并且整个CU的调色板索引被设置为-1,如注释(21-2)所示。
[0344] 在方法3至方法8中,仅标示一个palette_transpose_flag。如果 palette_transpose_flag等于0,则首先使用垂直复制像素模式,然后使用索引水平扫描。否则,首先使用水平复制像素,然后使用索引垂直扫描。
[0345] 或者,可以标示两个转置标志,例如palette_copy_pixel_transpose_flag和 palette_scan_transpose_flag。Palette_copy_pixel_transpose_flag表示来自相邻CU的复制像素模式的方向。Palette_scan_transpose_flag指示调色板扫描的方向。例如,palette_copy_pixel_transpose_flag等于0表示来自上方CU的复制像素模式,而 palette_copy_pixel_transpose_flag等于1表示来自左侧CU的复制像素模式。 Palette_scan_transpose_flag等于0表示使用水平扫描,而 Palette_scan_transpose_flag等于1表示使用垂直扫描。
[0346] 例如,在图11A中,palette_copy_pixel_transpose_flag为0, palette_scan_transpose_flag为0。在图11B中,palette_copy_pixel_transpose_flag为0 ,palette_scan_transpose_flag为1。在图11C中,palette_copy_pixel_transpose_flag 为1,palette_scan_transpose_flag为0。
[0347] 通过反向遍历扫描和旋转遍历扫描在CU上进行预测
[0348] 根据一个实施例,跨CU的预测可以用反向遍历扫描和旋转遍历扫描来实现。图12A示出了通过反向遍历扫描跨CU预测的示例,图12B示出了通过旋转遍历扫描跨CU预测的示例。两个扫描的正常索引映射编解码的扫描位置从0开始,结束于nCbS*nCbS-num_copy_pixel_line*nCbS–1。对于样本位置等于或大于 nCbS*nCbS-num_copy_pixel_line*nCbS的其余样本,PaletteIndexMap[xC] [yC]设置为-1,这意味着它们的像素值与相邻像素相同。
[0349] num_copy_pixel_line的上下文形成和二值化(Binarization)
[0350] 语法元素num_copy_pixel_line可以使用K阶(EG-K代码)的指数-哥伦布( Exponential-Golomb)码,K阶的截断的指数-哥伦布码(截断的EG-K码),N 位截断的一元码(Unary code)+EG-K代码,或调色板运行中使用的相同的二值化方法(二值化为palette_run_msb_id_plus1和palette_run_refinement_bits)。
[0351] 上下文二进制文件(context bins)可以用于编解码num_copy_pixel_line。例如,我们可以使用与num_copy_pixel_line的调色板运行中使用的相同的二值化方法。palette_run_msb_id_plus1的前N个位可以使用上下文编解码二进制文件(bins )。例如,N可以是3。剩余的二进制文件(bins)被编解码在旁路二进制文件( bins)中。可以通过调色板运行编解码共享上下文。例如,上下文可以与扩展的复制上方运行模式共享。
[0352] 由于num_copy_pixel_line等于CU_width和0的概率大于num_copy_pixel_line 作为其他数字的概率,因此修改了代码二值化以便将等于CU_width的 num_copy_pixel_line的码字(codeword)减小。例如,CU_width的值可以插入到用于二值化的码字表中的数字P(例如1)之前。等于或大于P的 num_copy_pixel_line的值在编码器侧将增加1。在解码器侧,如果解析的码字为P ,则表示num_copy_pixel_line等于CU_width。如果解析的码字小于P,则 num_copy_pixel_line等于解析的码字。如果解析的码字大于P,则 num_copy_pixel_line等于解析的码字减1。
[0353] 在另一个实施例中,两个附加位用于指示num_copy_pixel_line是否等于0、 CU_width、或其他数字。例如,“0”表示num_copy_pixel_line等于0,“10”表示 num_copy_pixel_line等于CU_width,而“11+codeord-L”表示num_copy_pixel_line 等于L+1。
[0354] 在另一个实施例中,使用两个附加位来指示num_copy_pixel_line是否等于0 、CU_width、或其他数字。例如,“0”表示num_copy_pixel_line等于CU_width,“10”表示num_copy_pixel_line等于0,而“11+codeord-L”表示 num_copy_pixel_line等于L+1。
[0355] 对于跨CU区域预测中提到的方法4至方法7,在调色板表编解码之后标示 num_copy_pixel_line。num_copy_pixel_line的二值化可以根据调色板表编解码的解码信息进行修改。例如,如果NumPredictedPaletteEntries和 num_signaled_palette_entries都为0,则这意味着至少一个样本行/列通过正常调色板模式进行编解码。因此,num_copy_pixel_line不应等于CU_width。因此, num_copy_pixel_line的码字范围被限制为从0到(CU_width-1)。例如,如果使用K阶的截断的指数-哥伦布码(截断的EG-K码)、N位截断的一元代码+EG-K 代码,或在调色板运行中使用的相同的二值化方法用于对num_copy_pixel_line 进行编解码,则cMax、MaxPaletteRun、或最大可能值设置为CU_width-1。用于调色板运行的二值化方法将把调色板运行二值化为palette_run_msb_id_plus1和 palette_run_refinement_bits。
[0356] 确定num_copy_pixel_line的搜索方法
[0357] 在另一个实施例中,公开了用于确定复制像素行数(即,num_copy_pixel_line )的搜索方法。
[0358] 方法1:在编码器侧,确定num_copy_pixel_line的值。从相邻像素预测前 num_copy_pixel_line列/行。剩下的样本用于导出剩余样本和索引映射的调色板。
[0359] 方法2:在编码器侧,使用整个CU的样本来首先导出调色板。根据该调色板表,可以使用速率失真优化(ate-distortion-optimization,简写为RDO)过程来确定num_copy_pixel_line的最佳值。内插(interpolation)可用于估计不同 num_copy_pixel_line的位成本。例如,如果num_copy_pixel_line=0的位成本为 R0,且CU_width为16,则num_copy_pixel_line=3的位成本等于R0*(CU_width -3)/CU_width(即13/16*R0)。
[0360] 在确定num_copy_pixel_line之后,从相邻像素预测前num_copy_pixel_line列 /行。剩余的样本用于重新导出剩余样本和索引映射的调色板。
[0361] 来自相邻CU的基于行的复制像素
[0362] 在前面的部分中,公开了来自相邻CU的基于行的复制像素用于调色板模式编解码。首先标示表示复制像素行数的语法元素num_copy_pixel_row,以从相邻 CU中的重构像素指示要预测的前num_copy_pixel_row行样本。类似的概念可以应用于其他模式,如帧间模式,帧内BC模式和帧内BC模式。
[0363] 在一个实施例中,来自相邻CU的基于行的复制像素被应用于帧间模式和/ 或帧内模式PU或CU。首先标示语法元素num_copy_pixel_row。如果 num_copy_pixel_row不等于0,则标示语法元素copy_pixel_row_direction_flag以指示复制像素行的方向。如果copy_pixel_row_direction_flag为0,则 num_copy_pixel_row表示从上方CU中的重构像素预测的前num_copy_pixel_row 行样本。如果copy_pixel_row_direction_flag为1,则num_copy_pixel_row表示从左 CU中的重构像素预测的前num_copy_pixel_row列样本。例如,图13示出了在帧间模式中编解码的8×8CU的示例。该CU的num_copy_pixel_row的值为3,且该CU 的copy_pixel_row_direction_flag为0。上三行中的预测值由上方CU的最后一行的重构像素值代替。其余像素由原始帧间模式预测。它类似于对整个CU/PU执行帧间模式预测,然后用相邻像素代替前num_copy_pixel_row行或列。
[0364] 帧内预测相邻像素构造可用于生成相邻参考像素。如果相邻像素不可用( 例如,在图像边界之外),则可以应用帧内预测中的参考像素填充方法来生成相邻参考像素。帧内预测中的平滑
滤波器可以被应用或关闭。
[0365] 语法元素num_copy_pixel_row和copy_pixel_row_direction_flag可以以CU级或PU级标示信号。可以在CU或PU前面标示Num_copy_pixel_row和 copy_pixel_row_direction_flag,或者可以在CU或PU的中间标示,或者可以在CU 或PU的末尾标示。例如,如果num_copy_pixel_row和 copy_pixel_row_direction_flag以CU级标示并且在CU前面标示,则可以在 part_mode之前标示num_copy_pixel_row和copy_pixel_row_direction_flag。可以根据num_copy_pixel_row和copy_pixel_row_direction_flag的值自适应地改变 part_mode的码字。例如,如果copy_pixel_row_direction_flag为0并且 num_copy_pixel_row等于或大于CU_height/2,则PART_2NxN和PART_2NxnU 无效。修改part_mode的码字二值化。例如,如果删除了PART_2NxN和 PART_2NxnU,则part_mode的二值化显示在表22中。
[0366] 表22.
[0367]
[0368]
[0369] 在表22中,具有线填充背景的文本对应于删除的文本。在另一个示例中,如果在CU级标示了num_copy_pixel_row和copy_pixel_row_direction_flag,并且在 CU的结尾处或在CU的中间标示num_copy_pixel_row和copy_pixel_row_direction_flag,则可以在part_mode之后标示num_opy_pixel_row 和copy_pixel_row_direction_flag。在接收到part_mode之后,可以限制 num_copy_pixel_row和copy_pixel_row_direction_flag的值。例如,如果part_mode 为PART_2NxN且copy_pixel_row_direction_flag为0,则num_copy_pixel_row的值将被限制在从0到CU_height/2的范围内。
[0370] 帧内边界(Intra Boundary)参考像素
[0371] 在帧内模式中,如果num_copy_pixel_row不为0,则相邻参考像素可以与从源自HEVC的像素相同。它与执行PU的帧内预测相同,然后用相邻CU的像素替换前几行或列。
[0372] 在另一个实施例中,如果num_copy_pixel_row不为0,则相邻参考像素的位置被改变。图14和图15示出了根据本实施例的改变相邻参考像素的位置的示例。在图14和图15中,num_copy_pixel_row为3,而copy_pixel_row_direction_flag 为0。上方参考像素和左上参考像素移动到第三行。如图14所示,从右上方的CU 复制右上方的参考像素。如图15所示,从第三行的最右边的像素复制右上方的参考像素。
[0373] 对于从相邻CU预测的区域的残差编解码
[0374] 根据一个实施例,如果num_copy_pixel_row为N且 copy_pixel_row_direction_flag为0,则从相邻CU预测上方N行。可以将上方N行的残差限制为0。根据另一实施例,可以标示上方N行的残差。对于帧间模式,应用HEVC残差四叉树。
[0375] num_copy_pixel_row的上下文形成和二值化
[0376] num_copy_pixel_row可以使用K阶的指数Golomb码(EG-K码),K阶截断的指数Golomb码(截断的EG-K代码),N位截断的一元码+EG-K代码或调色板运行中使用的相同二值化方法(即,被二值化为palette_run_msb_id_plus1和 palette_run_refinement_bits)。
[0377] 上下文二进制文件可以用于对num_copy_pixel_row进行编解码。例如,可以使用与调色板运行编解码中的num_copy_pixel_row相同的二值化方法。 palette_run_msb_id_plus1的前N个位可以使用上下文编解码的二进制文件。例如,N可以是3。其余的二进制文件被编解码在旁路二进制文件中。可以通过调色板运行编解码共享上下文。例如,上下文可以与扩展复制上方运行模式共享。
[0378] 由于num_copy_pixel_row等于CU_width和0的概率高于num_copy_pixel_row 作为其他数字的概率,因此可以修改代码二值化以减少等于CU_width的 num_copy_pixel_row的码字。例如,可以在码字表中的数字M(例如1)之前插入CU_width的值。等于或大于M的num_copy_pixel_row的值在编码器侧将增加1 。在解码器侧,如果解析的码字为M,则表示num_copy_pixel_row等于CU_width 。如果解析的码字小于M,则num_copy_pixel_row等于被解析的码字。如果解析的码字大于M,则num_copy_pixel_row等于解析的码字减1。
[0379] 根据另一实施例,使用两个附加位来指示num_copy_pixel_row是否等于0、 CU_width、或其他数。例如,“0”表示num_copy_pixel_row等于0,“10”表示 num_copy_pixel_row等于CU_width,“11+codeord-L”表示num_copy_pixel_row 等于L+1。在另一个例子中,“0”表示num_copy_pixel_row等于CU_width,“10”表示num_copy_pixel_row等于0,“11+codeord-L”表示num_copy_pixel_row等于L +1。
[0380] 对于在跨CU部分的预测中提到的方法4到方法7,可以在调色板表编解码之后标示num_copy_pixel_row。num_copy_pixel_row的二值化可以根据调色板表编解码的解码信息进行修改。例如,如果NumPredictedPaletteEntries和 num_signaled_palette_entries都为0,则表示至少有一个行/列的样本以正常调色板模式进行编解码。num_copy_pixel_row不应等于CU_width。因此, num_copy_pixel_row的码字范围被限制为从0到(CU_width-1)。例如,如果K 阶截断的指数–哥伦布码(截断的EG-K代码)、N位截断的一元代码+EG-K代码、在调色板运行中使用的相同二值化方法(即被二值化为 palette_run_msb_id_plus1和palette_run_refinement_bits)用于对 num_copy_pixel_row进行编解码,将cMax,MaxPaletteRun、或最大可能值设置为CU_width-1。num_copy_pixel_row不应等于CU_width[0381] 在该部分中,上述CU_width可以由来自相邻方法的CU级或PU级的基于行的复制像素的CU_height、PU_width、或PU_height替代。
[0382] 索引编解码数量
[0383] 在SCM-4.0调色板索引映射编解码中,首先标示索引数。为了标示索引的数量,首先导出变量“索引数量-调色板大小”。然后执行映射处理以将“索引数量 -调色板大小”映射到“映射值”。映射值使用与“coeff_abs_level_remaining”相同的二值化方法进行二值化,并标示。前缀部分由截断的Rice码表示。后缀部分由指数哥伦布码表示。这个二值化过程可以被认为具有输入cParam,并且cParam 被设置为(2+indexMax/6)。但是,indexMax/6需要划分或查找表操作。因此,根据本发明的实施例,将cParam设置为(2+indexMax/M),并且M是2 的整数次幂(power-of-2)(例如2n,n是整数)。因此,indexMax/M可以通过将indexMax右移到n位来实现。例如,cParam设置为(2+indexMax/4)或(2+ indexMax/8),可以通过分别将indexMax右移2或3位来实现。
[0384] 在编码/解析调色板索引映射之前聚集所有的跳出颜色
[0385] 在当前的HEVC SCC规范或先前版本中,在索引映射的编解码期间,调制板编解码中的跳出像素的值以其它规则索引以交错方式标示,或者在索引映射的编解码完成之后将像素值聚集在一起。根据本发明的一个实施例,所有跳出像素值被聚集在索引映射编解码之前。
[0386] 假设在当前编解码块内的不同位置存在N个跳出像素,其中N是正整数。在一个实施例中,在对该编解码块的调色板索引映射进行编码/解码之前,这些跳出像素的所有颜色值被一起编码/解码。以这种方式,当索引被解码为跳出索引时,其对应的像素值不再需要被解码。请注意,某些跳出像素可能具有相同的颜色值。在一个实施例中,每个跳出像素出现的像素值仍被写入位流。
[0387] 图16是根据该方法的实施例,用N=5解码跳出颜色的示例,其中每个跳出像素出现的像素值仍然被写入到位流中。在此示例中,使用水平遍历扫描。根据解码顺序,每个跳出像素可以在解码表中找到相应的颜色。
[0388] 在另一个实施例中,仅将非重复的颜色值写入位流中,并且为每个跳出像素发生标示这些写入的颜色的索引。
[0389] 图17示出了根据N=5的方法的实施例来解码跳出颜色的示例,其中只有非重复的颜色值被写入位流。在此示例中,使用水平遍历扫描。只有不重复的颜色被解码(例如M=3),并且用于每个跳出像素出现的该颜色表中的索引被标示通知(例如N=5)。根据解码顺序,每个跳出像素可以在解码表中找到相应的颜色。
[0390] 跳出颜色信令终止
[0391] 在一个实施例中,标示编码/解码的跳出颜色的数量。例如,在每个跳出颜色被编解码或解码之后,如果这是要被编码或解码的最后一个颜色,则使用1 位标志“end_of_escape_color_flag”来发出信号。当解码的 end_of_escape_color_flag为1时,不需要解码更多的跳出颜色。假设当前编解码块中有N个跳出颜色,最后的M个像素具有相同的颜色值,其中M和N是整数, M<=N。在另一个实施例中,仅需要发送这些M个像素的一个颜色值,并且 end_of_escape_color_flag被设置为1。最后(M-1)个跳出像素被推断为共享最后解码的跳出颜色值。对于N=5和M=3,该方法的示例在表23中示出。
[0392] 表23.
[0393]
[0394] 在另一个实施例中,在对颜色值进行编码/解码之前,显式地(explicitly) 标示了跳出颜色的总数。此外,end_of_escape_color_flag可以是旁路编解码或上下文编解码。
[0395] 在编解码块中允许的跳出颜色总数的限制
[0396] 可以通过在诸如序列级、图片级或片(slice)级的高级报头处设置最大允许数量来限制解码的跳出颜色的总数。
[0397] 如果达到该最大数目,则根据一个实施例,推断剩余的跳出像素以共享最后解码的跳出颜色的值。在另一个实施例中,推断剩余的跳出像素以共享特定解码的跳出颜色的值,例如最常用的颜色。
[0398] 从CU外部复制像素
[0399] 在SCM 3.0中,颜色索引值范围取决于调色板大小和跳出标志。如果跳出标志关闭,则最大索引值等于调色板大小。如果跳出标志打开,则最大索引值等于(调色板大小+1)。如果最大索引值等于N,则可能的索引值范围为0到(N-1 )。在SCM 3.0中,禁止等于0的最大索引值。如果最大索引值等于1,则CU中的所有颜色索引将被推定为0。如果只有一个可能的索引值,则假定所有颜色索引应为0。
[0400] 根据上文的公开,可以通过COPY_ABOVE来标示像素。在这种情况下,它不仅将复制上方像素的像素索引,而且还将复制上方像素的像素值。解码器可以从拷贝的像素值重构COPY_ABOVE中的像素,而不必引用调色板。如果上述像素跨越CU边界,根据上文的公开,分配相邻CU的相邻构造像素(NCP)的特殊索引(表示为N)。当像素由COPY_ABOVE标示时,它不仅会复制上方像素的像素索引(N),而且还将复制图18中由点填充区域指示的上方像素的像素值,其中图18展示了CU边界(1810)。
[0401] 基于复制NCP的像素值的方法,以零/一个索引值处理调色板编解码的CU的假设不是真的。对于最大索引值等于0的情况,可以从NCP中预测CU中的所有像素,如图19所示。
[0402] 如果最大索引值等于1,则不是所有的颜色索引都可以为0。像素的一部分可以是0,并且可以从NCP预测一部分像素,如图20所示。
[0403] 在图19和图20所示的例子中,在SCM3.0中没有相应的语法可以使用。因此,以下公开了用于标示这些情况的新语法。
[0404] 用于跨CU的索引预测的语法元素
[0405] 在SCM3.0中,调色板编解码CU包含以下语法:
[0406] ·Palette_share_flag等于1指定调色板大小等于先前的previousPetteBoxEntries,整个调色板条目与先前的调色板条目相同。
[0407] ●Palette_transpose_flag等于1指定将转置过程应用于当前CU的关联调色板索引。Palette_transpose_flag等于0指定转置过程不应用于当前CU 的关联调色板索引。
[0408] ●Palette_escape_val_present_flag指定跳出编解码的样本值。
[0409] ●Palette_prediction_run[i]指定了先前的调色板previousPaletteEntries 中当前重用的索引和下一个重新调用的调色板条目的索引之间的差异,但有以下例外:palette_prediction_run等于0表示当前和下一个重用条目的索引之间的差异为1,palette_prediction_run等于1表示不再重用先前调色板previousPaletteEntries的更多条目。
[0410] ●Num_signaled_palette_entries指定调色板中针对当前编解码单元明确标示的条目数。
[0411] ·Palette_entries指定颜色分量cIdx的调色板中的第i个元素
[0412] ·Palette_run_coding()指定索引映射的运行编解码模式。
[0413] 为了提供跨CU的索引预测的语法,根据本发明的实施例公开了以下语法示例:
[0414] 语法示例1:添加新的标志all_pixel_from_NCP_flag。如果 all_pixel_from_NCP_flag关闭,其他语法与SCM3.0相同。在第一行中,可以标示复制运行模式以允许跨CU预测。如果all_pixel_from_NCP_flag打开,则意味着(imply)所有像素都将从NCP预测。Palette_transpose_flag可以标示来自左 NCP或以上NCP的预测。也可以标示其他预测方向。如果 all_pixel_from_NCP_flag打开,则可以跳过信令palette_share_flag、 palette_escape_val_present_flag、palette_prediction_run、 num_signaled_palette_entries、palette_entries、或palette_run_coding()。
[0415] 图21示出了根据上述示例的用于支持跨CU的索引预测的信令的示例性流程图。在步骤2110中,测试all_pixel_from_NCP_flag是否等于1。如果结果为“是”,则执行步骤2130。如果结果为“否”,则执行步骤2120。在步骤2130中, palette_transpose_flag被标示以指示来自左NCP或上方NCP的预测。在步骤2120 中,基于SCM3.0的语法用于跨CU的索引预测。
[0416] 语法示例2:添加新标志any_pixel_from_NCP_flag。如果 any_pixel_from_NCP_flag关闭,其他语法与SCM3.0相同。在第一行中,复制运行模式没有标示(没有跨CU的预测)。如果any_pixel_from_NCP_flag打开,则暗示(imply)要从NCP中预测部分像素。编码器可以标示palette_share_flag、 palette_prediction_run、num_signaled_palette_entries、 palette_escape_val_present_flag,并且解码器可以基于该信息计算最大索引值。如果最大索引值等于0,则从NCP预测所有像素,并且可以跳过 palette_run_coding()。如果最大索引值大于0,则从NCP预测部分像素,并且可以标示palette_run_coding()。
[0417] 图22示出了根据上述示例的用于支持跨CU的索引预测的信令的示例性流程图。如步骤2210所示,测试any_pixel_from_NCP_flag是否等于1。如果结果为“是”,则执行步骤2230。如果结果为“否”,则执行步骤2220。在步骤2220中,基于SCM3.0的语法用于索引预测,且不需要跨CU预测。在步骤2230中,标示包括 palette_share_flag、palette_prediction_run、num_signaled_palette_entries、以及palette_escape_val_present_flag的各种语法元素。解码器基于该信息计算最大索引值,并且在步骤2240中检查最大索引值是否等于
0。如果结果为“是”,则执行步骤2260。如果结果为“否”,则执行步骤2250。在步骤2250中,标示 palette_transpose_flag和palette_run_coding()。在步骤2260中,标示 palette_transpose_flag,并且跳过palette_run_coding()(即,从NCP预测所有像素)。
[0418] 语法示例3:添加新标志any_pixel_from_NCP_flag。如果 any_pixel_from_NCP_flag关闭,其他语法与SCM3.0相同。在第一行中,复制运行模式没有标示(没有跨CU的预测)。如果any_pixel_from_NCP_flag打开,则暗示要从NCP中预测部分像素。编码器可以标示palette_share_flag、 palette_prediction_run、num_signaled_palette_entries、 palette_escape_val_present_flag,并且解码器可以基于该信息计算最大索引值。如果最大索引值等于0,则从NCP预测所有像素,并且可以跳过 palette_run_coding(),如图2所示。否则,其他语法与SCM3.0相同。在第一行中,复制运行模式被标示(跨CU预测)。请注意,如果最大索引值等于1,则可以跳过palette_run_coding()和palette_transpose_flag。
[0419] 图23示出了根据上述示例的用于支持跨CU的索引预测的信令的示例性流程图。该流程图与图22中基本相同,除了最大索引不为0的情况(即,来自步骤 2240的“否”路径)之外。在这种情况下,如步骤2310所示,根据SCM3.0的语法用于跨CU的预测。
[0420] 语法示例4:语法示例1中的“all_pixel_from_NCP_flag”和语法示例2或3中的“any_pixel_from_NCP_flag”可以组合成palette_prediction_run。在SCM3.0中, palette_prediction_run是运行长度编解码。如果第一次运行(即 palette_prediction_run[0])等于固定或派生值,则all_pixel_from_NCP_flag或 any_pixel_from_NCP_flag被推断为打开(on)。该值可以是0或1。
[0421] 语法示例5:如图24的步骤2410所示,编码器可以标示palette_share_flag、 palette_prediction_run,和num_signaled_palette_entries信号。然后,可以根据信息导出调色板大小。
[0422] 检查调色板大小以确定其是否等于0,如步骤2420所示。如果调色板大小大于0(即,来自步骤2420的“否”路径),其他语法与SCM3.0相同,如步骤2430 所示。在第一行中,可以根据是否是跨CU预测来标示复制运行模式。
[0423] 如果调色板大小等于0(即,来自步骤2420的“是”路径),则标示 signal_from_NCP_flag。在步骤2440中检查any_pixel_from_NCP_flag是否打开。如果any_pixel_from_NCP_flag关闭(即,来自步骤2440的“否”路径),则 palette_escape_val_present_flag被推断为打开,如步骤2450所示,并且基于 SCM3.0的语法用于索引预测,且不需要跨CU预测。如果 any_pixel_from_NCP_flag打开,则标示palette_escape_val_present_flag。如果 any_pixel_from_NCP_flag打开(即,来自步骤2440的“是”路径)且 palette_escape_val_present_flag关闭(即,来自步骤2460的“否”路径),则可以从 NCP预测所有像素,并且可以跳过palette_run_coding(),如步骤2470所示。如果any_pixel_from_NCP_flag打开(即,来自步骤2440的“是”路径),且 palette_escape_val_present_flag打开,则部分像素从NCP预测,并且可以标示 palette_run_coding(),如步骤2480所示。
[0424] 语法示例6:该示例与语法示例5基本相同,除了any_pixel_from_NCP_flag 是打开的(即,来自步骤2440的“是”路径)以及palette_escape_val_present_flag 是打开的(即,来自步骤2460的“是”路径)情况。在这种情况下,如图25的步骤 2510所示,所有像素都是跳出索引。
[0425] 语法示例7:编码器可以标示palette_share_flag、palette_prediction_run、 num_signaled_palette_entries,如图26的步骤2610所示。然后,可以根据信息导出调色板大小。
[0426] 在步骤2620中检查调色板大小以确定其是否等于0。如果调色板大小等于0 (即,来自步骤2620的“是”),则标示all_pixel_from_NCP_flag并且在步骤2640 中检查all_pixel_from_NCP_flag是否打开。如果all_pixel_from_NCP_flag打开( 即,来自步骤2640的“是”路径),则所有像素被暗示为预测自NCP,如步骤2660 所示。在这种情况下,可以标示palette_transpose_flag以暗示预测来自左NCP或上方NCP。也可以标示其他预测方向。否则,语法与步骤2650中所示的SCM3.0 相同。在第一行中,可以标示复制运行模式(即跨CU的预测)。
[0427] 语法示例8:在语法示例8中,可以标示运行编解码以指示图27中的情况。图27中的流程图类似于图26中的流程图。然而,图26中的步骤2630和步骤2650 被替换为步骤2710和步骤2720(即,标示palette_escape_val_Present_flag、 palette_transcope_flag和palette_run_coding())。
[0428] 语法示例9:如图28A的步骤2810所示,编码器可以发送palette_share_flag 、palette_reuse_flag()、num_signaled_palette_entries、 palette_escape_val_present_flag,且解码器可以基于该信息计算最大指标值。如果最大索引值等于0或1(即,来自步骤2820的“否”路径),则可以跳过 palette_run_coding()。如果最大索引值等于0(即,来自步骤2830的“否”路径 ),则如步骤2850所示,从NCP预测所有像素。如步骤2840所示,如果最大索引值大于1(即来自步骤2820的“是”路径),则可以标示palette_transpose_flag以暗示来自左NCP或上方NCP的预测。也可以标示其它预测方向。如果最大索引值等于1(即来自步骤2830的“是”路径),则CU中的所有颜色索引将被推断为0或跳出,如步骤2860所示。
[0429] 语法示例10:如图28B的步骤2812所示,编码器可以标示palette_share_flag 、palette_reuse_flag()、num_signaled_palette_entries、 palette_escape_val_present_flag,解码器可以基于该信息计算最大索引值。如果最大索引值等于0(即,来自步骤2822的“否”路径),则如步骤2832所示,从NCP 预测所有像素。如果最大索引值大于0(即,来自步骤2822的“是”路径),则可以标示palette_transpose_flag以暗示来自左NCP或上方NCP的预测,如步骤2842 所示。也可以标示其它预测方向。可以跳过Palette_run_coding()。如果最大索引值大于0,则可以标示palette_transpose_flag和palette_run_coding(),如图20所示。
[0430] 在上述语法示例中,NCP可以是最靠近的上方行或最靠近的左边列。如果 NCP行的数量大于1(例如,两个最靠近的上方行或两个最靠近的左边列),可能需要额外的信令来指示哪个NCP行被用于预测。在语法示例中“全部像素从 NCP预测”的情况下,NCP可以被限制为最近的上方行或最靠近的左边列。
[0431] 虽然根据本发明的实施例,使用特定语法元素来说明用于支持跨CU的索引预测的语法示例,但是这些特定语法元素不应被解释为对本发明的限制。在不脱离本发明的精神的情况下,本领域技术人员可以使用其他语法元素和语义来跨CU执行索引预测。
[0432] 用于启用跨CU的索引预测的语法元素
[0433] 对于跨CU的索引预测,可以在PPS(图像参数集)或SPS(序列参数集)中标示启用标志。此外,只有当SPS中的palette_mode_enabled_flag为真时,才能标示标志。否则其将被推断为假。当跨CU的索引预测的启用标志为假时,跨CU的索引预测被禁用。在另一实施例中,当跨CU的索引预测的启用标志为假时,可以将相邻的索引或值推定为预定值。例如,可以将每个颜色分量的相邻索引设置为0,并且可以将相邻的值设置为128。在本发明中,预测块中的索引或值的方法不限于相邻像素(或块)的信息。
[0434] 运行模式的上下文选择:在SCM 3.0中,用于索引映射编解码的语法元素 palette_mode被上下文编码。palette_mode有两个上下文。根据上方索引的 palette_mode选择上下文。然而,对于第一行的索引,没有上方索引。
[0435] 在这种情况下公开了处理上下文选择的几种方法:
[0436] 1.第一行的上下文使用一个固定的上下文。该上下文可以是当上方索引通过INDEX-RUN编解码所用的第一个上下文,或者是当上方索引由COPY-运行模式编解码时所用的第二个上下文。
[0437] 2.第一行的索引可以是第三个上下文。
[0438] 3.CU中的所有索引使用相同的上下文来编解码palette_mode。可以根据CU大小选择上下文,并且CU中的所有索引使用相同的上下文来编解码palette_mode。在这种情况下可以有两个上下文。如果CU大小大于固定或派生的
阈值,则使用第一个上下文。否则,使用另一个上下文。在另一示例中,上下文的数量可以减少到1。在这种情况下,所有CU大小的上下文是相同的。
[0439] 修改的帧内预测方案
[0440] 在另一个实施例中,为了实现与图19和图20中公开的预测方案相同的效果,基于HEVC、HEVC范围扩展、或HEVC SCC中的常规帧内预测,语法元素 rqt_root_cbf被标示以指示从根源于(rooted from)当前CU的TU(变换单元)是否具有残差。rqt_root_cbf的信令可以与HEVC中CU间(inter CU)冗余编解码的 rqt_root_cbf信令相同。
[0441] 基于根据本发明的实施例的具有rqt_root_cbf的帧内预测,可以将 rqt_root_cbf选择性地应用于包括亮度和
色度帧内预测模式的帧内预测模式的子集。rqt_root_cbf仅用于子集中的那些帧内预测模式。在一个示例中,修改方案仅适用于等于水平或垂直预测模式的亮度帧内预测模式,而色度帧内预测模式未被修改。
[0442] 在另一个实施例中,一个CU级标志用于帧内CU(intra CU)指示是否存在用于对该内部CU编解码的残差信号。类似地,该标志可以选择性地应用于帧内预测模式的子集。
[0443] 帧内块复制(IntraBC)搜索
[0444] 本发明的一个实施例改变了IntraBC的源像素。用于IntraBC预测和补偿的像素可以是取决于像素的位置的未滤波像素(即,去块(deblock)之前)或滤波像素(即,在去块和SAO(采样自适应偏移)之后)。
[0445] 例如,如图29所示,用于IntraBC预测和补偿的像素可以基于当前CTU(2910 )和左CTU(2920)中的像素的未滤波像素。其他像素仍然使用滤波像素。图 29示出了根据本发明的实施例的源像素的示例,其中点填充像素来自未滤波的像素,并且透明像素来自用于IntraBC的滤波像素。
[0446] 在另一个示例中,如图30所示,用于IntraBC预测和补偿的像素是当前CTU (3010)、左CTU(3020),以及上方CTU(3030)的底部四行和左上CTU( 3040)的底部四行中的像素的未滤波像素。其他像素使用滤波像素。在图30中,点填充像素来自未经滤波的像素,并且透明像素来自用于IntraBC的滤波像素。
[0447] 在另一示例中,如图31所示,用于IntraBC预测和补偿的像素是当前CTU、左方N个CTU中,以及上方CTU的底部四行和N个左上CTU的底部四行的像素的未滤波像素。N是正整数。其他像素使用滤波像素。在图31中,点填充像素来自未经滤波的像素,而透明像素来自IntraBC的滤波像素。
[0448] 在另一示例中,用于IntraBC预测和补偿的像素是当前CTU、上方CTU的底部四行和左CTU的右四列中的像素的未滤波像素。其他像素使用如图32所示进行滤波。在图32中,点填充像素来自未滤波的像素,并且透明像素来自IntraBC 的滤波像素。
[0449] 在另一示例中,用于IntraBC预测和补偿的像素是当前CTU、N个左CTU,上方CTU中的底部四行和N个左上方CTU的底部四行,以及第(N+1)个左方 CTU的右方四列中的像素的未滤波像素。N是正整数值。其他像素使用滤波像素。在图33中,点填充像素来自未滤波的像素,而透明像素来自IntraBC的滤波像素。
[0450] 图34示出了结合本发明的实施例的用于调色板编解码块共享变换系数缓冲器的系统的示例性流程图。系统在步骤3410中确定当前块的当前预测模式,并在步骤3420中将存储区域指定为变换系数缓冲器。在步骤3430中,如果当前预测模式是帧内预测模式或帧间预测,将由帧内预测或帧间预测产生的当前块的预测残差的变换系数相关的第一信息存储在变换系数缓冲器中。在步骤3440中,如果当前预测模式是调色板编解码模式,则将与当前块相关联的调色板数据相关的信息存储在变换系数缓冲器中。在步骤3450中,如果当前块在帧内预测模式或帧间预测模式下编解码,则基于与变换系数相关的信息,对当前块进行编码或解码,或者如果当前块在调制板编解码模式下编解码,则基于与调色板数据相关的存储在变换系数缓冲器中的信息,对当前块进行编解码或解码。
[0451] 呈现上述描述以使得本领域普通技术人员能够在特定应用及其要求的上下文中实施本发明。对所描述的实施例的各种修改对于本领域技术人员将是显而易见的,并且本文定义的一般原理可以应用于其他实施例。因此,本发明不旨在限于所示出和描述的具体实施例,而是符合与本文所公开的原理和新颖特征相一致的最广范围。在上述详细描述中,示出了各种具体细节以便提供对本发明的透彻理解。然而,本领域技术人员将理解,可以实施本发明。
[0452] 如上所述的本发明的实施例可以以各种
硬件、
软件代码或两者的组合来实现。例如,本发明的实施例可以是集成到视频压缩芯片中的一个或多个
电子电路或集成到视频压缩软件中的程序代码,以执行本文所述的处理。本发明的实施例也可以是要在
数字信号处理器(DSP)上执行以执行本文所述的处理的程序代码。本发明还可以涉及由计算机处理器、数字
信号处理器、
微处理器、或现场可编程
门阵列(FPGA)执行的许多功能。可以通过执行定义本发明所体现的特定方法的机器可读软件代码或
固件代码来将这些处理器配置成执行根据本发明的特定任务。软件代码或固件代码可以以不同的编程语言和不同的格式或
风格开发。也可以为不同的目标平台编译软件代码。然而,根据本发明软件代码的不同的代码格式、样式和语言以及配置代码的其他方式将不会脱离本发明的精神和范围。
[0453] 在不脱离本发明的精神或基本特征的情况下,本发明可以以其它具体形式实施。所描述的例子仅在所有方面被认为是说明性的而不是限制性的。因此,本发明的范围由所附权利要求而不是前面的描述来指示。属于权利要求的等同物的含义和范围内的所有变化将被包括在其范围内。