用于图像代码化的熵启发定向滤波

文档序号:144848 发布日期:2021-10-22 浏览:37次 >En<

阅读说明:本技术 用于图像代码化的熵启发定向滤波 (Entropy-inspired directional filtering for image coding ) 是由 于尔基·阿拉奎亚拉 罗德·范德韦恩 托马斯·菲施巴赫尔 于 2019-11-25 设计创作,主要内容包括:使用熵启发定向滤波来代码化图像块。在编码期间,针对图像块的至少一些像素基于该至少一些像素中的相应像素的相邻像素确定强度差。针对这些像素中的每一个像素基于强度差来估计角度。然后基于所估计的角度确定图像块的主滤波方向。根据主滤波方向对图像块进行滤波,以移除与图像块相关联的倾斜边缘。然后,经滤波的图像块被编码成编码图像。在解码期间,接收指示针对编码图像块的像素所估计的角度的角度图,并且使用该角度图来确定图像块的主滤波方向。然后,可以根据主滤波方向对图像块进行滤波,然后输出经滤波的图像块以用于显示或存储。(The image blocks are coded using entropy-inspired directional filtering. During encoding, an intensity difference is determined for at least some pixels of an image block based on neighboring pixels of respective ones of the at least some pixels. An angle is estimated based on the intensity difference for each of the pixels. The main filtering direction of the image block is then determined based on the estimated angle. The image block is filtered according to a primary filtering direction to remove a sloping edge associated with the image block. The filtered image blocks are then encoded into an encoded image. During decoding, an angle map indicating angles estimated for pixels of an encoded image block is received and a primary filtering direction for the image block is determined using the angle map. The image block may then be filtered according to the primary filtering direction and then output the filtered image block for display or storage.)

用于图像代码化的熵启发定向滤波

背景技术

图像内容表示大量在线内容。网页可以包括多个图像,并且渲染网页所花费的大部分时间和资源专用于渲染那些图像以供显示。接收和渲染图像以供显示所需的时间和资源量部分地取决于编码图像的方式。这样,通过使用编码和解码技术来减少图像的总数据大小,可以更快地渲染图像,并且因此更快地渲染包括图像的网页。

发明内容

本文公开用于使用熵启发定向滤波的图像代码化的系统和技术等。

根据本公开的实现方式的一种用于编码图像块的方法包括将角度候选阵列的索引处的值初始化为零。阵列的索引的数目等于可用于对图像块进行编码的角度候选的数目。索引中的每一个索引对应于角度候选中的一个角度候选。针对图像块的多个像素中的每个当前像素:基于当前块的相邻像素的强度值的差来确定强度差;通过计算当前像素的强度差的函数来估计当前像素的角度;以及增加角度候选阵列内的对应于所估计的角度的索引处的值。基于阵列中具有最大值的角度候选来确定图像块的主滤波方向。根据主滤波方向对图像块进行滤波以移除与图像块相关联的一个或多个倾斜边缘。将经滤波的图像块编码成编码图像。

根据本发明的实现方式的一种用于编码图像块的装置包括存储器和处理器。存储器存储指令和角度候选阵列,所述角度候选阵列具有的索引数目是基于可用于编码图像块的角度候选的数目。处理器被配置为执行存储在存储器中的指令以将角度候选阵列的索引处的值初始化为零。针对图像块的多个像素中的每个当前像素,处理器进一步执行指令以:基于当前像素的相邻像素的强度值的差来确定强度差;通过计算当前像素的强度差的函数来估计当前像素的角度;以及增加角度候选阵列内的对应于所估计的角度的索引处的值。处理器进一步执行指令以基于阵列中具有最大值的角度候选来确定图像块的主滤波方向。处理器进一步执行指令以根据主滤波方向对图像块进行滤波以移除与图像块相关联的一个或多个倾斜边缘。处理器进一步执行指令以将经滤波的图像块编码成编码图像。

根据本发明的实现方式的一种用于编码图像块的方法包括基于所述至少一些像素中的相应像素的相邻像素来确定图像块的至少一些像素的相应强度差。基于所述相应强度差来估计所述至少一些像素中的每个像素的相应角度。基于所估计的角度来确定图像块的主滤波方向。根据主滤波方向对图像块进行滤波以移除与图像块相关联的一个或多个倾斜边缘。将经滤波的图像块编码成编码图像。

根据本发明的实现方式的一种用于解码编码图像块的方法包括接收指示编码图像块的像素的角度候选的角度图。编码图像块被解码以产生解码图像块。角度候选阵列的索引处的值被初始化为零。阵列的索引的数目等于可用于对解码图像块进行滤波的角度候选的数目。每个索引对应于一个角度候选。对于解码图像块的多个像素中的每个当前像素,增加角度图中所指示的与当前像素相对应的角度候选阵列内的索引处的值。基于阵列中具有最大值的角度候选来确定解码图像块的主滤波方向。根据主滤波方向对解码图像块进行滤波,以移除与解码图像块相关联的一个或多个倾斜边缘。输出经滤波的图像块以用于显示或存储。

根据本发明的实现方式的一种用于对编码图像块进行解码的装置包括存储器和处理器。存储器存储指令和角度候选阵列,所述角度候选阵列具有的索引数目是基于可用于对编码图像块进行滤波的角度候选的数目。处理器被配置为执行存储在存储器中的指令,以接收指示编码图像块的像素的角度候选的角度图。处理器进一步执行指令以对编码图像块进行解码以产生解码图像块。处理器进一步执行指令以将角度候选阵列的索引处的值初始化为零。对于解码图像块的多个像素中的每个当前像素,处理器进一步执行指令以增加如角度图中所指示的与当前像素相对应的角度候选阵列内的索引处的值。处理器进一步执行指令以基于阵列中具有最大值的角度候选来确定解码图像块的主滤波方向。处理器进一步执行指令以根据主滤波方向对解码图像块进行滤波,以移除与解码图像块相关联的一个或多个倾斜边缘。处理器进一步执行指令以输出经滤波的图像块以用于显示或存储。

根据本发明的实现方式的一种用于解码编码图像块的方法包括解码编码图像块以产生解码图像块,以及接收指示编码图像块的像素的角度候选的角度图。基于角度图确定解码图像块的主滤波方向。根据主滤波方向对解码图像块进行滤波,以移除与解码图像块相关联的一个或多个倾斜边缘。输出经滤波的图像块以用于显示或存储。

附图说明

当结合附图阅读时,从以下详细描述中可以最好地理解本公开。要强调的是,根据惯例,附图的各种特征不是按比例绘制的。相反,为了清楚起见,各种特征的尺寸被任意地扩大或缩小。

图1是图像代码化系统的示例的框图。

图2是可以在图像代码化系统中使用的计算设备的内部配置的示例的框图。

图3是图像编码器的示例的框图。

图4是图像解码器的示例的框图。

图5是图像的部分的示例的图示。

图6是用于使用熵启发定向滤波来编码图像块的技术的示例的流程图。

图7是用于使用熵启发定向滤波对编码图像块进行解码的技术的示例的流程图。

具体实施方式

有损图像编码涉及诸如使用量化来减少要编码的图像内的数据量。作为对所得到的编码图像的比特成本降低的交换,图像遭受一定质量损失。质量损失的程度很大程度上取决于在编码期间量化图像数据的方式。特别地,图像数据的量化可能导致整个图像的不连续性或伪影。这些伪影可能沿着块边界存在,例如由于图像内的各个相邻块的编码中的差异。但是,在一些情况下,伪影可能存在于斜线上,诸如在图像本身内示出的对象的非垂直边缘上。

这些伪影可以通过将滤波器应用于图像块的系数来减少。例如,在编码期间将量化的变换系数熵编码到编码图像之前,可以将滤波器应用于这些系数。在另一示例中,可以在解码期间对系数进行熵解码、解量化及逆变换之后,将滤波器应用于那些系数。滤波可以从图像中移除伪影,以便以其预编码形式再现该图像。但是,常规滤波方法通常被设计用于从块边界移除伪影。这样,传统滤波方法在移除某些伪影时可能不是有效的,例如位于图像内的对象的倾斜边缘附近的伪影。

一种对图像中的倾斜边缘的伪影进行滤波的解决方案使用给定抽头大小的定向滤波器来沿着所讨论的边缘进行滤波。基于所使用的抽头大小,比较边缘的每一侧上的多个像素,并且使用其来计算滤波值,该滤波值可以例如是相应像素值的简单平均值。但是,该方法未能考虑块内的其它像素值,而是将其处理限制到直接与边缘相邻的某一数目的像素。在许多情况下,这可能限制滤波本身的功效,例如通过忽略块内的其它像素信息。

本公开的实现方式解决了诸如那些使用用于图像代码化的熵启发定向滤波的问题。在编码期间,针对图像块的至少一些像素基于该至少一些像素中的相应像素的相邻像素,确定强度差。针对那些像素中的每一个像素基于强度差来估计角度。例如,可以使用角度候选的阵列。针对那些像素中的每一个像素,可以确定强度差对应于角度候选中的一个角度候选,并且可以增加阵列内的角度候选的索引处的值。

然后基于所估计的角度确定图像块的主滤波方向。根据主滤波方向对图像块进行滤波,以移除与图像块相关联的一个或多个倾斜边缘。然后,将经滤波的图像块编码为编码图像。在解码期间,可以接收指示针对编码图像块的像素例如在编码期间所估计的角度的角度图,并且将该角度图用于确定图像块的主滤波方向。图像块可以然后根据主滤波方向被滤波,然后被输出以供显示或存储。

本文中初始参考其中可以实现使用熵启发定向滤波的图像代码化的技术的系统来描述这些技术的进一步细节。图1是图像代码化系统100的示例的图。图像代码化系统100包括发送站102、接收站104和网络106。图像代码化系统100例如可以用于对图像进行编码和解码。

发送站102是对图像进行编码和传输的计算设备。可替代地,发送站102可以包括两个或更多个用于编码和传输图像的分布式设备。接收站104是接收并且解码编码图像的计算设备。可替代地,接收站104可以包括两个或更多个用于接收和解码编码图像的分布式设备。下面参考图2描述用于实现发送站102或接收站104中的一个或两者的计算设备的示例。

网络106连接发送站102和接收站104,以用于对图像进行编码、传输、接收和解码。网络106可以是例如互联网。网络106还可以是局域网(LAN)、广域网(WAN)、虚拟专用网(VPN)、蜂窝电话网络、或将图像从发送站102传输到接收站104的其它装置。

代码化系统100的实现方式可以不同于参考图1所示出和描述的实现方式,在一些实现方式中,代码化系统100可以省略网络106。在一些实现方式中,图像可以被编码并且然后被存储以供稍后传输至接收站104或具有存储器的另一设备。在一些实现方式中,接收站104可以(例如,经由网络106、计算机总线和/或一些通信路径)接收编码图像,并且存储编码图像以供稍后解码。

在一些实现方式中,发送站102和接收站104的功能可以基于所执行的特定操作而改变。例如,在用于编码图像的操作期间,发送站102可以是用于将用于编码的图像上传到服务器的计算设备,并且接收站104可以是从发送站102接收图像并且编码该图像以供稍后(例如,在渲染网页时)使用的服务器。在另一示例中,在用于解码编码图像的操作期间,发送站102可以是解码编码图像的服务器,并且接收站104可以是从发送站102接收解码图像并且渲染解码图像(例如,作为网页的一部分)的计算设备。

图2是可以在图像编码和解码系统(例如图1中示出的图像代码化系统100)中使用的计算设备200的内部配置的示例的框图。计算设备200可以例如实现发送站102或接收站104中的一个或两者。计算设备200可以是包括多个计算设备的计算系统的形式,或者是一个计算设备的形式,计算设备例如是移动电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机等。

计算设备200中的处理器202可以是常规中央处理单元。可替代地,处理器202可以是现在存在或以后开发的能够操纵或处理信息的另一类型的一个或多个设备。例如,尽管所公开的实现方式可以用如图所示的一个处理器(例如,处理器202)来实践,但是可以通过使用多于一个处理器来实现速度和效率方面的优点。

在一种实现方式中,计算设备200中的存储器204可以是只读存储器(ROM)设备或随机存取存储器(RAM)设备。但是,其它合适类型的存储设备也可以用作存储器204。存储器204可以包括由处理器202使用总线212访问的代码和数据206。存储器204还可以包括操作系统208和应用程序210,应用程序210包括允许处理器202执行本文描述的技术的至少一个程序。例如,应用程序210可以包括应用1到N,其进一步包括执行这里描述的一些或全部技术的图像编码和/或解码软件。计算设备200还可以包括辅助存储214,其可以例如是与移动计算设备一起使用的存储卡。例如,图像可以全部或部分地存储在辅助存储214中,并且根据需要加载到存储器204中以进行处理。

计算设备200还可以包括一个或多个输出设备,诸如显示器218。在一个示例中,显示器218可以是将显示器与可操作以感测触摸输入的触敏元件组合的触敏显示器。显示器218可以经由总线212耦合到处理器202。除了显示器218之外或者作为其替代,可以提供允许用户对计算设备200进行编程或者以其它方式使用该计算设备的其它输出设备。当输出设备是显示器或包括显示器时,显示器可以以各种方式实现,包括作为液晶显示器(LCD)、阴极射线管(CRT)显示器或发光二极管(LED)显示器,诸如有机LED(OLED)显示器。

计算设备200还可以包括图像感测设备220或与该图像感测设备通信,该图像感测设备例如是相机或现在存在或以后开发的另一图像感测设备,其可以感测图像,诸如操作计算设备200的用户的图像。图像感测设备220可以被定位使得其指向操作计算设备200的用户。例如,图像感测设备220的位置和光轴可以被配置成使得视场包括直接邻近显示器218并且从其可以看见显示器218的区域。

计算设备200还可以包括声音感测设备222或与该声音感测设备通信,该声音感测设备例如是麦克风或现在存在或以后开发的另一声音感测设备,其可以感测计算设备200附近的声音。声音感测设备222可以被定位使得其指向操作计算设备200的用户并且可以被配置为接收用户在操作计算设备200时由用户发出的声音,例如,话音或其它话语。

计算设备200的实现方式可以不同于关于图2所示出和描述的实现方式。在一些实现方式中,处理器202的操作可以分布在多个机器上(其中,各个机器可以具有一个或多个处理器),所述多个机器可以直接耦合或者跨局域网或其它网络耦合。在一些实现方式中,存储器204可以跨多个机器分布,诸如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器。在一些实现方式中,计算设备200的总线212可以由多个总线组成。在一些实现方式中,辅助存储214可以直接耦合到计算设备200的其它组件,或者可以经由网络访问,并且可以包括集成单元,诸如存储卡,或者多个单元,诸如多个存储卡。

图3是图像编码器300的示例的框图。图3是图像编码器300的示例的框图。图像编码器300例如可以是在图像代码化系统的发送站(例如图1所示的图像代码化系统100的发送站102)处实现的图像解码器。图像编码器300接收输入图像302并且对其进行编码以产生编码图像304,该编码图像可以被输出到解码器(例如由接收站(诸如图1所示的接收站104)实现)或用于存储。

图像编码器300包括逆滤波级306、变换级308、量化级310和熵编码级312。逆滤波级306对输入图像302执行滤波,以直接或间接地减少由变换级308和/或量化级310分别进行的变换和/或量化所产生的伪影,例如通过在输入图像302的变换和量化之前修改其像素值。特别地,滤波级306可以执行与稍后在图像解码器(例如,下面参考图4描述的图像解码器400)处执行的滤波相反的滤波,以便诸如补偿由图像解码器的滤波导致的模糊。下面参考图6描述了用于在编码期间对图像块进行滤波的实现方式和示例。

变换级308将输入图像302的经滤波的块变换到频域。例如,变换级308可以使用离散余弦变换(DCT)来将输入图像302的经滤波的块从空间域变换到频域。可替代地,变换级308可以使用另一傅立叶相关变换或离散傅立叶变换来将输入图像302的经滤波的块从空间域变换到频域。作为另一替代方案,变换级308可以使用另一基于块的变换来将输入图像302的经滤波的块从空间域变换到频域。

量化级310量化由变换级308作为输出而产生的变换系数。量化级310使用量化因子将变换系数转换成离散量值,离散量值被称为量化变换系数。例如,变换系数可以除以量化因子并且被截断(truncated)。

熵编码级312使用无损代码化技术对从量化级310输出的量化变换系数进行熵编码。例如,由熵编码级312用于熵编码量化变换系数的无损代码化技术可以是霍夫曼代码化、算术运算、可变长度代码化或另一代码化技术,或包括霍夫曼代码化、算术运算、可变长度代码化或另一代码化技术。基于熵编码级312的输出来产生编码图像304。编码图像304可以存储在服务器处(例如,存储在数据库或类似的数据存储中)以供稍后检索和解码。例如,编码图像304可以是网站上托管的图像或被提供用于在网页上显示的图像。

图像编码器300的实现方式可以不同于关于图3所示出和描述的实现方式。在一些实现方式中,图像编码器300可以用于对视频序列的帧进行编码,诸如通过将其输入视频流编码为比特流。例如,输入图像302可以是待编码的输入帧,而编码图像304可以是编码帧,其可以被编码到比特流。

在这样的实现方式中,图像编码器300可以包括用于预测帧内的运动的预测级。例如,预测级可以包括用于使用帧间预测或帧内预测来生成帧的当前块的预测残差的功能。在帧内预测的情况下,预测块可以由帧本身中的先前编码和重构的样本形成。在帧间预测的情况下,可以从一个或多个先前构造的参考帧中的样本形成预测块。可以在预测级处从当前块中减去预测块以生成预测残差。变换级306可以然后接收并且处理预测残差,例如以产生当前块的变换系数。

在图像编码器300可以用于编码视频序列的帧的实现方式的另一示例中,图像编码器300可以包括重构路径以确保图像编码器300和解码器(例如,在图像代码化系统的接收站(诸如图像代码化系统100的接收站104)处实现的解码器)使用相同的参考帧来解码由图像编码器300产生的比特流以表示输入视频流。

例如,重构路径可以执行与在解码处理期间发生的功能(下面参考图4描述)类似的功能,包括在去量化级处对量化的变换系数进行去量化,并且在逆变换级处对去量化的变换系数进行逆变换,以产生导数残差。然后,可以将在预测级预测的预测块与导数残差相加,以创建重构块。

在一些实现方式中,图像编码器300可以省略滤波级306。例如,代替对输入图像302或从其处理得到的图像数据执行滤波,图像编码器300可以估计用于对输入图像302的块的像素进行滤波的角度。估计的角度可以被记录为输入图像302的角度图。角度图可以被编码到编码图像304,例如编码到编码图像304的头部或其它部分。可替代地,角度图可以被编码为与编码图像304分离的文件,但是其可以在解码期间与编码图像304一起被处理,以便解码编码图像304。在一些实现方式中,如上所述的角度图可以由滤波级306或使用滤波级306的输出来生成。

图4是图像解码器400的示例的框图。图像解码器400例如可以是在图像代码化系统的接收站(例如图1所示的图像代码化系统100的接收站104)处实现的图像解码器。图像解码器400(例如,从存储或存储器)接收编码图像402并且对其进行解码,以产生输出图像404,其可以被输出以用于显示或存储。输出图像404在感知上与使用编码器编码的输入图像(例如,图3中所示的输入图像302和图像编码器300)相同或相似。然而,假定产生编码图像402的编码是有损的,则输出图像404可以看起来与输入图像基本相同,但不一定与输入图像相同。

图像解码器400包括熵解码级406、去量化级408、逆变换级410和滤波级412。熵解码级406使用无损代码化技术对来自编码图像402的编码图像数据进行熵解码。例如,熵解码级406用于对来自编码图像402的编码图像数据进行熵解码的无损编码技术可以是或包括霍夫曼代码化、算术代码化、可变长度代码化或另一代码化技术。

熵解码级406对编码图像数据进行熵解码以产生量化的变换系数。去量化级408例如通过将量化的变换系数乘以用于产生编码图像402的量化因子,来对从熵解码级406输出的量化的变换系数进行去量化。逆变换级410例如通过将去量化的变换系数从频域逆变换到空间域来对去量化的变换系数进行逆变换。

滤波级412执行滤波以移除由编码图像402的编码产生的伪影。例如,滤波级412可以根据编码图像402的块的主滤波方向对从逆变换级410输出的用于该块的系数进行滤波。下面参考图7描述用于在解码期间对图像的块进行滤波的实现方式和示例。

图像解码器400的实现方式可以不同于关于图4所示出和描述的实现方式。在一些实现方式中,图像解码器400可以用于对视频序列的编码帧进行解码,诸如通过将编码帧解码为来自比特流的输出视频流。例如,编码图像402可以是从比特流接收到的编码帧,并且输出图像404可以是诸如在输出视频流内要被输出以供显示或存储的解码帧。

在这样的实现方式中,图像解码器400可以包括用于预测帧内的运动的预测级。例如,预测级可以包括用于使用帧间预测或帧内预测来基于逆变换级410的输出和/或基于熵解码级的输出来生成帧的当前块的预测残差的功能。例如,使用从比特流解码的头信息和从逆变换输出的预测残差,预测级可以创建与在用于对帧进行编码的预测级处创建的预测块相同的预测块。

在帧内预测的情况下,预测块可以由帧本身中的先前解码和重构的样本形成。在帧间预测的情况下,可以从一个或多个先前重构的参考帧中的样本形成预测块。预测块和从逆变换级410输出的预测残差可以用于重构该块。然后,滤波级412可以针对重构块执行滤波。此外,基于对其块的重构产生的重构帧可以被存储为参考帧,以用于重构稍后要解码的帧。

图5是图像500的部分的示例的图示。如图所示,图像500在矩阵或笛卡尔平面中的两行和两列中包括四个64×64块510。在一些实现方式中,64×64块可以是最大代码化单元,N=64。每个64×64块可以包括四个32×32块520。每个32×32块可以包括四个16×16块530。每个16×16块可以包括四个8×8块540。8×8块540中的每一个块540可以包括四个4×4块550。每个4×4块550可以包括16个像素,该16个像素可以在笛卡尔平面或矩阵中的每个相应块中以四行和四列来表示。

像素可以包括表示在图像500中捕获的图像的信息,诸如亮度信息、颜色信息和位置信息。在一些实现方式中,块(例如如图所示的16×16像素块)可以包括亮度块560,该亮度块可以包括亮度像素562;以及两个色度块570、580,诸如U或Cb色度块570以及V或Cr色度块580。色度块570、580可以包括色度像素590。例如,亮度块560可以包括16×16个亮度像素562,并且每个色度块570、580可以包括8×8个色度像素590,如图所示。尽管示出了块的一种布置,但是可以使用任何布置。尽管图7示出N×N块,但是在一些实现方式中,可以使用N×M块,其中N和M是不同数字。例如,可以使用32×64块、64×32块、16×32块、32×16块、或者任何其它大小的块。在一些实现方式中,可以使用N×2N块、2N×N块或它们的组合。

在一些实现方式中,对图像500进行代码化可以包括有序块级代码化。有序块级代码化可以包括按例如光栅扫描顺序的顺序代码化图像500的块,其中块可以从图像500的左上角的块或图像500的一部分开始并沿着从左到右的行并且从顶行到底行继续来识别和处理,从而依次识别每一个块以用于处理。例如,图像500的顶行和左列中的64×64块可以是经代码化的第一块,并且紧靠第一块的右边的64×64块可以是经代码化的第二块。从顶部起的第二行可以是经代码化的第二行,使得第二行的左列中的64×64块可以在第一行的最右列中的64×64块之后被代码化。

在一些实现方式中,代码化图像500的块可以包括使用四叉树代码化,其可以包括以光栅扫描顺序代码化块内的较小块单元。例如,可以使用四叉树代码化来代码化图像500的部分的左下角中示出的64×64块,其中可以代码化左上32×32块,然后可以代码化右上32×32块,然后可以代码化左下32×32块,并且然后可以代码化右下32×32块。每个32×32块可以使用四叉树代码化来代码化,其中可以代码化左上16×16块,然后可以代码化右上16×16块,然后可以代码化左下16×16块,并且然后可以代码化右下16×16块。

每个16×16块可以使用四叉树代码化来代码化,其中可以代码化左上8×8块,然后可以代码化右上8×8块,然后可以代码化左下8×8块,并且然后可以代码化右下8×8块。每个8×8块可以使用四叉树代码化来代码化,其中可以代码化左上4×4块,然后可以代码化右上4×4块,然后可以代码化左下4×4块,并且然后可以代码化右下4×4块。在一些实现方式中,对于16×16块,可以省略8×8块,并且可以使用四叉树代码化来代码化16×16块,其中可以代码化左上4×4块,然后可以按光栅扫描顺序代码化16×16块中的其它4×4块。

在一些实现方式中,对图像500进行代码化可以包括通过例如从对应的编码图像中省略来自图像的原始版本(例如,输入图像,诸如图3中所示的输入图像302)的一些信息来对包括在图像的原始版本中的信息进行编码。例如,代码化可以包括减少频谱冗余、减少空间冗余或它们的组合。

减少频谱冗余可以包括使用基于亮度分量(Y)和两个色度分量(U和V或Cb和Cr)的颜色模型,该颜色模型可以被称为YUV或YCbCr颜色模型或颜色空间。使用YUV颜色模型可以包括使用相对大量的信息来表示图像500的一部分的亮度分量,以及使用相对少量的信息来表示图像500的该部分的每个对应的色度分量。例如,图像500的一部分可以由高分辨率亮度分量和两个较低分辨率色度分量来表示,其中高分辨率亮度分量可以包括16×16像素块,每个较低分辨率色度分量将图像的该部分表示为8×8像素块。像素可以指示值,例如,在从0到255的范围中的值,且可以使用例如八位来存储或传输该值。尽管参考YUV颜色模型描述本公开,但是可以使用另一颜色模型。

减少空间冗余可以包括使用例如离散余弦变换将块变换到频域。例如,编码器的单元,例如图3中所示的变换级306,可以使用基于空间频率的变换系数值来执行离散余弦变换。

尽管为了清楚起见在本文中参考图像500的矩阵或笛卡尔表示进行描述,但图像500可以以任何数据结构存储、传输、处理或它们的任何组合,使得可以针对图像500有效地表示像素值。例如,图像500可以以诸如所示矩阵的二维数据结构或以诸如矢量阵列的一维数据结构被存储、传输、处理或它们的任何组合。

此外,尽管这里描述为示出其中U和V具有Y的一半分辨率的色度二次采样图像,但是图像500可以具有用于其颜色通道的不同配置。例如,仍然参考YUV颜色空间,可以对图像500的所有颜色通道使用全分辨率。在另一示例中,可以使用YUV颜色空间之外的颜色空间来表示图像500的颜色通道的分辨率。本公开的实现方式描述了可以在变化的颜色通道分辨率和/或变化的颜色空间的图像上使用的滤波。

关于图像500示出和描述的块是正方形或矩形的。但是,图像500内显示的对象可以不是正方形或矩形的。例如,通常为圆形的对象可以被包括在图像500的多个块内或以其它方式与多个块相交。此外,这种非正方形或非矩形对象将具有不与图像500的块的边界对齐的倾斜边缘。对包括倾斜边缘的块进行编码可能导致沿着倾斜边缘产生的块伪影。使用块的像素信息来确定块的主滤波方向的滤波工具可以用于减少沿着倾斜边缘的伪影。

现在参考图6至图7描述使用熵启发定向滤波的图像代码化技术。图6是用于使用熵启发定向滤波来编码图像块的技术600的示例的流程图。图7是用于使用熵启发定向滤波来解码编码图像块的技术700的示例的流程图。

技术600或技术700中的一个或多个可以例如被实现为可以由诸如发送站102或接收站104之类的计算设备执行的软件程序。例如,软件程序可以包括机器可读指令,该机器可读指令可以存储在存储器(诸如存储器204或辅助存储214)中,并且当该机器可读指令由处理器(诸如处理器202)执行时,可以使得计算设备执行技术600或技术700中的一个或多个。技术600或技术700中的一个或多个可以使用专用硬件或固件来实现。如上所述,一些计算设备可以具有多个存储器或处理器,并且在技术600或技术700中的一个或多个中描述的操作可以使用多个处理器、存储器或两者来分布。

为了解释的简单起见,技术600和技术700各自被描绘和描述为一系列步骤或操作。但是,根据本公开的步骤或操作可以以各种顺序和/或同时发生。另外,可以使用这里未呈现和描述的其它步骤或操作。此外,并非所有示出的步骤或操作都是实现根据所公开的主题的技术所必需的。

首先参考图6,示出了用于使用熵启发定向滤波来编码图像块的技术600的示例的流程图。图像块是大小为M×N的块,其中M和N可以是相同数目或不同数目。例如,图像块可以具有在2x2和32x32之间的大小。在602处,初始化角度候选阵列。角度候选阵列包括与可用于对图像块进行编码的角度候选的数目相等的多个索引。角度候选表示变化程度的边缘角度。角度候选阵列的索引中的每一个索引对应于角度候选中的一个角度候选。例如,在考虑64个角度候选的情况下,阵列包括64个索引。64个角度候选的每一个将对应于能够设想在图像块内表示的不同边缘角度。阵列的每个索引处的值最初被设置为零。

在604处,确定像素I的强度差。像素I是图像块的当前像素。例如,根据扫描顺序或其它处理顺序,像素I可以是图像块的第一像素或图像块的最后一个像素。强度差是像素I的强度值与从位于图像块中不包括像素I的一组像素中选择的一个或多个像素的强度值之间的差。例如,像素I的强度差可以基于像素I的相邻像素的强度值的差来确定,例如,第一增量值(first delta value)可以被确定为表示像素I的左相邻像素和像素I的右相邻像素之间的强度值的差。第二增量值可以被确定为表示像素I的上相邻像素和像素I的下相邻像素之间的强度值的差,第一增量值表示像素I的沿着X轴的像素强度的变化。第二增量值表示像素I的沿着Y轴的像素强度的变化。

可以基于第一增量值、第二增量值或两者来确定像素I的强度差。例如,当基于第一增量值确定像素I的强度差时,像素I的强度差可以等于像素I的左右相邻像素之间的强度值的差。在另一示例中,当像素I的强度差基于第二增量值来确定时,像素I的强度差可以等于像素I的上下相邻像素之间的强度值的差。在其中第一增量值和第二增量值两者都用于确定像素I的强度差的又一个示例中,第一增量值和第二增量值可以被组合。例如,像素I的强度值可以被确定为第一增量值和第二增量值的平均值。平均值可以是加权的或未加权的。

在606处,估计像素I的角度。该角度表示像素I所在的对象边缘的角度。该角度通过计算像素I的强度差的函数来估计。所计算的函数可以是反正切^2(平方)函数或另一合适的函数。所估计的角度可以对应于角度候选阵列中的角度候选。

在608处,增加与所估计的角度相对应的角度候选阵列内的索引处的值。在所估计的角度对应于角度候选阵列中的角度候选的情况下,识别与阵列中的该角度候选相关联的索引。然后增加该索引处的值。索引处的值可以增加一个浮点值,该浮点值被计算为沿着所估计的角度应用于像素I的边缘强度的函数的输出。该函数可以是对数函数。例如,对数函数可以表示为log(x+1),其中x表示针对像素I所估计的角度并且f表示浮点值。可替代地,该函数可以是指数函数。例如,指数函数可以表示为f=1-exp(-x),其中x表示针对像素I估计的角度并且f表示浮点值。在一些实现方式中,索引的值可以增加一或者根据固定比例递增。

在610处,确定像素I是否是图像块中的最后一个像素。例如,扫描顺序或其它处理工具可以用于检查图像块的另一像素是否仍然要被处理。在612处,响应于确定像素I不是图像块中的最后一个像素,将I的值增加1。然后,技术600返回到604,以便对新像素I重复604、606和608处的操作。

在614处,响应于确定像素I不是图像块中的最后一个像素,基于阵列的值确定图像块的主滤波方向。基于阵列中具有最大值的角度候选来确定主滤波方向。因此,确定主滤波方向包括在对图像块的像素完成增加之后识别阵列的具有最大值的索引,并且选择与所识别的索引相关联的角度候选作为主滤波方向。

在616处,根据主滤波方向对图像块进行滤波。根据主滤波方向对图像块进行滤波包括使用滤波器类型的滤波器来改变图像块内沿着主滤波方向的至少一个像素值。滤波器类型是定向滤波器、半定向滤波器或圆形滤波器中的一种。可以根据图像块的主滤波方向与平均滤波方向的比率来选择滤波器类型。例如,可以确定阵列的一个或多个索引处的值的平均值。然后,可以基于最大值对平均值的比率来选择用于沿着主滤波方向进行滤波的滤波器类型。平均滤波方向表示以下角度,该角度与具有等于值的平均值的值的角度候选相对应。在没有角度候选具有等于值的平均值的值的情况下,平均滤波方向表示以下角度,该角度与具有最接近值的平均值的值的角度候选相对应。

滤波器类型的选择基于针对图像块确定的主滤波方向上的置信度的量度。即主滤波方向和平均滤波方向越接近,图像块包括成多个不同角度的边缘的可能性越大,因此主滤波方向上的置信度越低。相反,主滤波方向和平均滤波方向越远,主滤波方向表示图像块的主(或者在一些情况下,唯一)边缘的角度的可能性越大,因此主滤波方向的置信度越高。可以建立阈值和/或阈值范围以用于基于主滤波方向与平均滤波方向之间的关系来指示使用哪种滤波器类型。例如,当主滤波方向和平均滤波方向之间的关系指示高置信度时,可以使用第一滤波器类型,当主滤波方向和平均滤波方向之间的关系指示中置信度时,可以使用第二滤波器类型,并且当主滤波方向和平均滤波方向之间的关系指示低置信度时,可以使用第三滤波器类型。因此,对图像块进行滤波可以包括使用所选择的滤波器类型的滤波器。在618处,将经滤波的图像块编码成编码图像。

在一些实现方式中,对于每个像素I,可以增加角度候选阵列的多于一个索引处的值,例如,可以基于像素I的所估计的角度来确定角度候选的高斯分布,可以将与对应于像素I的所估计的角度的角度候选相关联的阵列的索引增加第一增加值(例如,50)。递增第一增加值的该索引的每个相邻索引可以增加小于第一增加值的第二增加值(例如25)。在一些此类实现方式中,可以根据高斯分布将其它相邻索引(例如,增加第二增加值的索引中的每一相邻索引)增加越来越小的增加值。

在一些实现方式中,技术600包括生成角度图。例如,角度图可以是阵列、矩阵、表格或其中位置与图像块的像素相对应的其它变量或对象。可以在角度图的相应位置处记录图像块的每个像素的所估计的角度。角度图可以被编码到编码图像,例如编码到编码图像的头或其它部分。可替代地,角度图可以被编码到与编码图像分开的文件,但是其可以在解码期间与编码图像一起被处理,以便解码编码图像。

在一些实现方式中,可以不使用角度候选阵列。例如,可以使用以下不同结构,该不同结构可以基于针对图像块的各个像素或像素组估计的角度来更新。例如,该不同结构可以是矩阵、表格或另一变量或对象。在另一个示例中,数据结构可以不用于监视所估计的角度。例如,不受图像块的熵启发的用于定向计算的启发可考虑图像块的各种方向性。

在一些实现方式中,角度候选阵列可以在图像块被编码到编码图像之后被重置。例如,在对图像块进行编码之后,可以将角度候选阵列的索引处的值重置为零。

接下来参考图7,示出了用于使用熵启发定向滤波对编码图像块进行解码的技术700的示例的流程图。在702处,接收角度图。角度图可以是阵列、矩阵、表格或其中位置与图像块的像素相对应的其它变量或对象。可以在角度图的相应位置处记录图像块的每个像素的所估计的角度。角度图可以被编码到编码图像,例如编码到编码图像的头或其它部分。可替代地,角度图可以被编码到与编码图像分开的文件。角度图指示针对编码图像的像素估计的角度。

在704处,从编码图像中解码图像块。对来自编码图像的图像块进行解码可以包括对来自编码图像的语法元素进行熵解码以产生量化的变换系数,对量化的变换系数进行去量化以产生变换系数,以及对变换系数进行逆变换以产生图像块的像素值。

在706处,初始化角度候选阵列。角度候选阵列包括与可用于对图像块进行编码的角度候选的数目相等的多个索引。角度候选表示变化程度的边缘角度。角度候选阵列的索引中的每一个索引对应于角度候选中的一个角度候选。例如,在考虑64个角度候选的情况下,阵列包括64个索引。64个角度候选的每一个将对应于可以想象到在图像块内表示的不同边缘角度。阵列的每个索引处的值最初被设置为零。

在708处,增加与图像块的像素I的所估计的角度相对应的阵列的索引。增加阵列的索引包括基于角度图确定像素I的所估计的角度。例如,可以识别角度图内的对应于像素I的位置。在该位置处指示的角度可以被识别为像素I的所估计的角度。然后,可以增加对应于与所估计的角度相关联的角度候选的索引处的值。

在710处,确定像素I是否是图像块中的最后一个像素。例如,扫描顺序或其它处理工具可以用于检查图像块的另一像素是否仍然要被处理。在712处,响应于确定像素I不是图像块中的最后一个像素,将I的值增加1。然后,技术700返回到708,以便对新像素I重复708处的操作。

在714处,响应于确定像素I不是图像块中的最后一个像素,基于阵列的值确定图像块的主滤波方向。基于阵列中具有最大值的角度候选来确定主滤波方向。因此,确定主滤波方向包括在对图像块的像素完成增加之后识别阵列的具有最大值的索引,并且选择与所识别的索引相关联的角度候选作为主滤波方向。

在716处,根据主滤波方向对图像块进行滤波。根据主滤波方向对图像块进行滤波包括使用滤波器类型的滤波器来改变图像块内沿着主滤波方向的至少一个像素值。滤波器类型是定向滤波器、半定向滤波器或圆形滤波器中的一种。可以根据图像块的主滤波方向与平均滤波方向的比率来选择滤波器类型。例如,可以确定阵列的一个或多个索引处的值的平均值。然后,可以基于最大值对平均值的比率来选择用于沿着主滤波方向进行滤波的滤波器类型。因此,对图像块进行滤波可以包括使用所选择的滤波器类型的滤波器。在718处,输出经滤波的图像块以供显示或存储。

在一些实现方式中,对于每个像素I,可以增加角度候选阵列的多于一个索引处的值,例如,可以基于像素I的所估计的角度来确定角度候选的高斯分布,可以将与对应于像素I的所估计的角度的角度候选相关联的阵列的索引增加第一增加值(例如,50)。增加第一增加值的该索引的每个相邻索引可以增加小于第一增加值的第二增加值(例如25)。在一些此类实现方式中,可以根据高斯分布将其它相邻索引(例如,增加第二增加值的索引中的每一相邻索引)增加越来越小的增加值。

在一些实现方式中,可以不使用角度候选阵列。例如,可以使用以下不同结构,该不同结构可以基于针对图像块的各个像素或像素组估计的角度来更新。例如,该不同结构可以是矩阵、表格或另一变量或对象。在另一个示例中,数据结构可以不用于监视所估计的角度。例如,不受图像块的熵启发的用于定向计算的启发可考虑图像块的各种方向性。在又一示例中,可以简单地省略角度候选阵列。例如,角度图可以用于识别图像块的主滤波方向,而不使用阵列或其它结构进行处理或其它验证。

在一些实现方式中,角度候选阵列可以在图像块被编码到编码图像之后被重置。例如,在对图像块进行编码之后,可以将角度候选阵列的索引处的值重置为零。

上文所描述的编码和解码的方面说明编码和解码技术的一些示例和被配置为执行编码和/或解码技术的那些示例的全部或一部分的硬件组件。但是,应当理解,如在权利要求中所使用的那些术语,编码和解码可以意味着数据的编码、解码、变换或另一处理或改变。

词语“示例”在这里用于表示用作示例、实例或说明。本文描述为“实例”的任何方面或设计不一定被解释为比其它方面或设计优选或有利。相反,词语“示例”的使用旨在以具体的方式呈现概念。如本申请中所使用的,术语“或”旨在表示包含性的“或”而不是排他性的“或”。也就是说,除非上下文另外指定或另外清楚地指出,否则表述“X包括A或B”旨在表示其任何自然的包含性排列。也就是说,如果X包括A;X包括B;或者X包括A和B,则“X包括A或B”在任何前述情况下都满足。另外,除非另有说明或上下文清楚地指出涉及单数形式,否则本申请和所附权利要求中使用的冠词“一”和“一个”通常应当解释为表示“一个或多个”。此外,在本公开中使用术语“实现方式”或术语“一个实现方式”并不旨在要求相同的实现方式,除非如此描述。

本公开的所有或部分实现方式可以采取从例如计算机可用或计算机可读介质可访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是例如能够有形地包含、存储、传送或运输由任何处理器使用或与任何处理器结合使用的程序的任何设备。该介质可以是例如电子、磁、光、电磁或半导体设备。其它合适的介质也是可用的。

已经描述了上述实现方式、示例和方面以便于容易理解本公开,并且不限制本公开。相反,本公开旨在覆盖包括在所附权利要求的范围内的各种修改和等效布置,该范围符合法律所允许的最宽泛的解释,以便涵盖所有这样的修改和等效布置。

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:视频处理中对基于模型的整形的约束

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类