技术领域
[0001] 本公开总体涉及信息处理技术,并且更具体地,涉及用于图像处理的方法、系统和介质。
相关背景技术
[0002] 在现有的图像/视频编码和解码技术中,图像通常被划分成多个部分,并且图像的每个部分被分开处理。例如,在APPLE PRORES标准中,对图像编码包括六个步骤:码块划分、离散余弦变换(DCT)、量化、扫描、熵编码和流产生。在码块划分期间,图像沿竖直方向被划分成多个部分。每个部分具有固定数量的连续像素行,并且具有相同的图像宽度。在将一个部分的像素数据高速缓存在缓冲器中之后,切片分离器进一步将该部分分割成多个块。然后,将每个块的像素数据发送到DCT电路以用于处理。
[0003] 目前,市场上主流的消费电子产品对高分辨率图像和视频(例如,4096×2160(4K)分辨率图像和5280×2160(5.2K)分辨率图像)有着巨大的需求。在现有的图像和/或视频编码和解码技术中,用于高速缓存图像的每个切片的缓冲器的大小由图像的宽度和像素数据的量化比特宽度确定。具有较大分辨率的图像具有较大的图像宽度、和/或每个像素的较大量化比特宽度。因此,缓冲器的大小相对较大,这消耗了大量的硬件资源。
具体实施方式
[0025] 以下将参考附图更详细地描述本公开的示例性实施例。所描述的实施例是本公开的一些实施例而非全部实施例。基于所公开的实施例,本领域普通技术人员可以得出与本公开一致的其它实施例,所有这些实施例都在本公开的范围内。
[0026] 根据各种实施例,本公开提供了用于图像处理的方法、系统和介质。在所公开的方法中,实现新的分割策略以处理图像数据,并且应用交替缓冲器的重构。这样,对于不同量化比特宽度(例如,8比特、10比特和/或12比特)下的不同分辨率的图像,可以以低存储资源成本来实现图像块分割。此外,通过定位有效像素的有效数据,该方法可以支持具有任何合适图像格式的任何合适的高分辨率图像。
[0027] 图1示出了根据本公开的一些实施例的用于图像处理的示例性方法的流程图。图2示出了根据本公开的一些实施例的用于图像处理的方法的数据流程图。
[0028] 如图1中所示,在110处,将图像的像素数据存储在第一存储器中。在一些实施例中,图像可以包括像素阵列,并且图像的像素数据可以包括像素阵列中的像素的信息。像素的信息(即,像素数据)可以是例如像素的颜色信息和/或亮度信息。像素阵列可以包括第一数量的连续像素行和第二数量的连续像素列。在一些实施例中,图像可以是具有任何合适分辨率的任何合适的数字图像。
[0029] 图像的分辨率可以定义为阵列中的像素总数。例如,图像可以是高分辨率数字图像(例如,4K分辨率图像、5.2K分辨率图像等)。在4K分辨率图像中,第一数量可以是4096,第二数量可以是2160,因此图像可以具有4096个像素的宽度和2160个像素的深度。在5.2K分辨率图像中,第一数量可以是5280,第二数量可以是2160,因此图像可以具有5280个像素的宽度和2160个像素的深度。在一些实施例中,图像可以具有包括为8或16的倍数的像素数量在内的高度和/或宽度。在本公开中,在像素数量方面,图像的宽度和深度也分别被称为图像的“图像宽度”和“图像深度”。
[0030] 在一些实施例中,图像可以是静态图片,或者是包括多个连续帧在内的视频帧。可以从任何合适的源获得图像的像素数据。例如,如图2所示,可以从数码相机、移动电话、无人飞行器的图像信号处理器(ISP)210或包括图像捕获装置在内的任何其它合适的装置发送图像的像素数据。此外,用于存储图像的像素数据的第一存储器可以是用于存储数据的任何合适的存储器装置。例如,如图2所示,图像的像素数据可以存储在作为第一存储器的双倍数据速率同步动态随机存取存储器(DDR SDRAM,以下简称“DDR”)220中。
[0031] 在一些实施例中,包括像素阵列在内的图像可以被划分成多个部分。图3示出了根据本公开的一些实施例的包括像素阵列在内的图像的示例性分割的示意图。
[0032] 在一些实现中,使用APPLE PRORES标准作为示例,对图像编码可以包括码块划分、离散余弦变换(DCT)、量化、扫描、熵编码和流产生。在码块划分期间,图像沿竖直方向被划分成多个部分。每个部分具有固定数量的连续像素行,并且具有相同的图像宽度。在将一个部分的像素数据高速缓存在缓冲器中之后,切片分离器进一步将该部分分割成多个块。然后,将每个块的像素数据发送到DCT电路以用于处理。
[0033] 因此,如所示,包括像素阵列在内的图像可以被分割成多个切片310。每个切片310可以包括在水平方向(在图3中被标记为MBX方向)上连续布置的一个或多个宏块(MB)321。不同大小的切片310可以包括不同数量的宏块321。在一些实施例中,切片310可以包括8个宏块321、4个宏块321、2个宏块321或1个宏块321。
[0034] 在一些实施例中,一个切片310可以被设置为通常包括8个宏块321。然而,在水平方向上(即,在图3所示的MBX方向上),具有不同分辨率的不同图像可以具有不同数量的宏块321。也就是说,在水平方向上的宏块321的数量可以不必等于8的整数倍。因此,在一些实施例中,在水平方向上的图像的末端处的一个或多个最后切片310可以不必包括8个宏块321。图像中的包括一个或多个最后切片310(每个最后切片包括少于8个宏块)在内的部分被称为图像在水平方向上的“尾部”。
[0035] 例如,如果图像在水平方向上的尾部具有7个宏块321,则尾部可以被划分成3个切片310,例如,包括4个宏块321在内的第一切片310、包括2个宏块321在内的第二切片310、以及包括1个宏块321在内的第三切片310。如果图像在水平方向上的尾部具有6个宏块321,则尾部可以被划分成2个切片310,例如,包括4个宏块321在内的第一切片310和包括2个宏块321在内的第二切片310。如果图像在水平方向上的尾部具有5个宏块321,则尾部可以被划分成2个片310,例如,包括4个宏块321在内的第一切片310和包括1个宏块321在内的第二切片310。如果图像在水平方向上的尾部具有4个宏块321,则尾部可以被视为包括4个宏块321在内的一个切片310。如果图像在水平方向上的尾部具有3个宏块321,则尾部可以被划分成
2个片310,例如,包括2个宏块321在内的第一切片310和包括1个宏块321在内的第二切片
310。如果图像在水平方向上的尾部具有2个宏块321,则尾部可以被视为包括2个宏块321在内的一个切片310。如果图像在水平方向上的尾部具有1个宏块321,则尾部可以被视为包括
1个宏块321在内的一个切片310。
[0036] 如图3所示,宏块可以包括4个8×8像素单元(也称为“像素块”),这些像素单元分别布置在宏块的4个四分之一部分中。每个8×8像素单元可以包括64个像素,这些像素按照具有8行和8列的阵列布置。也就是说,切片310在竖直方向(在图3中被标记为MBY方向)上的高度可以是16行像素。切片310在水平方向(即,图3中所示的MBX方向)上的宽度可以是例如16×8、或16×4、或16×2个像素、或16列像素。切片310在竖直方向上的高度可以包括任何合适数量行的像素。
[0037] 在一些实施例中,图像的高度和/或宽度可以包括不为8或16的倍数的数量个像素。在这样的实施例中,图片填充部分330可以在水平方向上添加到图像的最右端和/或在竖直方向上添加到图像的最底端。这样,阵列中在水平方向和竖直方向上的像素的总数可以是16的倍数。因此,图像的宽度和高度都可以包括整数个宏块321。
[0038] 再次参考图1,图像可以任何合适的图像格式存储在第一存储器中,例如联合图像专家组(JPEG)格式、图形交换格式(GIF)、便携式网络图形(PNG)格式、比特图(BMP)格式、WebP格式等。此外,可以通过使用任何合适的颜色模型(例如,RGB模型、CMYK模型、YUV模型等)来存储图像。注意,不同的像素数据分割电路可以应用于不同的图像格式。在下文中,将作为示例来详细描述针对编解码器标准的像素数据分割电路以用于说明所公开的方法。
[0039] 在一些实施例中,通过使用YUV模型,每个像素的像素数据可以包括三层信息:Y分量、U分量和V分量。Y分量可以指示像素的亮度(或Luma)信息(即,像素的灰度值)。U分量和V分量可以指示像素的色度(或Chroma)信息(即,像素的颜色)。也就是说,U分量和V分量可以描述像素的颜色和饱和度。
[0040] 用于存储每个像素的分量的比特的数量可以称为量化比特宽度。例如,对于使用红、绿和蓝原色来表示一个像素的RGB模型,每个原色使用1个字节(8比特),因此当量化比特宽度为8比特时,像素总共需要8×3=24个比特。根据采样频率,YUV模型可以是例如YUV444模型或YUV422模型。例如,对于YUV444模型,针对每个像素采样Y分量、U分量和V分量。这样,当量化比特宽度是8比特时,Y分量、U分量和V分量中的每一个分量使用8比特,并且像素总共需要8×3=24个比特。另一方面,对于YUV422模型,针对每个像素采样Y分量,而针对每两个像素采样U分量和V分量。因此,当量化比特宽度是8比特(针对一个像素的一个平均值),Y分量使用8比特,U分量和V分量各使用4比特,并且像素总共平均需要8+4+4=16个比特。
[0041] 当使用YUV444模型时,每个宏块321的像素数据可以包括4个8×8像素单元的Y分量数据、4个8×8像素单元的U分量数据和4个8×8像素单元的V分量。当使用YUV422模型时,每个宏块321的像素数据可以包括4个8×8像素单元的Y分量数据、2个8×8像素单元的U分量数据和2个8×8像素单元的V分量。
[0042] 在一些实施例中,具有YUV模型的图像的像素数据可以使用任何合适的存储格式(例如,压缩格式、平面格式、半平面格式等)存储在第一存储器中。当使用压缩格式时,Y分量数据、U分量数据和V分量数据可以存储在存储单元的相同阵列中。当使用平面格式时,存储单元的三个阵列可以分别用于存储Y分量数据、U分量数据和V分量数据。当使用半平面格式时,一个阵列可以用于存储Y分量数据,另一阵列可以用于存储U分量数据和V分量数据。
[0043] 图4A和图4B分别示出了根据本公开的一些实施例的包括YUV444平面格式和YUV422半平面格式在内的示例性数据存储结构的示意图。
[0044] 如图4A所示,当使用YUV444平面格式将图像的像素数据存储在DDR 220中时,DDR 220可以包括用于存储Y分量的Y区域410、存储U分量数据的U区域420和用于存储V分量数据的V区域430。在Y区域410、U区域420和V区域430中的每一个区域中,图像的像素阵列的Y分量数据、U分量数据和V分量数据可以是根据以下规则来存储的。在水平方向(宽度方向)上,可以从左到右记录每行中的像素,并且在竖直方向(高度方向)上,可以从上到下记录不同行的像素。
[0045] 如图4B所示,当使用YUV422半平面格式将图像的像素数据存储在DDR 220中时,DDR 220可以包括Y区域440和UV区域450。在Y区域440中,可以基于以上结合图4A讨论的Y区域410的相同规则来存储图像的像素阵列的Y分量数据。在UV区域450中,一行中每两个相邻像素的U分量数据和V分量数据可以存储在存储空间中。
[0046] 与存储在DDR 220中的每个128比特存储空间中的像素数据相对应的像素的数量可以取决于量化比特宽度。如果量化比特宽度是8比特,则DDR 220中的每个128比特存储空间可以存储16个像素的Y分量像素数据。如果量化比特宽度是10比特,则DDR 220中的每个32比特存储空间可以存储3个像素的Y分量像素数据,并且每个32比特存储空间的最后两个比特中的数据是无效的。也就是说,当量化比特宽度是10比特时,DDR 220中的每个128比特存储空间可以存储12个像素的Y分量像素数据。如果量化比特宽度是12比特,则DDR 220中的每个128比特存储空间可以存储10个像素的Y分量像素数据,并且每个128比特存储空间的最后八个比特中的数据是无效的。
[0047] 在一些实施例中,为了便于总线寻址,一行像素的Y分量数据、U分量数据或V分量像素数据占据DDR中为128字节的整数倍的数量个字节的存储空间。该数量的字节也称为“步幅”,并且整数可以称为步幅的长度。因此,在图像的一行像素占据比步幅小的存储空间的情况下,可以在Y区域410、U区域420和V区域430中的每一个区域中以YUV444格式、或者在Y区域440和UV区域450中的每一个区域中以YUV422格式来提供包含无效数据的补偿区域490。例如,如图4A所示,补偿区域490设置在Y区域410、U区域420和V区域430中的每一个区域的最右部分处。此外,如图4B所示,或者,补偿区域490设置在Y区域440和UV区域450中的每一个区域的最右部分处。
[0048] 再次参考图1,在120处,从第一存储器读取一部分像素数据。在一些实施例中,该一部分像素数据可以与像素阵列的子阵列相对应。像素子阵列可以包括第三数量的连续像素行和第四数量的连续像素列。第三数量可以小于第一数量,第四数量可以小于第二数量。
[0049] 可以通过使用任何合适的技术或处理从第一存储器读取该一部分像素数据。在一些实施例中,如图2所示,第一存储器可以是DDR220,并且可以通过由高级可扩展接口(AXI)总线230发出的寻址模式从DDR 220读取该一部分像素数据。当根据YUV模型将像素数据存储在DDR 220中时,YUV寻址电路240可以用于定位该一部分像素数据的Y分量、U分量和V分量在DDR 220中的地址,使得可以从DDR 220的对应地址读取像素数据的不同分量。
[0050] 在一些现有技术中,直接从ISP读取存储在缓冲器中的像素数据。因此,在从ISP读取整行的像素数据之后,可以读取下一行的像素数据。相反,与所公开方法的实施例一致,可以从ISP读取像素数据并将其存储在DDR中。这样,在从DDR读取第一行像素的一部分的像素数据之后,可以从DDR读取第二行像素的一部分的像素数据,而无需等待整个第一行的像素数据都被读取。
[0051] 在一些实施例中,第三数量可以是16。也就是说,像素子阵列的深度等于宏块321的深度。注意,第四数量可以取决于第二存储器(例如,缓冲器)的存储空间、像素数据的量化比特宽度、以及高级可扩展接口(AXI)总线230的比特宽度。在120处从第一存储器读取的该一部分像素数据的有效像素数据随后可以在130处存储到第二存储器中,因此在120处从第一存储器读取的该一部分像素数据的大小可以被设计为满足第二存储器的大小。基于第二存储器的存储空间、像素数据的量化比特宽度、以及AXI总线230的比特宽度,可以计算第四数量。
[0052] 例如,当AXI总线230的比特宽度是128比特时,可以基于量化比特宽度来确定第四数量。当量化比特宽度是8比特时,像素子阵列可以在宽度方向(即,水平方向)上包括32个宏块321。也就是说,第四数量可以是32×16=512。当量化比特宽度是10比特时,像素子阵列可以在宽度方向上包括24个宏块321。也就是说,第四数量可以是24×16=384。当量化比特宽度是12比特时,像素子阵列可以在宽度方向上包括20个宏块321。也就是说,第四数量可以是20×16=320。针对不同量化比特宽度而包括在像素子阵列中的宏块321的数量与下面描述的突发访问操作的批的数量相关。
[0053] 在一些实施例中,可以连续执行一批突发访问操作以读取子像素阵列的像素数据。例如,如图2所示,YUV寻址电路240可以连续执行一批突发访问操作以访问AXI总线230,以从DDR 220读取成子阵列形式的像素子阵列的像素数据的Y分量、U分量和V分量。
[0054] 寻址电路240可以采用AXI总线标准支持的突发访问类型,并且还可以支持“突出”特性和“无序”特性。也就是说,可以遵从顺序发出多批突发访问请求,并且与该多批突发访问请求相对应的返回数据可以在多个批次之间交织,但是与单个批次相对应的返回数据遵循单个批次中的访问请求的内部顺序。
[0055] 图5示出了根据本公开的一些实施例的用于对像素数据突发访问的示例性寻址模式的示意图。在一些实施例中,可以基于第一存储器的访问效率以及第一存储器的存储单元大小来确定突发访问请求的批次数量、突发访问请求的数量以及突发访问操作的顺序。
[0056] 如所示,一批突发访问操作的长度可以被设置为8。也就是说,可以连续执行8个连续的突发访问操作。当AXI总线230的比特宽度是128比特时,每批突发访问操作可以读取128字节的像素数据。可以将突发访问操作的顺序设置为遵循地址增量。
[0057] 在一些实施例中,可以在水平方向上连续地发起4批突发访问操作,以读取一行像素的像素数据的一个分量。例如,可以首先读取子阵列中第一行像素的像素数据的Y分量。当量化比特宽度是8比特时,可以读取512个像素的像素数据的Y分量。也就是说,子阵列的宽度是32个宏块。当量化比特宽度是10比特时,可以读取384个像素的像素数据的Y分量。也就是说,子阵列的宽度是24个宏块(如图5所示)。当量化比特宽度是12比特时,可以读取320个像素的像素数据的Y分量。也就是说,子阵列的宽度是20个宏块。
[0058] 可以基于第一存储器(例如,DDR)的响应效率与第二存储器(例如,缓冲器)的存储空间效率之间的平衡考虑来确定在水平方向上连续发起的用于读取一行像素的像素数据的一个分量的访问操作的批次的数量。
[0059] 在一个方面中,在DDR的连续地址上连续发起的多批访问操作可以具有更高的响应效率。如果地址不是连续的而是离散的,则响应效率会降低。另一方面,如果连续发起的访问操作的批次的数量较大,则用于存储由多批访问操作在后续处理中读取的像素数据的第二存储器的存储空间也可以变大。例如,用于存储由多批访问操作在后续处理中读取的像素数据的第二存储器的存储空间可以与连续发起的访问操作的批次的数量成比例。
[0060] 在一些实施例中,一个切片可以包括例如8个宏像素块。当量化比特宽度是8比特时,一批访问操作可以读回8个宏像素块的像素数据,或者当量化比特宽度是10比特时,可以读回6个宏像素块的像素数据,或者当量化比特宽度是12比特时,可以读回5个宏像素块的像素数据。因此,如果一次执行一批访问操作,则可以减少对第二存储器的存储空间的要求,但是当量化比特宽度是10比特或12比特时读回的像素数据可以不与整数个切片相对应。类似地,如果一次执行两批访问操作或三批访问操作,则当量化比特宽度是10比特或12比特时读回的像素数据也可以不与整数个切片相对应。因此,响应效率会降低。
[0061] 另一方面,当量化比特宽度是8比特时,4批访问操作可以读回32个宏像素块的像素数据,或者当量化比特宽度是10比特时,可以读回24个宏像素块的像素数据,或者当量化比特宽度是12比特时,可以读回20个宏像素块的像素数据。也就是说,当量化比特宽度分别是8比特、10比特和12比特时,读回的像素数据可以与4个切片、3个切片和2.5个切片相对应。因此,2轮或3轮的4批访问操作可以读回与整数个切片相对应的像素数据。
[0062] 因此,在一些实施例中,考虑到第一存储器(例如,DDR)的响应效率与第二存储器(例如,缓冲器)的存储空间效率之间的平衡,在水平方向上连续发起的用于读取一行像素的像素数据的一个分量的访问操作的批次的数量可以被确定为4。
[0063] 在读取子阵列中第一行像素的像素数据的Y分量之后,YUV寻址电路240可以通过AXI总线230发起另外4批突发访问操作,以从子阵列中的第二行像素中的第一个像素起始,读取子阵列中的第二行像素的像素数据的Y分量。在完成读取子阵列中的16行像素的像素数据的Y分量之后,可以遵从相同的处理分别读取子阵列中的像素的像素数据的U分量和V分量。
[0064] 图6A和图6B分别示出了根据本公开的一些实施例的示例性YUV寻址电路的示意性逻辑结构图和示例性坐标寻址方案的示意图。
[0065] 假设根据YUV模型将像素数据存储在DDR 220中,由YUV寻址电路240发起的每个突发访问操作的地址可以包括至少三个部分(如图6A所示)。在图6A中,“maddr”表示突发访问操作的地址。第一部分(即,图6A中的“坐标”)可以包括针对Y区域410中的像素数据的Y分量的坐标点的地址、针对U区域420中的像素数据的U分量的坐标点的地址、或者针对V区域430中的像素数据的V分量的坐标点的地址。第二部分可以包括一个步幅(例如,8)的长度和子阵列中像素行数(即,图6A中的“v”(例如16))的乘积。第三部分可以包括128字节和与坐标点的地址相对应的突发访问操作的批次的数量(即,图6A中的“突发8计数器(Burst8_counter)”(例如4))的乘积。
[0066] 在图6A中,“类端口(Generic port)”是可以被传送到AXI协议总线端口以访问DDR空间的总线端口,并且“mlen”、“msize”、“mburst”是类端口的信号。“mlen”表示一批突发访问操作的长度。当“mlen”被配置为7时(如图6A所示),类端口可以以为8的一批突发访问操作的长度来访问DDR。“msize”表示每个突发访问操作的字节数。“mburst”表示突发访问操作的类型。当“mburst”等于1时(如图6A所示),这意味着地址将自动增加。
[0067] 此外,在图6A中,“mux”表示复用器的缩写。“竖直+水平偏移”表示竖直方向上的地址偏移和水平方向上的地址偏移的总和。“平面”指示处理属于Y或U或V平面的数据。“突发8计数器”表示用于计数在突发8长度模式下DDI访问的次数(即,突发访问操作的批次的数量)的计数器。
[0068] 例如,图6B示意性地示出Y区域410作为示例。在图6B中,每个正方形表示8×8像素单元,并且形成较大正方形的四个正方形表示宏块。像素数据的Y分量的第一坐标点是图6B的左上角中的灰色块的第一像素。在Y区域中执行64批突发访问操作(包括针对在竖直方向上的16个连续行中的每一行的在水平方向上的4批突发访问操作)之后,像素数据的Y分量的坐标点可以被更新为图6B的右上部分中的灰色块的第一像素。
[0069] 在一些实施例中,如果图像的像素数据是YUV444平面格式,则在读取Y区域410中的单个切片的像素数据的Y分量之后,可以将坐标点的地址切换到U区420。在读取U区域420中的单个切片的像素数据的U分量之后,可以将坐标点的地址切换到V区域430。如果图像的像素数据是YUV422半平面格式,则在读取Y区域440中的单个切片的像素数据的Y分量之后,可以将坐标点的地址切换到UV区450。
[0070] 在一些实施例中,在读取第一切片的像素数据的Y分量、U分量和V分量之后,可以读取相同宏块行中的在水平方向上紧接着第一切片的第二切片的像素数据。在水平方向上读取了第一行宏块的像素数据之后,可以将像素数据的坐标点更新为第二行宏块中第一行像素的第一像素(即,整个图像中的第17行像素),以在水平方向上读取第二行宏块的像素数据。可以重复上述处理,直到读取整个图像的像素数据为止。
[0071] 再次参考图1和图2,在130处,可以对从第一存储器读取的部分像素数据进行分割,以获得子阵列中的像素的有效像素数据。例如,图2中所示的像素数据分割电路250可以对从DDR 220读取的该部分像素数据进行分割,以提取有效像素数据。此外,像素数据分割电路250可以产生子阵列中的像素的有效像素数据的存储地址。在140处,可以基于存储地址将子阵列中的像素的有效像素数据存储到第二存储器中。在一些实施例中,第二存储器可以是图2中所示的交替缓冲器260。
[0072] 图7示出了根据本公开的一些实施例的示例性像素数据分割电路和交替缓冲器的示意性逻辑结构图。如所示,像素数据分割电路250可以包括数据分割单元752和存储地址产生单元754。
[0073] 在图7中,“sdata”、“svalid”和“slat”指代类端口的信号。“sdata”的值是由类端口从DDR读回的像素数据。“svalid”用于指示“sdata”是否有效。“slat”用于指示当前“sdata”是否是突发访问操作的最后像素的像素数据。
[0074] 数据分割单元752可以用于从自DDR 220读取的每128比特数据中提取有效像素数据。对于像素数据的不同量化比特宽度,128比特数据中的有效像素数据的位置是不同的。例如,当量化比特宽度是10比特时,128比特数据中的第30比特、第31比特、第62比特、第63比特、第94比特、第95比特、第126比特和第127比特可能是无效数据。作为另一示例,当量化比特宽度是12比特时,128比特数据中的第120比特至第127比特可以是无效数据。
[0075] 数据分割单元752还可以用于从来自针对每行像素的图像尾部的128字节数据中提取有效像素数据。执行最后一次突发访问操作以读取针对每行像素的图像尾部处的像素数据。由最后一次突发访问操作读取的128字节数据可以包括针对每行像素的图像尾部中的不同数量的像素的有效像素数据,所述不同数量的像素取决于图像的分辨率。因此,数据分割单元752可以根据分辨率计算针对每行像素的图像尾部中的像素的数量。例如,当量化比特宽度是10比特时,针对每行像素的图像尾部中的像素的数量可以是8、16、24、32、40、48、56、64、72、80、88或96,这总共12种可能性。
[0076] 在一些实施例中,数据分割单元752可以包括针对不同量化比特宽度的多个数据切割逻辑电路。例如,如图7所示,数据分割单元752包括彼此独立的8比特切割逻辑电路、10比特切割逻辑电路、12比特切割逻辑电路。多个数据切断逻辑电路可以分别基于对应的软件配置由寄存器配置单元(在图7中被标记为“寄存器文件”)启用。
[0077] 在一些实施例中,在每个时钟周期中,数据分割单元752可以发出16个像素的像素数据(其与宏块321中的一行像素的像素数据相对应)的Y分量、U分量或V分量。存储地址产生单元754可以用于计算针对高速缓存在第二存储器中的一个宏块中的每行像素的像素数据的存储地址。
[0078] 第二存储器可以包括一个或多个行缓冲器。每个行缓冲器可以包括多个逻辑存储阵列空间。在一些实施例中,如图2和图7所示,第二存储器包括交替缓冲器260,交替缓冲器260包括第一行缓冲器262和第二行缓冲器264。第一行缓冲器262和第二行缓冲器264中的每一个行缓冲器可以包括用于高速缓存像素数据的Y分量的第一逻辑存储阵列空间、用于高速缓存像素数据的U分量的第二逻辑存储阵列空间、以及用于高速缓存像素数据的V分量的第三逻辑存储阵列空间。
[0079] 在一些实施例中,多个宏块中的每一个宏块可以与顺序号相关联,顺序号指示图像在水平方向上的相对位置。例如,每行中的多个宏块可以与从左到右增加的顺序号相关联。也就是说,对于24个宏块,一行24个宏块可以分别具有从0到23的顺序号。在每个逻辑存储阵列空间中,像素数据可以按照遵循宏块的顺序号的增量的顺序被高速缓存。对于每个宏块,可以首先高速缓存第一行宏块中的像素的像素数据,然后可以高速缓存第二行宏块中的像素的像素数据,然后是高速缓存第三行宏块中的像素的像素数据,依此类推。
[0080] 针对每个宏块的像素数据的地址可以包括可以由计数器(例如,图7中所示的突发8计数器)产生的三个部分。第一部分可以包括针对像素数据的Y分量的头部地址、针对像素数据的U分量的头部地址、和/或针对像素数据的U分量的头部地址,这些头部地址分别指示用于存储像素数据的Y分量、像素数据的U分量、和/或像素数据的U分量的开始位置。第二部分可以包括由宏块的顺序号确定的地址,因为每批突发访问操作所读取的像素数据可以属于不同的宏块。第三部分可以包括包含宏块在内的行的地址。
[0081] 以量化比特宽度为10比特为例,通过突发访问操作读取的每128字节像素数据可以按顺序存储在多个数据寄存器(例如,图7中所述的包括Reg0至Reg7在内的8个数据寄存器)中。包括Reg0至Reg7在内的8个数据寄存器中的每一个数据寄存器的大小可以是128比特。10比特切割逻辑电路可以读取存储在8个数据寄存器中的像素数据,并且每6个时钟周期依次逐个发送6批有效像素数据。每批有效像素数据包括16个像素的像素数据。连续4轮的6批有效像素数据可以与具有24个宏块的一行像素相对应,这24个宏块分别具有从0至23的顺序号。
[0082] 这样,可以将针对具有24个宏块的第一行像素的有效像素数据的Y分量高速缓存在第一逻辑存储阵列空间中的地址0、16、32、48、64、80(按照8相应递增)等处。与具有24个宏块的第二行像素相对应的接下来的24批16个像素的有效像素数据可以高速缓存在第一逻辑存储阵列空间中的地址1、17、33、49、65、81(也按照8相应递增)等处。可以遵循与上述方案相同的方案将针对具有24个宏块的其余行的像素的有效像素数据的Y分量高速缓存在第一逻辑存储阵列空间中。
[0083] 在针对所有24个宏块的有效像素数据的Y分量已经高速缓存在一个行缓冲器的第一逻辑存储阵列空间中之后,针对24个宏块的有效像素数据的U分量可以高速缓存在该一个行缓冲器的第二逻辑存储阵列空间中。针对24个宏块的有效像素数据的U分量的头部地址可以是320。然后,可以将针对24个宏块的有效像素数据的V分量高速缓存在该一个行缓冲器的第三逻辑存储阵列空间中。针对24个宏块的有效像素数据的V分量的头部地址可以是640。
[0084] 再次参考图1,在150处,可以从第二存储器向图像数据处理器发送子阵列中的像素的有效像素数据的子部分。子阵列中的像素的有效像素数据的子部分可以与子阵列中的至少一个像素矩阵相对应。在一些实施例中,每个像素矩阵可以是宏块321。也就是说,每个像素矩阵可以包括第三数量(例如,16)个连续的像素行、以及第三数量(例如,16)个连续的像素列。
[0085] 在一些实施例中,第二存储器可以包括交替缓冲器260(如图2和图7所示),并且图像数据处理器可以包括离散余弦变换(DCT)电路280。如果第一行缓冲器262或第二行缓冲器264中的一个行缓冲器满了,则可以通过像素块提取电路270从该满了的行缓冲器提取每个宏块321的有效像素数据。
[0086] 如图3所示,每个宏块321可以包括四个8×8像素单元,并且8×8像素单元可以如图5所示的那样被编号。图5中的用于表示像素单元的每个像素单元中的号还称为“单元号”。可以遵循像素号的顺序向DCT单元280发出每个宏块321的有效像素数据。例如,对于图5所示的第一宏块中编号为0、1、2和3的四个像素单元,可以首先发送具有单元号0的像素单元,然后按该顺序发送具有单元号1、2和3的像素单元。在每个8×8像素单元中,可以按照从第一行到第八行,向DCT电路280发出具有8个像素的每个行的有效像素数据。
[0087] 在一些实施例中,交替缓冲器260的第一行缓冲器262和第二行缓冲器264可以在相同时间点处于不同的读取和写入状态。例如,在从第一行缓冲器262向DCT电路280发送像素子阵列的第一子部分的有效像素数据的第一时段期间,像素子阵列的第二子部分的有效像素数据可以高速缓存到第二行缓冲器264中。在从第二行缓冲器264向DCT电路280发送像素子阵列的第二子部分的有效像素数据的第二时段期间,像素子阵列的第三子部分的有效像素数据可以高速缓存到第一行缓冲器262中。
[0088] 图8示出了根据本公开的一些实施例的针对不同量化比特宽度的交替缓冲器的示例性最小大小的示意图。具体地,图8示意性地示出了分别与8比特、10比特和12比特的量化比特宽度相对应的三个示例性交替缓冲器810、820和830。此外,交替缓冲器810包括两个行缓冲器812和814,交替缓冲器820包括两个行缓冲器822和824,并且交替缓冲器830包括两个行缓冲器832和834。如图8所示,对于不同的量化比特宽度,针对交替缓冲器的每个行缓冲器的最小深度要求和最小宽度要求可以是不同的。
[0089] 当量化比特宽度是8比特时,水平方向上的4批突发访问操作可以读取具有32个宏块的一行像素的像素数据。这样,交替缓冲器810中的行缓冲器812和814中的每一个行缓冲器的最小深度要求是3×32×16=1536,并且交替缓冲器810中的行缓冲器812和814中的每一个行缓冲器的最小宽度要求是32×4=128比特。
[0090] 当量化比特宽度是10比特时,水平方向上的4批突发访问操作可以读取具有24个宏块的一行像素的像素数据。这样,交替缓冲器820中的行缓冲器822和824中的每一个行缓冲器的最小深度要求是3×24×16=1152,并且交替缓冲器820中的行缓冲器822和824中的每一个行缓冲器的最小宽度要求是32×5=160比特。
[0091] 当量化比特宽度是12比特时,水平方向上的4批突发访问操作可以读取具有20个宏块的一行像素的像素数据。这样,交替缓冲器830中的行缓冲器832和834中的每一个行缓冲器的最小深度要求是3×20×16=960,并且交替缓冲器830中的行缓冲器832和834中的每一个行缓冲器的最小宽度要求是32×6=192比特。
[0092] 如图8所示,为了满足针对8比特的量化比特宽度、10比特的量化比特宽度和12比特的量化比特宽度的上述要求,每个行缓冲器需要具有1536深度和192比特宽度的整个存储单元。在一些实施例中,可以通过基于量化比特宽度重构一个行缓冲器的多个存储单元来形成一个行缓冲器的多个存储阵列空间。在一些实施例中,存储单元可以通过例如地址映射(例如,交替缓冲器的逻辑地址与物理地址之间的映射)来重构。多个存储单元的重构可以显著减少行缓冲器所需的总大小。在本公开中,存储单元的深度和宽度也分别被称为“存储深度”和“存储宽度”。
[0093] 图9示出了根据本公开的一些实施例的针对不同量化比特宽度的行缓冲器的示例性重构结果的示意图。
[0094] 行缓冲器可以包括多个存储单元。多个存储单元中的每一个存储单元可以具有为至少基于量化比特宽度而确定的公共测量值的整数倍的宽度。在一些实施例中,对于所有可能的量化比特宽度,公共测量值可以是行缓冲器的最小宽度要求的最大公约数。例如,对于8比特的量化比特宽度、10比特的量化比特宽度和12比特的量化比特宽度,公共测量值可以是最大公约数(即,128比特、160比特和192比特最小宽度要求的32比特)。
[0095] 基于公共测量值,可以确定具有不同大小的多个存储单元。如图9所示,行缓冲器可以包括宽度为128比特且深度为1024的第一存储单元910、各自具有64比特的宽度和256的深度的两个第二存储单元920、各自具有32比特的宽度和512的深度的两个第三存储单元930、以及具有32比特的宽度和256的深度的第四存储单元940。在一些实施例中,第一存储单元910、第二存储单元920、第三存储单元930和第四存储单元940中的每一个存储单元可以包括第二存储器(例如,交替缓冲器260)中的连续物理存储空间。
[0096] 通过重构第一存储单元910、两个第二存储单元920、两个第三存储单元930和/或第四存储单元940,可以分别针对8比特的量化比特宽度、10比特的量化比特宽度和12比特的量化比特宽度形成具有不同宽度和深度的三个行缓冲器970、980和990。三个行缓冲器970、980和990可以基于不同组合逻辑电路通过地址映射方法来实现。对应的软件配置可以实现对三个行缓冲器970、980和990中的一个或多个行缓冲器的硬件重构。图9中所示的在宽度方向和深度方向两者上的“连续性”仅意指数据在行缓冲器的宽度方向和深度方向上逻辑地连续存储,而不必意指数据实际上连续地存储在对应的物理存储空间中。在本公开中,行缓冲器(例如,行缓冲器970、980或990)的宽度和深度也分别称为行缓冲器的“逻辑宽度”和“逻辑深度”。
[0097] 也就是说,通过以不同的组合重构行缓冲器的多个存储单元,所形成的逻辑存储阵列空间可以具有不同的逻辑宽度和不同的逻辑深度。这样,具有一个不同的量化比特宽度的像素数据可以以阵列形式连续存储在不同的逻辑存储阵列空间中的对应的一个逻辑存储阵列空间中。
[0098] 注意,图9中所示的重构仅是可能的示例,可以执行任何其它合适的重构以在交替缓冲器260中形成行缓冲器。也就是说,存储单元的数量、存储单元的大小和重构方法可以不受图9中所示的示例的限制。可以使用任何其它合适数量的存储单元、任何其它合适大小的存储单元、以及任何其它合适的重构方法来减小行缓冲器的大小。例如,可以使用各自具有32比特的宽度和256的深度的25个存储单元来实现与图9中所示的重构方法类型的重构方法。作为另一示例,具有192比特的宽度和1536的深度的一个存储单元可以直接用作一个行缓冲器,而无需执行重构处理。
[0099] 还应注意,可以按照不限于附图中所示的和以上描述的次序和顺序的任何次序或顺序来执行或进行图1的流程图的以上处理。此外,可以在适当时实质上同时地或并行地执行或进行图1的流程图的以上处理中的一些处理,以减少延时和处理时间。此外,图1仅作为示例提供。图1中所示的处理中的至少一些处理可以以与所示出的同时执行的不同的顺序执行,或者一起被忽略。
[0100] 图10示出了根据本公开的一些实施例的用于图像处理的示例性设备1000的示意性硬件结构图。如所示,用于图像处理的设备1000包括:像素数据读取控制电路1010、像素数据分割电路1020、像素宏块读写控制电路1030、存储器单元映射电路1040、交替缓冲器1050、文件寄存器1060、双倍数据速率同步动态随机存取存储器(DDR)1070、高级可扩展接口(AXI)总线1080、高级外围总线(APB)1090和离散余弦变换(DCT)电路1095。
[0101] 像素数据读取控制电路1010可以包括DDR地址产生逻辑电路和数据读回路径(它们与图2和图6A中所示的YUV寻址模块240相对应),并且可以用于执行如以上结合图1讨论的处理120。像素数据分割电路1020可以包括数据分割单元752和存储地址产生单元754(它们的结构如图7所示)。像素数据分割电路1020可以用于执行如以上结合图1所讨论的处理130。
[0102] 像素宏块读写控制电路1030可以包括交替控制逻辑电路和8×8像素单元发送逻辑电路,并且可以用于执行如上面结合图1所讨论的处理140和150。存储器单元映射电路1040可以用于基于量化比特宽度来重构交替缓冲器1050。
[0103] 文件寄存器1060可以由软件读取和写入,并且可以用于配置图像分辨率、存储格式、量化比特宽度、DDR起始地址和任何其它合适的参数。文件寄存器1060可以针对像素数据读取控制电路1010、像素数据分割电路1020、像素宏块读写控制电路1030、存储器单元映射电路1040和交替缓冲器1050产生控制信号。
[0104] 高级外围总线(APB)1090可以用作到具有低带宽并且不需要高性能的任何外围电路的接口。例如,高级外围总线(APB)1090可以用于提供用于配置寄存器的端口,寄存器包括但不限于图像分辨率寄存器、图像格式寄存器、步幅配置寄存器、像素的比特宽度寄存器等。
[0105] 图11示出了根据本公开的一些实施例的用于实现图像处理方法的示例性系统1100的示意性结构图。
[0106] 系统1100可以包括被配置为执行图像处理功能和/或执行任何其它合适的功能(例如,通过通信网络与一个或多个装置或服务器通信、接收用户请求、处理和发送数据等)的任何合适的装置。例如,系统1100可以被实现在移动电话、平板计算机、膝上型计算机、台式计算机、机顶盒、电视、流媒体播放器、游戏机、服务器或另一合适的装置中。
[0107] 如图11所示,系统1100包括硬件处理器1102、存储器和/或存储装置1104、输入装置控制器1106、输入装置1108、显示器/音频驱动器1110、显示器和音频输出电路1112、通信接口1114、天线1116和总线1118。
[0108] 硬件处理器1102可以包括任何合适的硬件处理器,例如微处理器、微控制器、中央处理单元(CPU)、图形处理单元(GPU)、图像信号处理器(ISP)、离散余弦变换(DCT)处理器、网络处理器(NP)、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、和/或其它可编程逻辑器件、分立栅极或晶体管逻辑器件、分立硬件部件。硬件处理器1102可以实现或执行本公开的各种实施例,包括一个或多个方法、处理和/或逻辑图。例如,硬件处理器1102可以实现或执行以上结合图1描述的用于图像处理的所公开的方法的各种实施例。
[0109] 在一些实施例中,存储器和/或存储装置1104可以是用于存储程序代码、数据、媒体内容、图像数据、网页URL、频道页面表、网页资源的原始数据、用户的信息、和/或任何其它合适的内容的任何合适的存储器和/或存储装置。例如,存储器和/或存储装置1104可以包括随机存取存储器(RAM)、双倍数据速率同步动态随机存取存储器(DDR)、行缓冲器、交替缓冲器、只读存储器、闪存、非易失性存储器(例如,硬盘存储装置、光学介质)和/或任何其它合适的存储装置。
[0110] 在一些实施例中,输入装置控制器1106可以是用于控制和接收来自一个或多个输入装置1108的输入的任何合适的电路。例如,输入装置控制器1106可以是用于从触摸屏、从一个或多个按钮、从语音识别电路、从麦克风、从相机、从光学传感器、从加速度计、从温度传感器、从近场传感器接收输入的电路、和/或用于接收用户输入的任何其它合适的电路。
[0111] 在一些实施例中,显示器/音频驱动器1110可以是用于控制和驱动到一个或多个显示器和音频输出电路1112的输出的任何合适的电路。例如,显示器/音频驱动器1110可以是用于驱动LCD显示器、扬声器、LED和/或任何其它显示器/音频装置的电路。
[0112] 通信接口1114可以是用于与一个或多个通信网络接口连接的任何合适的电路。例如,接口1114可以包括网络接口卡电路、无线通信电路和/或用于与一个或多个通信网络(例如,互联网、广域网、本地网络、城域网等)接口连接的任何其它合适的电路。
[0113] 在一些实施例中,天线1116可以是用于与通信网络无线通信的任何合适的一个或多个天线。在一些实施例中,可以在不需要时省略天线1116。
[0114] 在一些实施例中,通信网络可以是一个或多个有线和/或无线网络的任何合适组合,例如互联网、内联网、广域网(WAN)、局域网(LAN)、无线网络、数字订户线(DSL)网络、帧中继网络、异步传输模式(ATM)网络、虚拟专用网络(VPN)、WiFi网络、WiMax网络、卫星网络、移动电话网络、移动数据网络、电缆网络、电话网络、光纤网络、和/或任何其它合适的通信网络、或这样的网络中的任何网络的任何组合。
[0115] 总线1118可以是用于在系统1100的两个或更多个部件之间进行通信的任何合适的机制。总线1118可以包括地址总线、数据总线、控制总线等。具体地,总线1118可以包括高级可扩展接口(AXI)总线、高级外围总线(APB)、以及以上结合图10所述的任何其它合适的总线。总线1118表示为图11中的双向箭头,但这并不意味着它仅是一种类型的总线或仅一个总线。
[0116] 在各种实施例中,所公开的方法中的处理可以由硬件解码处理器执行,或者由包括硬件模块和软件模块在内的解码处理器执行。软件模块可以驻留在任何合适的存储/存储器介质中,例如随机存取存储器、闪存、只读存储器、可编程只读存储器、电可擦除可编程存储器、寄存器等。存储介质可以位于存储器和/或存储装置1104中。硬件处理器1102可以通过将硬件与从存储器和/或存储装置1104读取的信息进行组合来实现所公开的方法。
[0117] 图12示出了根据本公开的一些其它实施例的用于实现图像处理方法的另一示例性系统的示意性结构图。如所示,用于实现图像处理方法的系统可以是无人飞行器1200。无人飞行器1200包括用于图像处理的设备1260。设备1260可以是例如图10中所示的用于图像处理的设备1000。无人飞行器1200还包括输入信号接收器1250、电力系统1210、飞行控制系统1220、通信接口1230、一个或多个相机1240、和/或任何其它合适的部件。此外,无人飞行器1200包括用于容纳一个或多个上述部件的壳体1290。
[0118] 在一些实施例中,无人飞行器1200可以由遥控装置控制。遥控装置可以是用于无人飞行器1200的特定遥控装置,或者可以是在诸如智能电话、平板计算机之类的移动智能装置上实现的软件应用。
[0119] 注意,附图中的流程图和框图示出了所公开的方法和设备的各种实施例、以及可以由计算机程序产品实现的架构、功能和操作。在这种情况下,流程图或框图的每个块可以表示代码段或程序代码的一部分。每个代码段或程序代码的一部分可以包括用于实现预定逻辑功能的一个或多个可执行指令。
[0120] 注意,在一些实施例中,可以以不限于附图中所示和上文所述的次序和顺序的任何次序或顺序来执行或进行块中所示的功能。例如,两个连续的块实际上可以在适当时实质上同时或并行地执行以减少延时和处理时间,或者甚至可以根据所涉及的功能以相反的顺序执行。
[0121] 还应注意,框图和/或流程图中的每个块以及框图和/或流程图中的块的组合可以通过用于执行特定功能的专用基于硬件的系统来实现,或者可以通过将硬件和计算机指令组合的专用系统来实现。
[0122] 因此,提供了用于图像处理的方法、系统和介质。在所公开的用于图像处理的方法、系统和介质中,可以通过特定寻址方法来读取多个宏像素块的像素数据。所公开的用于图像处理的方法、系统和介质可以消除存储单元对分辨率的依赖性,而不是读取图像的整行像素的像素数据。
[0123] 此外,通过使用数据分割,可以提取有效像素数据,允许所公开的用于图像处理的方法、系统和介质支持具有包括为8或16的倍数的数量个像素在内的宽度和/或高度的任何高分辨率图像。此外,通过重构存储单元,可以进一步减小交替缓冲器的大小,消除了存储单元对量化比特宽度的依赖性。
[0124] 如下面的表1所示,以8比特的量化比特宽度为例,针对现有方法和根据本公开的方法两者列出了针对四种典型分辨率的行缓冲器的最小大小要求。在现有方法中,行缓冲器的最小大小要求与分辨率的宽度成比例。然而,在根据本公开的方法中,行缓冲器的最小大小要求可以小于现有方法中的最小大小要求,并且可以是固定的而不受图像分辨率的影响。因此,为了处理高分辨率图像和/或视频(例如,4K图像/视频),现有方法中行缓冲器的大小要求几乎是根据本公开的方法中的行缓冲器的大小要求的十倍。
[0125]
[0126] 表1
[0127] 本文描述的示例(以及表述为“比如”、“例如”、“包括”等的款项)的提供不应被解释为将所要求保护的主题限制于特定示例;相反,示例仅用于说明许多可能方面中的一些方面。
[0128] 此外,应当理解,本公开仅通过示例的方式进行,并且在不脱离本公开的精神和范围的情况下,可以对本公开的实施例的细节进行许多改变。可以以各种方式组合和重新布置所公开的实施例的特征。在不脱离本公开的精神和范围的情况下,本公开的修改、等同物或改进对于本领域技术人员来说是可以理解的,并且旨在包含在本公开的范围内。应当注意,类似的附图标记和字母指代附图中的类似项目,因此当在一个附图中定义了项目时,则不需要在后续附图中另外定义和/或解释该项目。