CN104486633B - 视频错误掩藏方法及装置 - Google Patents
视频错误掩藏方法及装置 Download PDFInfo
- Publication number
- CN104486633B CN104486633B CN201410630848.2A CN201410630848A CN104486633B CN 104486633 B CN104486633 B CN 104486633B CN 201410630848 A CN201410630848 A CN 201410630848A CN 104486633 B CN104486633 B CN 104486633B
- Authority
- CN
- China
- Prior art keywords
- macro block
- mistake
- pixel
- mag
- hides
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本申请提出视频错误掩藏方法及装置。方法包括:接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧;对于每一视频帧,从该视频帧的每一slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失,若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码。本申请更具方便性、灵活性、普适性,成本更低。
Description
技术领域
本申请涉及视频处理技术领域,尤其涉及视频错误掩藏方法及装置。
背景技术
现有的基于解码端的视频错误掩藏策略嵌入在解码器内部,依赖于解码器,在解码的同时进行差错检测,然后在每解完一帧时进行错误掩藏。
现有的基于网络传输的视频错误掩藏方法,主要分为3大类:基于时域的错误恢复方法;基于空域的错误恢复方法;基于识别的错误恢复方法。其中,基于时域的错误恢复方法主要是以已经接收到的历史正确数据为基础,使用不同的权值或者判别方法从历史数据中得到已受损宏块的最优的替代数据;基于空域的错误恢复方法主要以当前帧的未受损部分为基础,根据受损部分周围的纹理特性、色彩特性、形状特性,通过图像修复的方法来恢复出受损数据;基于识别的错误恢复方法是以人脸识别、场景识别算法为基层,对历史数据中已经出现的人脸、场景等建模,并且对当前帧进行分析,识别出受损物体来自已经建模物体的哪个部分,然后从模型中找出对应部分,补偿受损区域。
对于基于解码端的视频错误掩藏策略,现有的方法只是将错误掩藏功能嵌入在解码器内部,这样导致的结果是错误掩藏功能完全依赖于解码器,当对解码器进行更新时,错误掩藏功能也就必须得做更新,没有灵活性。并且对于现有的方法,硬件解码器的更新也会给产品增加更大的成本,其中包括错误掩藏功能更新的时间成本和人力成本。
目前大多数视频通信是按字节数或者是宏块个数将数据分成slice(条带)进行打包传输,如果网络传输出现抖动或者丢包,势必会对视频质量有极大影响。现有的方法大多只是针对宏块的丢失,对实际的打包方式下所产生的丢包,比如较大面积的slice丢失,恢复效果较差。
现有的3类主要的视频错误掩藏方法都存在一定的问题,具体如下:
一、对于基于时域的视频错误掩藏,现有的方法有的只是简单地拷贝前一帧相同位置的数据,或者在前一帧到多帧中,用边界匹配的方法搜索边界最适合的块,这样的方法恢复质量太差,或者耗时太久,难以在智能设备、嵌入式系统中满足实时性的需求。
二、对于基于空域的视频错误掩藏,现有的方法只是使用了各种不同的插值方法,用受损宏块边缘的像素来插值出受损的宏块数据。但目前大部分方法都偏于理论化,条件过于理想化,例如受损宏块周围的宏块往往都是正确的,但在实际视频编码、网络传输中,是不可能将每个宏块单独打包传输,并且很大一部分视频宏块熵编码是上下文相关,也就是说如果前面的宏块丢失,后面的宏块就是收到也是无法正确解码使用的;并且插值算法过于复杂,在嵌入式设备上也难以达到实时。
三、对于基于识别的视频错误掩藏,现有的方法只停留在实验室阶段,一个视频的内容十分复杂,根本难以使用现有的方法对所有的场景物体进行建模,目前对人脸的建模掩盖比较成熟,只能应用在有人脸出现并且人脸部分出现丢失的情况下,才能有效,并且对未在历史帧中出现过的人脸部分也难以准确地估计,并且难以达到实时。
发明内容
本申请提供视频错误掩藏方法及装置,以提高视频错误掩藏的普适性、灵活性。
本申请的技术方案是这样实现的:
一种视频错误掩藏方法,该方法包括:
接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧;
对于每一视频帧,从该视频帧的每一条带slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失,若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码。
所述对该视频帧进行错误掩藏包括:
判断该视频帧是否为P帧,若为P帧,则针对该视频帧中的每一丢失slice中的每一受损宏块,若该受损宏块为帧间宏块,则按照该宏块在该slice中的奇、偶位置,按照奇、偶、奇的顺序依次对各受损帧间宏块进行错误掩藏。
所述对各受损帧间宏块进行错误掩藏包括:
对于任一受损帧间宏块,选择该宏块的各预设方向上的邻接可利用宏块的运动矢量作为该宏块的候选运动矢量;
分别利用每个候选运动矢量对该宏块进行预测;
对于每次预测后得到的宏块,将该预测宏块与周围的所有可利用宏块进行压缩域边界匹配,得到压缩域边界匹配值;
当计算出所有预测宏块对应的压缩域边界匹配值时,将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块。
所述计算出所有预测宏块对应的压缩域边界匹配值之后、将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小压缩域边界匹配值是否小于第一预设阈值,若是,则执行所述将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对于每次预测后得到的宏块,针对该预测宏块的每条边界,根据该边界上的每个像素与本宏块内相邻像素的差值,估计出每个像素的最小差值方向,根据该边界上每个像素的最小差值方向,计算出该边界的最小差值方向,将该预测宏块的所有边界的最小差值方向相加,得到该预测宏块的最佳方向匹配值,当计算出所有预测宏块的最佳方向匹配值时,将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块。
所述计算出所有预测宏块的最佳方向匹配值之后、将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小的最佳方向匹配值是否小于第二预设阈值,若小于,则执行所述将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对当前受损帧间宏块的邻接可利用宏块进行双线性插值,得到错误掩藏宏块。
所述对该视频帧进行错误掩藏包括:
判断该视频帧是否为I帧,若为I帧,则对该视频帧中每个丢失slice中的每个受损宏块,判断该宏块的边缘是强边缘还是弱边缘,若是强边缘,则计算出该宏块的边界方向,然后采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;否则,以该视频帧的前一帧为参考帧,在(0,0)运动矢量和该前一帧同位置处的运动矢量中选择一个作为最佳运动矢量,采用最佳运动矢量对当前受损宏块进行错误掩藏。
所述判断该宏块的边缘是强边缘还是弱边缘包括:
A、预先将prewitt算子的角度分为q方向,其中,q>1;
B、分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的预设行数的像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的预设行数的像素;对于所选择的每个像素,计算该像素点的幅度和角度,其中,像素点的角度以prewitt算子的角度表示;
C、根据所选择的每个像素点的角度,将所选择的所有像素点分为q类;针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的角度;在q个mag[index]中,选择最大的mag[index]值,设为max_mag对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc;
D、初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1;
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果q个mag[index]中的最大值max_mag远远大于其它q-1个值,则dir_flag=1,condition1为q个mag[index]中除最大值max_mag之外的q-1个值中与max_mag接近的值的个数;
E、判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc;否则,确定当前受损宏块的边缘为弱边缘;
其中,“&&”为与运算符号,sum_mag为q个mag[index]的和值,Th1、Th1、Th3为预设阈值。
所述采用两点方向延伸插值方法对当前受损宏块进行错误掩藏包括:
对于当前受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二插值点,将第一插值点与该像素点的距离作为第一权值,将第二插值点与该像素点的距离作为第二权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素值。
一种视频错误掩藏装置,该装置包括:
帧提取模块:接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧;
丢失检测及恢复模块:对于每一视频帧,从该视频帧的每一条带slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失;若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码。
所述丢失检测及恢复模块对该视频帧进行错误掩藏包括:
判断该视频帧是否为P帧,若为P帧,则针对该视频帧中的每一丢失slice中的每一受损宏块,若该受损宏块为帧间宏块,则按照该宏块在该slice中的奇、偶位置,按照奇、偶、奇的顺序依次对各受损帧间宏块进行错误掩藏。
所述丢失检测及恢复模块对各受损帧间宏块进行错误掩藏包括:
对于任一受损帧间宏块,选择该宏块的各预设方向上的邻接可利用宏块的运动矢量作为该宏块的候选运动矢量;
分别利用每个候选运动矢量对该宏块进行预测;
对于每次预测后得到的宏块,将该预测宏块与周围的所有可利用宏块进行压缩域边界匹配,得到压缩域边界匹配值;
当计算出所有预测宏块对应的压缩域边界匹配值时,将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块。
所述丢失检测及恢复模块计算出所有预测宏块对应的压缩域边界匹配值之后、将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小压缩域边界匹配值是否小于第一预设阈值,若是,则执行所述将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对于每次预测后得到的宏块,针对该预测宏块的每条边界,根据该边界上的每个像素与本宏块内相邻像素的差值,估计出每个像素的最小差值方向,根据该边界上每个像素的最小差值方向,计算出该边界的最小差值方向,将该预测宏块的所有边界的最小差值方向相加,得到该预测宏块的最佳方向匹配值,当计算出所有预测宏块的最佳方向匹配值时,将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块。
所述丢失检测及恢复模块计算出所有预测宏块的最佳方向匹配值之后、将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小的最佳方向匹配值是否小于第二预设阈值,若小于,则执行所述将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对当前受损帧间宏块的邻接可利用宏块进行双线性插值,得到错误掩藏宏块。
所述丢失检测及恢复模块对该视频帧进行错误掩藏包括:
判断该视频帧是否为I帧,若为I帧,则对该视频帧中每个丢失slice中的每个受损宏块,判断该宏块的边缘是强边缘还是弱边缘,若是强边缘,则计算出该宏块的边界方向,然后采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;否则,以该视频帧的前一帧为参考帧,在(0,0)运动矢量和该前一帧同位置处的运动矢量中选择一个作为最佳运动矢量,采用最佳运动矢量对当前受损宏块进行错误掩藏。
所述丢失检测及恢复模块判断该宏块的边缘是强边缘还是弱边缘包括:
A、预先将prewitt算子的角度分为q方向,其中,q>1;
B、分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的预设行数的像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的预设行数的像素;对于所选择的每个像素,计算该像素点的幅度和角度,其中,像素点的角度以prewitt算子的角度表示;
C、根据所选择的每个像素点的角度,将所选择的所有像素点分为q类;针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的角度;在q个mag[index]中,选择最大的mag[index]值,设为max_mag对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc;
D、初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1;
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果q个mag[index]中的最大值max_mag远远大于其它q-1个值,则dir_flag=1,condition1为q个mag[index]中除最大值max_mag之外的q-1个值中与max_mag接近的值的个数;
E、判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc;否则,确定当前受损宏块的边缘为弱边缘;
其中,“&&”为与运算符号,sum_mag为q个mag[index]的和值,Th1、Th1、Th3为预设阈值。
所述丢失检测及恢复模块采用两点方向延伸插值方法对当前受损宏块进行错误掩藏包括:
对于当前受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二插值点,将第一插值点与该像素点的距离作为第一权值,将第二插值点与该像素点的距离作为第二权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素。
可见,本申请中,错误掩藏功能位于解码器之前,即在解码之前已经错误掩藏完毕,错误掩藏功能独立于解码器之外,从而当解码器切换或更新时,错误掩藏功能不必随之切换或更新,更具方便性、灵活性、普适性,成本更低。
附图说明
图1为本申请一实施例提供的视频错误掩藏方法流程图;
图2为本申请实施例提供的错误掩藏模块检测视频帧是否有slice丢失的方法流程图;
图3为本申请实施例提供的错误掩藏模块对视频帧进行错误掩藏的方法流程图;
图4为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块进行错误掩藏的方法流程图;
图5为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块通过压缩域边界匹配方法进行错误掩藏的方法流程图;
图6为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块通过方向边界匹配方法进行错误掩藏的方法流程图;
图7为本申请实施例提供的对I帧进行错误掩藏的方法流程图;
图8为本申请实施例提供的视频错误掩藏装置的组成示意图。
具体实施方式
图1为本申请一实施例提供的视频错误掩藏方法流程图,其具体步骤如下:
步骤101:客户端接收视频码流,将该视频码流传输到解复用模块,解复用模块对该视频码流进行解析,得到该视频码流的文件信息如:文件格式等。
步骤102:解复用模块将该视频码流传输到解析器,解析器从该视频码流中提取出每一视频帧,将每一视频帧输出到错误掩藏模块。
步骤103:对于每一视频帧,错误掩藏模块检测该视频帧是否有slice丢失,若是,执行步骤105;否则,执行步骤104。
步骤104:错误掩藏模块将该视频帧直接输出到解码器,解码器对该视频帧进行解码后显示,本流程结束。
步骤105:错误掩藏模块对该视频帧中的丢失slice进行错误掩藏,然后将该视频帧输出到解码器,解码器对该视频帧进行解码后显示。
图2为本申请实施例提供的错误掩藏模块检测视频帧是否有slice丢失的方法流程图,其具体步骤如下:
步骤201:对于视频帧的每一slice,错误掩藏模块从该slice中解析出该slice的描述信息。
slice的描述信息包括:该slice自身的描述信息和该slice包含的各宏块的描述信息,宏块的描述信息如:宏块的坐标等。
传输视频帧前,先将每一视频帧分成多个slice,然后分别将每个slice打成一个包进行传输。每个slice中包含多个宏块。slice包由slice的描述信息与压缩编码后的宏块数据组成。
本步骤中,无需对宏块数据进行解码。
步骤202:错误掩藏模块根据接收到的每相邻两个slice的描述信息,判断该相邻两个slice之间是否有slice丢失,若是,执行步骤203;否则,执行步骤204。
错误掩藏模块可将当前slice的描述信息中包含的起始宏块的宏块坐标与前一个slice的描述信息中包含的最后一个宏块的宏块坐标进行比较,以判断是否有slice丢失。
步骤203:错误掩藏模块将该丢失slice中的所有宏块都标记为受损宏块,转至下一slice,返回步骤201。
步骤204:错误掩藏模块转至下一slice,返回步骤201。
图3为本申请实施例提供的错误掩藏模块对视频帧进行错误掩藏的方法流程图,其具体步骤如下:
步骤301:错误掩藏模块通过步骤201~204确认当前视频帧存在丢失slice。
步骤302:对于当前视频帧的每一丢失slice,错误掩藏模块根据该slice的邻接可利用slice,判断当前slice的画面是否平滑,若是,执行步骤303;否则,执行步骤304。
根据该slice的邻接可利用slice,判断当前slice的画面是否平滑属于成熟技术,这里不再赘述。
步骤303:错误掩藏模块在压缩域对当前视频帧的受损宏块进行错误掩藏,对当前视频帧错误掩藏完毕,将当前视频帧输出到解码器,解码器对当前视频帧进行解码后显示,本流程结束。
步骤304:错误掩藏模块判断当前视频帧是否为I帧,若是,执行步骤305;否则,执行步骤306。
步骤305:对当前视频帧的每一受损宏块,错误掩藏模块检测该受损宏块的边缘的强弱,若为强边缘,则采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;若为弱边缘,则采用运动矢量预测方法对当前受损宏块进行错误掩藏;对当前视频帧错误掩藏完毕,将当前视频帧输出到解码器,解码器对当前视频帧进行解码后显示,本流程结束。
步骤306:对于当前视频帧中的每一受损宏块,错误掩藏模块判断该受损宏块为帧内宏块还是帧间宏块,若为帧内宏块,执行步骤307;若为帧间宏块,执行步骤308。
步骤307:错误掩藏模块对该受损宏块采用双线性插值方法进行错误掩藏,错误掩藏完毕,转至当前视频帧的下一受损帧内宏块,返回步骤307,直至所有受损帧内宏块都错误掩藏完毕。
双线性插值方法即,对受损宏块的预设方向的邻接可利用宏块进行双线性插值计算,得到受损宏块的错误掩藏宏块。
步骤308:错误掩藏模块根据各受损帧间宏块在当前帧的奇、偶位置,按照奇、偶、奇的顺序依次对各受损帧间宏块采用压缩域的边界匹配,或方向边界匹配,或双线性插值方法进行错误掩藏。
即,错误掩藏模块首先对各受损帧间宏块中在当前帧中处于奇数位置的宏块进行错误掩藏,然后对处于偶数位置的宏块进行错误掩藏,最后重新对处于奇数位置的宏块进行错误掩藏,以优化错误掩藏效果。
图4为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块进行错误掩藏的方法流程图,其具体步骤如下:
步骤401:对于当前P帧的所有受损帧间宏块,根据各受损帧间宏块的宏块坐标X、Y,计算X^Y^0、X^Y^1,X^Y^2。
宏块坐标指的是以宏块为单位,宏块在当前帧中的坐标,其中,X为横坐标,Y为纵坐标。
步骤402:当对当前帧的所有受损帧间宏块的X、Y计算完毕时,错误掩藏模块确定对所有受损帧间宏块进行错误掩藏的顺序为:X^Y^0==1的宏块最先,X^Y^1==1的宏块次之,X^Y^0==2的宏块最后。
步骤403:按照步骤402确定的错误掩藏顺序,错误掩藏模块依次从受损帧间宏块中选择一个作为当前受损帧间宏块F。
步骤404:错误掩藏模块选择当前受损帧间宏块F的N(N≥1)个邻接的可利用宏块的运动矢量作为宏块F的候选运动矢量。
例如:预先设定可以选择宏块F的左上、上、右上、下、左、右方向的6个邻接宏块的运动矢量作为宏块F的候选运动矢量,若任一候选运动矢量不可用则将其丢弃。
步骤405:错误掩藏模块分别利用宏块F的每个候选运动矢量对宏块F进行预测,得到F′n(n=1、2、…、N)。
步骤406:对于每个预测后的宏块F′n,错误掩藏模块将F′n与四周的可利用宏块进行压缩域边界匹配,当对所有F′n(n=1、2、…、N)的压缩域边界匹配都完成时,判断其中最小的压缩域边界匹配结果是否小于预设第一阈值,若是,执行步骤470;否则,执行步骤408。
步骤407:错误掩藏模块将最小的压缩域边界匹配结果对应的F′n作为宏块F的错误掩藏宏块,转至下一个受损帧间宏块,返回步骤404。
步骤408:对于每个预测后的宏块F′n,错误掩藏模块将F′n与四周的可利用宏块进行方向边界匹配,当对所有F′n(n=1、2、…、N)的方向边界匹配都完成时,判断其中最小的方向边界匹配结果是否小于预设第二阈值,若是,执行步骤409;否则,执行步骤410。
步骤409:错误掩藏模块将最小的方向边界匹配结果对应的F′n作为宏块F的错误掩藏宏块,转至下一个受损帧间宏块,返回步骤404;否则,执行步骤408。
步骤410:错误掩藏模块采用双线性插值方法对当前帧间受损宏块F进行错误掩藏,错误掩藏完毕,转至下一个受损帧间宏块,返回步骤404。
图5为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块通过压缩域边界匹配方法进行错误掩藏的方法流程图,其具体步骤如下:
步骤501:错误掩藏模块从当前受损帧间宏块F的N个候选运动矢量中依次选择一个候选运动矢量Mn(n=1、2、…、N),利用选择的候选运动矢量Mn对宏块F进行预测,得到预测后的宏块F′n。
步骤502:针对宏块F′n的每个方向上的边界,错误掩藏模块在压缩域计算该边界与该方向的邻接可利用宏块的边界的边界差值,将四个方向上的边界差值相加,得到候选运动矢量Mn对应的压缩域边界匹配值。
宏块F′n共有四个边界:上边界、下边界、左边界、右边界,则分别根据以DCT(Discrete Cosine Transform,离散余弦变换)系数表示的宏块的像素值,计算宏块F′n的上边界上的所有像素点与上邻宏块的下边界上的所有像素点的差值和,计算宏块F′n的下边界上的所有像素点与下邻宏块的上边界上的所有像素点的差值和,计算宏块F′n的左边界上的所有像素点与左邻宏块的右边界上的所有像素点的差值和,计算宏块F′n的右边界上的所有像素点与右邻宏块的左边界上的所有像素点的差值和,将四个方向的差值和相加,得到候选运动矢量Mn对应的压缩域边界匹配值。
步骤503:错误掩藏模块在计算得到的N个压缩域边界匹配值中选择最小的压缩域边界匹配值。
步骤504:错误掩藏模块判断最小的压缩域边界匹配值是否小于第一预设阈值,若是,执行步骤505;否则,执行步骤506。
步骤505:错误掩藏模块将最小的压缩域边界匹配值对应的候选运动矢量作为宏块F的最佳运动矢量,将最佳运动矢量对应的预测后的宏块作为宏块F的错误掩藏宏块,本流程结束。
步骤506:错误掩藏模块开始采用方向边界匹配方法选择最佳运动矢量。
本步骤506的具体实现见图6所示实施例。
图6为本申请实施例提供的错误掩藏模块对P帧内的受损帧间宏块通过方向边界匹配方法进行错误掩藏的方法流程图,其具体步骤如下:
步骤601:针对当前受损帧间宏块F的任一预测后的宏块F′n(n=1、2、…、N),错误掩藏模块将宏块F′n的左上顶点作为原点,将水平向右方向作为x坐标的正方向,将垂直向下方向作为y坐标的正方向;从宏块F′n的左上顶点开始在上边界上从左向右依次选取像素点,针对每个选取的像素点(x,y)(设为上边界的第j个像素点)进行如公式(1)所示的差值计算:
其中,f(x,y)表示宏块F′n上(x,y)位置处的像素值;a只是为了区别不同的Dist',没有实际的物理意义。
本实施例直接利用了步骤501得到的N个预测后的宏块F′n。
步骤602:错误掩藏模块根据公式(2)计算得到像素点(x,y)的最小差值方向Tj。
Tj=min(Dist'a-1,Dist'a,Dist'a+1) (2)
步骤603:错误掩藏模块记录当前的方向Tj,根据当前方向Tj将下一个像素点(x,y)(即上边界的第j+1个像素点,需要先令x=x+1)的计算公式调整为如下公式(3):
若Tj=Dist'a-1,则
Tj+1=min(Dist'a-1,Dist'a)
若Tj=Dist'a+1,则
Tj+1=min(Dist'a,Dist'a+1)
否则,
Tj+1=min(Dist'a-1,Dist'a,Dist'a+1) (3)
重复执行步骤603,得到宏块F′n的上边界上的所有(x,y)对应的Tj。
可见,在公式(1)、(3)中都需要用到像素值,因此,需要先对对应宏块进行解码。
步骤604:错误掩藏模块根据公式(4)计算宏块F′n的上边界的最小差值方向
其中,Tj表示宏块F′n的上边界上的第j个像素点的最小差值方向,J为宏块的宽度。
步骤605:参照步骤601~604,错误掩藏模块计算出宏块F′n的下边界、左边界、右边界的最小差值方向
步骤606:错误掩藏模块计算宏块F′n的最佳方向匹配值
步骤607:对于每个候选运动矢量Mn(n=1、2、…、N),错误掩藏模块都通过上述步骤601~606计算出对应的最佳方向匹配值
步骤608:错误掩藏模块在N个中选择最小的
步骤609:错误掩藏模块判断最小的是否小于第二预设阈值,若是,执行步骤610;否则,执行步骤611。
步骤610:错误掩藏模块将最小的对应的候选运动矢量作为宏块F的最佳运动矢量,将最佳运动矢量对应的F′n作为宏块F的错误掩藏宏块,本流程结束。
步骤611:错误掩藏模块采用双线性插值方法对宏块F进行错误掩藏。
图7为本申请实施例提供的错误掩藏模块对I帧进行错误掩藏的方法流程图,其具体步骤如下:
步骤701:错误掩藏模块确认当前存在丢失slice的帧为I帧。
步骤702:对于当前帧中的每个受损宏块,错误掩藏模块检测该宏块的边缘的强弱,若是强边缘,执行步骤703;若为弱边缘,执行步骤704。。
本步骤在检测受损宏块边缘的强弱时,具体采用的是间接计算邻接可利用宏块的幅度和角度的方法,过程如下:
步骤01:预先将prewitt算子的角度分为q(q>1)方向,例如:分为8个方向:{-67.5°,-45°,-22.5°,0°,22.5°,45°,67.5°,90°}。
步骤02:分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的4行像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的4行像素。
设宏块的大小为16*16,则在每个邻接可利用宏块中选择的像素点数目为:4*16。
步骤03:对于所选择的每个像素(x,y),计算该像素点的幅度Mag(x,y)和角度θ(x,y)。
(x,y)为像素在当前宏块中的横、纵坐标。
其中,Magx为像素点水平方向梯度,Mayy为像素点垂直方向梯度。
θ(x,y)的计算过程如下:
先计算然后将分别与tgθ'(θ'={-67.5°,-45°,-22.5°,0°,22.5°,45°,67.5°,90°})比较,将相差最小的tgθ'对应的θ'作为θ(x,y)。例如:若与tg22.5°相差最小,则令θ(x,y)=22.5°。
为了加快像素点的幅度的计算速度,可预先建立一个二分查找表中,该表中列出
了所有的取值以及对应的的取值;
此后,当本步骤中针对任一所选择的像素(x,y),要计算该像素点的幅度Mag(x,y)时,先计算然后在二分查找表中直接查找对应的Mag(x,y),因此,避免了复杂的开根号运算。
为了加快像素点的角度θ(x,y)的计算速度,可预先计算出8个方向:{-67.5°,-45.0°,-22.5°,0°,22.5°,45.0°,67.5°,90°}的正切值,然后将该正切值放大100倍;此后,当本步骤中针对任一所选择的像素(x,y),要计算该像素点的角度θ(x,y)时,先计算然后将放大100倍,将与上述8个方向的正切值的100倍进行比较,将相差最小的方向作为像素点(x,y)的θ(x,y)。
步骤04:根据所选择的每个像素点的θ(x,y),将所选择的所有像素点分为8类。
即,将θ(x,y)=-67.5°的像素点归为一类,将θ(x,y)=-45°的像素点归为一类,将θ(x,y)=-22.5°的像素点归为一类,将θ(x,y)=0°的像素点归为一类,将θ(x,y)=22.5°的像素点归为一类,将θ(x,y)=45°的像素点归为一类,将θ(x,y)=67.5°的像素点归为一类,将θ(x,y)=90°的像素点归为一类。
步骤05:针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的方向,即θ(x,y)。
步骤06:在8个mag[index](index={-67.5°,-45°,-22.5°,0°,22.5°,45°,67.5°,90°})中,选择最大的mag[index]值(设为max_mag)对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc。
步骤07:初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1。
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果8个mag[index]中的最大值max_mag远远大于其它7个值(例如:最大值大于次大值的5倍),则dir_flag=1,condition1为8个mag[index]中除最大值max_mag之外的7个值中与max_mag接近的值的个数,例如:与max_mag相差10以内的值的个数,如:最大值max_mag与次大值、第三大值、第四大值相差都在10以内,则condition1=4。
步骤08:判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,执行步骤09;否则,执行步骤10。
其中,“&&”为与运算符号,sum_mag为8个mag[index](index={-67.5°,-45°,-22.5°,0°,22.5°,45°,67.5°,90°})的和值,Th1、Th1、Th3为预设阈值,可根据经验确定。
步骤09:确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc,本过程结束。
步骤10:确定当前受损宏块的边缘为弱边缘。
步骤703:错误掩藏模块采用两点方向延伸插值方法对当前受损宏块进行错误掩藏,本流程结束。
具体地,对于受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一个插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二个插值点,将第一个插值点与该像素点的距离作为第一个插值点的权值,将第二个插值点与该像素点的距离作为第二个插值点的权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素。
在实际应用中,为了保证错误掩藏的可靠性,在选择插值点时,左、右方向分别最多选择3次,即,若该直线在左方向上与邻接宏块相交的第1、2、3个点都不可用,则放弃继续寻找,同理,该直线在右方向上与邻接宏块相交的第1、2、3个点都不可用,则放弃继续寻找。当左方向上未寻找到插值点时,则以当前帧中的像素点(0,y)代替,当右方向上未寻找到插值点时,则以当前帧中的像素点(x,0)代替。
步骤704:错误掩藏模块以前一帧作为参考帧,选取(0,0)运动矢量和前一帧同位置处的运动矢量作为候选运动矢量,并采用与P帧内的帧间宏块相同的错误掩藏方法(如图4~6所示流程)对当前受损宏块进行错误掩藏。
即,先分别采用每个候选运动矢量对当前受损宏块进行预测,然后通过压缩域边界匹配方法选择其中一个作为最佳运动矢量,若未选择出,则再采用方向边界匹配方法选择其中一个作为最佳运动矢量,若还未选择出,则采用双线性插值方法对当前受损宏块进行错误掩藏;若选择出最佳运动矢量,则将采用最佳运动矢量预测出的宏块作为当前受损宏块的错误掩藏宏块。
需要说明的是,当对一视频帧的受损宏块全部错误掩藏完毕时,若在错误掩藏过程中对该视频帧进行了解码(如:若有受损宏块采用了方向边界匹配方法或者插值方法进行错误掩藏,则需对视频帧的可利用宏块进行解码),则还需要对视频帧中的已解码宏块进行编码后才能发往解码器。
另外,需要说明的是,对于相邻或相近的受损宏块,其邻接可利用宏块可能重复,此时为了避免冗余解码,在对一个宏块进行解码前,先将该宏块的运动矢量与已解码宏块的运动矢量进行对比,若相同,则确认该宏块已解码过,直接利用之前的解码结果即可。
图8为本申请实施例提供的视频错误掩藏装置的组成示意图,其主要包括:帧提取模块和丢失检测及恢复模块,其中:
帧提取模块:接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧,将每一视频帧输出到丢失检测及恢复模块。
丢失检测及恢复模块:对于帧提取模块输入的每一视频帧,从该视频帧的每一条带slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失,若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码。
优选地,丢失检测及恢复模块对该视频帧进行错误掩藏包括:
判断该视频帧是否为P帧,若为P帧,则针对该视频帧中的每一丢失slice中的每一受损宏块,若该受损宏块为帧间宏块,则按照该宏块在该slice中的奇、偶位置,按照奇、偶、奇的顺序依次对各受损帧间宏块进行错误掩藏。
优选地,丢失检测及恢复模块对各受损帧间宏块进行错误掩藏包括:
对于任一受损帧间宏块,选择该宏块的各预设方向上的邻接可利用宏块的运动矢量作为该宏块的候选运动矢量;
分别利用每个候选运动矢量对该宏块进行预测;
对于每次预测后得到的宏块,将该预测宏块与周围的所有可利用宏块进行压缩域边界匹配,得到压缩域边界匹配值;
当计算出所有预测宏块对应的压缩域边界匹配值时,将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块。
优选地,丢失检测及恢复模块计算出所有预测宏块对应的压缩域边界匹配值之后、将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小压缩域边界匹配值是否小于第一预设阈值,若是,则执行所述将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对于每次预测后得到的宏块,针对该预测宏块的每条边界,根据该边界上的每个像素与本宏块内相邻像素的差值,估计出每个像素的最小差值方向,根据该边界上每个像素的最小差值方向,计算出该边界的最小差值方向,将该预测宏块的所有边界的最小差值方向相加,得到该预测宏块的最佳方向匹配值,当计算出所有预测宏块的最佳方向匹配值时,将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块。
优选地,丢失检测及恢复模块计算出所有预测宏块的最佳方向匹配值之后、将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小的最佳方向匹配值是否小于第二预设阈值,若小于,则执行所述将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对当前受损帧间宏块的邻接可利用宏块进行双线性插值,得到错误掩藏宏块。
优选地,丢失检测及恢复模块对该视频帧进行错误掩藏包括:
判断该视频帧是否为I帧,若为I帧,则对该视频帧中每个丢失slice中的每个受损宏块,判断该宏块的边缘是强边缘还是弱边缘,若是强边缘,则计算出该宏块的边界方向,然后采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;否则,以该视频帧的前一帧为参考帧,在(0,0)运动矢量和该前一帧同位置处的运动矢量中选择一个作为最佳运动矢量,采用最佳运动矢量对当前受损宏块进行错误掩藏。
优选地,丢失检测及恢复模块判断该宏块的边缘是强边缘还是弱边缘包括:
A、预先将prewitt算子的角度分为q方向,其中,q>1;
B、分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的预设行数的像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的预设行数的像素;对于所选择的每个像素,计算该像素点的幅度和角度,其中,像素点的角度以prewitt算子的角度表示;
C、根据所选择的每个像素点的角度,将所选择的所有像素点分为q类;针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的角度;在q个mag[index]中,选择最大的mag[index]值,设为max_mag对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc;
D、初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1;
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果q个mag[index]中的最大值max_mag远远大于其它q-1个值,则dir_flag=1,condition1为q个mag[index]中除最大值max_mag之外的q-1个值中与max_mag接近的值的个数;
E、判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc;否则,确定当前受损宏块的边缘为弱边缘;
其中,“&&”为与运算符号,sum_mag为q个mag[index]的和值,Th1、Th1、Th3为预设阈值。
优选地,丢失检测及恢复模块采用两点方向延伸插值方法对当前受损宏块进行错误掩藏包括:
对于当前受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二插值点,将第一插值点与该像素点的距离作为第一权值,将第二插值点与该像素点的距离作为第二权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素。
本申请实施例中的错误掩藏模块和错误掩藏装置可以位于嵌入式设备上。
从本发明实施例可以看出:错误掩藏模块位于解码器之前,即在解码之前已经错误掩藏完毕,错误掩藏功能独立于解码器之外,从而当解码器切换或更新时,错误掩藏功能不必随之切换或更新,更具方便性、灵活性、普适性,成本更低。
另外,对I帧、P帧采用了不同的错误掩藏方法,在对P帧内的受损帧间宏块和I帧的弱边缘受损宏块进行错误掩藏时,增加了对最佳候选运动矢量的有效性判断,同时在对I帧进行错误掩藏时,根据受损宏块的强、弱边缘采用不同的方法,提高了错误掩藏的质量。
申请人针对如下环境,分别采用现有技术和本申请实施例进行试验:
选择slice随机丢包率为10%、分辨率为1280×720的四个测试视频序列,运行环境为基于ARMv7Cortex A8、1.2GHz(四核)CPU、1.5GB内存的嵌入式片上系统。
得到的试验对比结果如表1所示:
表1现有技术与本申请实施例的试验结果对比
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (14)
1.一种视频错误掩藏方法,其特征在于,该方法包括:
接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧;
对于每一视频帧,从该视频帧的每一条带slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失,若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码;
所述对该视频帧进行错误掩藏包括:
对于当前P帧的所有受损帧间宏块,根据各受损帧间宏块的宏块坐标X、Y,计算X^Y^0、X^Y^1,X^Y^2,当对当前帧的所有受损帧间宏块的X、Y计算完毕时,确定对所有受损帧间宏块进行错误掩藏的顺序为:X^Y^0==1的宏块最先,X^Y^1==1的宏块次之,X^Y^0==2的宏块最后,按照确定的错误掩藏顺序依次从受损帧间宏块中选择一个作为当前受损帧间宏块进行错误掩藏。
2.根据权利要求1所述的方法,其特征在于,所述从受损帧间宏块中选择一个作为当前受损帧间宏块进行错误掩藏包括:
选择当前受损帧间宏块的各预设方向上的邻接可利用宏块的运动矢量作为该宏块的候选运动矢量;
分别利用每个候选运动矢量对该宏块进行预测;
对于每次预测后得到的宏块,将该预测宏块与周围的所有可利用宏块进行压缩域边界匹配,得到压缩域边界匹配值;
当计算出所有预测宏块对应的压缩域边界匹配值时,将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块。
3.根据权利要求2所述的方法,其特征在于,所述计算出所有预测宏块对应的压缩域边界匹配值之后、将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小压缩域边界匹配值是否小于第一预设阈值,若是,则执行所述将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对于每次预测后得到的宏块,针对该预测宏块的每条边界,根据该边界上的每个像素与本宏块内相邻像素的差值,估计出每个像素的最小差值方向,根据该边界上每个像素的最小差值方向,计算出该边界的最小差值方向,将该预测宏块的所有边界的最小差值方向相加,得到该预测宏块的最佳方向匹配值,当计算出所有预测宏块的最佳方向匹配值时,将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块。
4.根据权利要求3所述的方法,其特征在于,所述计算出所有预测宏块的最佳方向匹配值之后、将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小的最佳方向匹配值是否小于第二预设阈值,若小于,则执行所述将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对当前受损帧间宏块的邻接可利用宏块进行双线性插值,得到错误掩藏宏块。
5.根据权利要求1所述的方法,其特征在于,所述对该视频帧进行错误掩藏包括:
判断该视频帧是否为I帧,若为I帧,则对该视频帧中每个丢失slice中的每个受损宏块,判断该宏块的边缘是强边缘还是弱边缘,若是强边缘,则计算出该宏块的边界方向,然后采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;否则,以该视频帧的前一帧为参考帧,在(0,0)运动矢量和该前一帧同位置处的运动矢量中选择一个作为最佳运动矢量,采用最佳运动矢量对当前受损宏块进行错误掩藏。
6.根据权利要求5所述的方法,其特征在于,所述判断该宏块的边缘是强边缘还是弱边缘包括:
A、预先将prewitt算子的角度分为q方向,其中,q>1;
B、分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的预设行数的像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的预设行数的像素;对于所选择的每个像素,计算该像素点的幅度和角度,其中,像素点的角度以prewitt算子的角度表示;
C、根据所选择的每个像素点的角度,将所选择的所有像素点分为q类;针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的角度;在q个mag[index]中,选择最大的mag[index]值,设为max_mag对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc;
D、初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1;
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果q个mag[index]中的最大值max_mag远远大于其它q-1个值,则dir_flag=1,condition1为q个mag[index]中除最大值max_mag之外的q-1个值中与max_mag接近的值的个数;
E、判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc;否则,确定当前受损宏块的边缘为弱边缘;
其中,“&&”为与运算符号,sum_mag为q个mag[index]的和值,Th1、Th1、Th3为预设阈值。
7.根据权利要求6所述的方法,其特征在于,所述采用两点方向延伸插值方法对当前受损宏块进行错误掩藏包括:
对于当前受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二插值点,将第一插值点与该像素点的距离作为第一权值,将第二插值点与该像素点的距离作为第二权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素值。
8.一种视频错误掩藏装置,其特征在于,该装置包括:
帧提取模块:接收压缩编码后的视频码流,从该视频码流中提取出每一视频帧;
丢失检测及恢复模块:对于每一视频帧,从该视频帧的每一条带slice中解析出该slice的描述信息,根据相邻两slice的描述信息,判断该相邻两slice之间是否有slice丢失;若该视频帧有slice丢失,则对该视频帧进行错误掩藏,错误掩藏完毕发送给解码器进行解码;若该视频帧无slice丢失,则直接将该视频帧发送给解码器进行解码;
所述丢失检测及恢复模块对该视频帧进行错误掩藏包括:
对于当前P帧的所有受损帧间宏块,根据各受损帧间宏块的宏块坐标X、Y,计算X^Y^0、X^Y^1,X^Y^2,当对当前帧的所有受损帧间宏块的X、Y计算完毕时,确定对所有受损帧间宏块进行错误掩藏的顺序为:X^Y^0==1的宏块最先,X^Y^1==1的宏块次之,X^Y^0==2的宏块最后,按照确定的错误掩藏顺序依次从受损帧间宏块中选择一个作为当前受损帧间宏块进行错误掩藏。
9.根据权利要求8所述的装置,其特征在于,所述丢失检测及恢复模块从受损帧间宏块中选择一个作为当前受损帧间宏块进行错误掩藏包括:
选择当前受损帧间宏块的各预设方向上的邻接可利用宏块的运动矢量作为该宏块的候选运动矢量;
分别利用每个候选运动矢量对该宏块进行预测;
对于每次预测后得到的宏块,将该预测宏块与周围的所有可利用宏块进行压缩域边界匹配,得到压缩域边界匹配值;
当计算出所有预测宏块对应的压缩域边界匹配值时,将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块。
10.根据权利要求9所述的装置,其特征在于,所述丢失检测及恢复模块计算出所有预测宏块对应的压缩域边界匹配值之后、将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小压缩域边界匹配值是否小于第一预设阈值,若是,则执行所述将最小压缩域边界匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对于每次预测后得到的宏块,针对该预测宏块的每条边界,根据该边界上的每个像素与本宏块内相邻像素的差值,估计出每个像素的最小差值方向,根据该边界上每个像素的最小差值方向,计算出该边界的最小差值方向,将该预测宏块的所有边界的最小差值方向相加,得到该预测宏块的最佳方向匹配值,当计算出所有预测宏块的最佳方向匹配值时,将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块。
11.根据权利要求10所述的装置,其特征在于,所述丢失检测及恢复模块计算出所有预测宏块的最佳方向匹配值之后、将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块之前进一步包括:
判断最小的最佳方向匹配值是否小于第二预设阈值,若小于,则执行所述将最小的最佳方向匹配值对应的预测宏块作为错误掩藏宏块的动作;否则,对当前受损帧间宏块的邻接可利用宏块进行双线性插值,得到错误掩藏宏块。
12.根据权利要求8所述的装置,其特征在于,所述丢失检测及恢复模块对该视频帧进行错误掩藏包括:
判断该视频帧是否为I帧,若为I帧,则对该视频帧中每个丢失slice中的每个受损宏块,判断该宏块的边缘是强边缘还是弱边缘,若是强边缘,则计算出该宏块的边界方向,然后采用两点方向延伸插值方法对当前受损宏块进行错误掩藏;否则,以该视频帧的前一帧为参考帧,在(0,0)运动矢量和该前一帧同位置处的运动矢量中选择一个作为最佳运动矢量,采用最佳运动矢量对当前受损宏块进行错误掩藏。
13.根据权利要求12所述的装置,其特征在于,所述丢失检测及恢复模块判断该宏块的边缘是强边缘还是弱边缘包括:
A、预先将prewitt算子的角度分为q方向,其中,q>1;
B、分别在当前受损宏块的左上、上、右上邻接可利用宏块中选择最下方的预设行数的像素;分别在当前受损宏块的左下、下、右下邻接可利用宏块中选择最上方的预设行数的像素;对于所选择的每个像素,计算该像素点的幅度和角度,其中,像素点的角度以prewitt算子的角度表示;
C、根据所选择的每个像素点的角度,将所选择的所有像素点分为q类;针对每类像素点,计算该类像素点的幅度和mag[index],其中,index表示该类像素点的角度;在q个mag[index]中,选择最大的mag[index]值,设为max_mag对应的index为当前受损宏块的最佳方向,设该最佳方向index=best_arc;
D、初始化num=0,遍历mag[index],当(mag[index]>0.65*mag[best_arc]||dir_flag==0||condition1>=3)时,num=num+1;
其中,“||”为或运算符号,dir_flag为宏块明显方向性标识,如果q个mag[index]中的最大值max_mag远远大于其它q-1个值,则dir_flag=1,condition1为q个mag[index]中除最大值max_mag之外的q-1个值中与max_mag接近的值的个数;
E、判断(max_mag>Th1*sum_mag||num≤Th2)&&max_mag>Th3是否成立,若是,确定当前受损宏块的边缘为强边缘,该受损宏块的边界方向估计为best_arc;否则,确定当前受损宏块的边缘为弱边缘;
其中,“&&”为与运算符号,sum_mag为q个mag[index]的和值,Th1、Th1、Th3为预设阈值。
14.根据权利要求13所述的装置,其特征在于,所述丢失检测及恢复模块采用两点方向延伸插值方法对当前受损宏块进行错误掩藏包括:
对于当前受损宏块内的任一像素点,以该受损宏块的best_arc为斜率,以该像素点为必经点划一条直线,选择该直线与左方向上第一个邻接可利用宏块第一次相交的点作为第一插值点,选择该直线与右方向上第一个邻接可利用宏块第一次相交的点作为第二插值点,将第一插值点与该像素点的距离作为第一权值,将第二插值点与该像素点的距离作为第二权值,对该两个插值点进行插值计算,得到该像素点的错误掩藏像素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410630848.2A CN104486633B (zh) | 2014-11-11 | 2014-11-11 | 视频错误掩藏方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410630848.2A CN104486633B (zh) | 2014-11-11 | 2014-11-11 | 视频错误掩藏方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104486633A CN104486633A (zh) | 2015-04-01 |
CN104486633B true CN104486633B (zh) | 2019-01-18 |
Family
ID=52761125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410630848.2A Active CN104486633B (zh) | 2014-11-11 | 2014-11-11 | 视频错误掩藏方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104486633B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111953979B (zh) * | 2020-07-16 | 2024-06-04 | 西安万像电子科技有限公司 | 图像处理方法及装置 |
CN114827632A (zh) * | 2022-04-11 | 2022-07-29 | 维沃移动通信有限公司 | 视频帧错误隐藏方法、装置、电子设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102685509A (zh) * | 2012-04-26 | 2012-09-19 | 中山大学 | 一种基于场景转换的视频差错控制方法 |
CN103051903A (zh) * | 2012-12-24 | 2013-04-17 | 四川九洲电器集团有限责任公司 | 一种空域自适应的h.264视频i帧差错掩盖方法 |
CN103096093A (zh) * | 2012-12-24 | 2013-05-08 | 四川九洲电器集团有限责任公司 | 一种h.264视频p帧的差错掩盖方法 |
CN103813177A (zh) * | 2012-11-07 | 2014-05-21 | 辉达公司 | 一种视频解码系统和方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100459717C (zh) * | 2005-04-20 | 2009-02-04 | 华为技术有限公司 | 基于h.264的压缩视频传输误码消除方法 |
JP5162939B2 (ja) * | 2007-03-30 | 2013-03-13 | ソニー株式会社 | 情報処理装置および方法、並びにプログラム |
-
2014
- 2014-11-11 CN CN201410630848.2A patent/CN104486633B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102685509A (zh) * | 2012-04-26 | 2012-09-19 | 中山大学 | 一种基于场景转换的视频差错控制方法 |
CN103813177A (zh) * | 2012-11-07 | 2014-05-21 | 辉达公司 | 一种视频解码系统和方法 |
CN103051903A (zh) * | 2012-12-24 | 2013-04-17 | 四川九洲电器集团有限责任公司 | 一种空域自适应的h.264视频i帧差错掩盖方法 |
CN103096093A (zh) * | 2012-12-24 | 2013-05-08 | 四川九洲电器集团有限责任公司 | 一种h.264视频p帧的差错掩盖方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104486633A (zh) | 2015-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106296578B (zh) | 一种图像处理方法及装置 | |
US7596243B2 (en) | Extracting a moving object boundary | |
CN105430415B (zh) | 一种3d‑hevc深度视频帧内快速编码方法 | |
CN100463527C (zh) | 一种多视点视频图像视差估计的方法 | |
CN107371022B (zh) | 应用于hevc医学影像无损编码的帧间编码单元快速划分方法 | |
CN101360246B (zh) | 结合3d人脸模型的视频差错掩盖方法 | |
CN103069802B (zh) | 重构图像的当前块的方法和对应的编码方法、对应的装置 | |
US20120044998A1 (en) | Technique for estimating motion and occlusion | |
CN102542282B (zh) | 一种无源图像马赛克检测方法及装置 | |
TW200401569A (en) | Method and apparatus for motion estimation between video frames | |
CN103856781B (zh) | 一种自适应阈值的视频流多纹理方向错误隐藏方法 | |
WO2015035769A1 (zh) | 运动矢量的获取方法、获取装置、视频编解码器及其方法 | |
US9883200B2 (en) | Method of acquiring neighboring disparity vectors for multi-texture and multi-depth video | |
CN103327327B (zh) | 用于高性能视频编码hevc的帧间预测编码单元选择方法 | |
CN102724525B (zh) | 一种基于中心凹恰可觉察失真模型的深度视频编码方法 | |
CN107801093B (zh) | 视频渲染方法、装置、计算机设备和可读存储介质 | |
CN108615241B (zh) | 一种基于光流的快速人体姿态估计方法 | |
CN109672896A (zh) | 利用深度信息的视频编码方法及装置 | |
CN104869421A (zh) | 基于全局运动估计的视频显著性检测方法 | |
CN104683783A (zh) | 一种自适应深度图滤波方法 | |
CN104486633B (zh) | 视频错误掩藏方法及装置 | |
CN112561951A (zh) | 一种基于帧差绝对误差和sad的运动和亮度检测方法 | |
CN106791828A (zh) | 基于机器学习的高性能视频转码方法及其转码器 | |
CN106165425B (zh) | 利用深度信息的视频编码方法及装置 | |
Lu et al. | Sprite generation for frame-based video coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |