CN114219700B - 一种图像处理方法、系统、设备及介质 - Google Patents
一种图像处理方法、系统、设备及介质 Download PDFInfo
- Publication number
- CN114219700B CN114219700B CN202210164392.XA CN202210164392A CN114219700B CN 114219700 B CN114219700 B CN 114219700B CN 202210164392 A CN202210164392 A CN 202210164392A CN 114219700 B CN114219700 B CN 114219700B
- Authority
- CN
- China
- Prior art keywords
- data
- address
- block
- width
- image
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/455—Image or video data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Input (AREA)
Abstract
本发明公开了一种图像处理方法、系统、设备及介质,该方法通过对图像数据进行分块,得到至少一个数据块;根据用户设定的stride对齐方式确定取数宽度;并根据取数宽度和数据块的首地址将数据块分为首数据块、中间数据块以及末数据块;依次将首数据块、中间数据块和末数据块中的图像数据写入数据缓存模块;根据处理块大小和地址顺序从数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。本方案可减少在水平方向上的块与块之间断点的一次Memory总线请求,并且根据处理块大小从数据缓存模块数据获取图像数据时,还复用水平方向上的预设列数据,无需再次发出Memory总线请求,更进一步减少总线请求,提高了图像处理的效率。
Description
技术领域
本发明涉及图像处理技术领域,尤其涉及一种图像处理方法、系统、设备及介质。
背景技术
相关技术中,对图像进行处理时,使用固定处理块大小方式读取图像数据用于图像硬件加速,在处理图像如任意角度旋转、图像放缩、图像错切或者图像放缩加固定旋转等功能时,由于这些图像功能按块处理时在计算目标图像像素点时通常需采用Bilinear滤波算法处理分块边界像素点,因而需要多取上/下/左/右四个方向的像素点。若采用固定处理块大小方式取对应块数据的方式时,则每次从外部存储取数据时需多取四个方向的像素。例如实现Bilinear算法处理时多取3个像素点,因而增加总线请求,则将提高Memory总线的额外占用时间,这将大幅度降低图像处理的工作效率。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种图像处理方法、系统、设备及介质,能够减少总线请求,提升图像处理效率。
根据本发明的第一方面实施例的图像处理方法,包括:
对图像数据进行分块,得到至少一个数据块;
根据用户设定的stride对齐方式确定取数宽度;
当所述数据块的首地址非8字节对齐,根据所述取数宽度和所述首地址确定第一取数宽度,并根据所述第一取数宽度和所述首地址从所述数据块中取出首数据块,所述第一取数宽度小于所述取数宽度;
从所述首数据块的末地址的下一地址开始,按照地址顺序根据所述取数宽度依次取出数据作为中间数据块,直到所述数据块的余下数据的宽度小于所述取数宽度,将所述数据块的余下数据取出作为末数据块;
依次将所述首数据块、所述中间数据块和所述末数据块中的图像数据写入数据缓存模块;
根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
根据本发明实施例的图像处理方法,至少具有如下有益效果:通过用户设置的stride对齐方式与图像数据的首地址对图像数据进行分块,确保不会重复取图像的行数据。相比固定处理块大小的取数据方式,在首地址非对齐的情况下,保证中间数据块的取数宽度与总线请求的字节对齐相对应。可减少一次读取数据中块与块之间水平方向上断点的一次Memory总线请求,从而优化对总线的占用。并且根据处理块大小从数据缓存模块数据获取图像数据时,还复用水平方向上的预设列数据,无需再次发出Memory总线请求,更进一步减少总线请求,提高了图像处理的效率。
根据本发明的一些实施例,所述取数宽度为所述stride对齐方式对应的字节数的整数倍。
根据本发明的一些实施例,所述根据所述取数宽度和所述首地址确定第一取数宽度,包括:
根据所述取数宽度确定第一数量,所述第一数量为地址中低位为零的个数;
按照地址顺序在所述数据块的地址中确定低位为零的第二数量,并当所述第二数量大于或等于所述第一数量,将所述第二数量对应的地址作为所述数据块的第一对齐地址;
根据所述首地址和所述第一对齐地址确定第一取数宽度。
根据本发明的一些实施例,所述根据所述取数宽度和所述首地址确定第一取数宽度,包括:
根据所述取数宽度确定地址对齐倍数;
根据所述地址对齐倍数以及按照地址顺序在所述数据块的地址中查找第二对齐地址,所述第二对齐地址与所述地址对齐倍数成倍数关系;
根据所述首地址和所述第二对齐地址确定第一取数宽度。
根据本发明的一些实施例,所述数据缓存模块至少满足两个处理块的乒乓操作。
根据本发明的一些实施例,所述根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据,包括:
根据上一次所读取的图像数据在所述数据缓存模块中所处的位置,以及所述预设列数据确定预设列位置;
根据处理块大小和地址顺序从所述预设列位置开始读取水平方向上的图像数据。
根据本发明的一些实施例,根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用垂直方向上的预设行数据,包括:
根据上一次所读取的图像数据在所述数据缓存模块中所处的位置,以及所述预设行数据确定预设行位置;
根据处理块大小和地址顺序从所述预设行位置开始读取垂直方向上的图像数据。
根据本发明的第二方面实施例的一种图像处理系统,包括:
分块处理模块,用于对图像数据进行分块,得到至少一个数据块;
取数宽度确定模块,用于根据用户设定的stride对齐方式确定取数宽度;
第一处理模块,用于当所述数据块的首地址非8字节对齐,根据所述取数宽度和所述首地址确定第一取数宽度,并根据所述第一取数宽度和所述首地址从所述数据块中取出首数据块,所述第一取数宽度小于所述取数宽度;
第二处理模块,用于从所述首数据块的末地址的下一地址开始,按照地址顺序根据所述取数宽度依次取出数据作为中间数据块,直到所述数据块的余下数据的宽度小于所述取数宽度,将所述数据块的余下数据取出作为末数据块;
图像数据写入模块,用于依次将所述首数据块、所述中间数据块和所述末数据块中的图像数据写入数据缓存模块;
图像数据获取模块,用于根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
根据本发明实施例的图像处理系统,至少具有如下有益效果:通过用户设置的stride对齐方式与图像数据的首地址对图像数据进行分块,确保不会重复取图像的行数据。相比固定处理块大小的取数据方式,在首地址非对齐的情况下,保证中间数据块的取数宽度与总线请求的字节对齐相对应。可减少一次读取数据中块与块之间水平方向上断点的一次Memory总线请求,从而优化对总线的占用。并且根据处理块大小从数据缓存模块数据获取图像数据时,还复用水平方向上的预设列数据,无需再次发出Memory总线请求,更进一步减少总线请求,提高了图像处理的效率。
根据本发明的第三方面实施例的一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明第一方面实施例中任意一项所述的方法。
根据本发明的第四方面实施例的一种存储介质,所述存储介质为计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行如本发明第一方面实施例中任意一项所述的方法。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
下面结合附图和实施例对本发明做进一步的说明,其中:
图1为本发明实施例提供的一种图像处理方法的整体流程图;
图2为本发明实施例提供的一种图像处理方法的第一流程图;
图3为本发明实施例提供的一种图像处理方法的第二流程图;
图4为本发明实施例提供的在数据缓存模块中的数据存储方式的示意图;
图5为本发明实施例提供的在数据缓存模块的水平方向上的数据读取方式的示意图;
图6为本发明实施例提供的在数据缓存模块的垂直方向上的数据读取方式的示意图;
图7为本发明实施例提供的一种图像处理方法的另一个整体流程图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个以上,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
本发明的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
相关技术中,硬件加速图像处理的取数据方式主要有三种,第一种是直接使用CPU加速处理图像;第二种使用行缓存buffer读取数据的方式;第三种按固定处理块大小取块数据的方式。第一种:直接使用CPU进行图像处理,即使用CPU直接读写外部存储器的像素数据,这样数据操作虽然简单,但实际无法满足图像处理效率要求。第二种:使用行缓存的方式读取图像数据用于图像处理,该方式适用于小尺寸图像硬件加速,然而在大尺寸时多行数据缓存将消耗较多的硬件存储资源,因此对于大尺寸分辨率的硬件加速图像处理而言通常不采用该方式。第三种:使用固定处理块大小方式读取图像数据用于图像硬件加速,如图像固定角度旋转(0度/90度/180度/270度/水平镜像/垂直镜像)功能时,由于不需要Bilinear双线性差值算法的额外多取行数据,因此按固定处理块大小取数据的方式基本满足功能要求。但按固定处理块大小取数据存在以下问题,Memory总线(如AXI协议)是一次请求是需要8字节(byte)对齐的,若两次处理块的行数据之间断点在一次8字节之间,则这一笔AXI请求需要重复请求两次,需要分别丢掉不需要的字节数据。然而,在图像处理中,多次的总线请求无疑会降低图像处理的速度,这极大影响图像处理的性能以及影响用户体验。
基于此,本发明实施例提出一种图像处理方法、系统、设备及介质,本方案是通过用户设置的stride对齐方式与图像数据的首地址对图像数据进行分块,确保不会重复取图像行数据。相比固定处理块大小的取数据方式,在首地址非对齐的情况下,保证中间数据块的取数宽度与总线请求的字节对齐相对应。可减少一次读取数据块与数据块之间水平方向上断点的一次Memory总线请求,从而优化对总线的占用。并且根据处理块大小从数据缓存模块数据获取图像数据时,还复用水平方向上的预设列数据,无需再次发出Memory总线请求,更进一步减少总线请求,提高了图像处理的效率。
如图1所示,图1是本发明一个实施例提供的图像处理方法的流程图。本发明实施例的图像处理方法,包括但不限于有步骤S110、步骤S120、步骤S130、步骤S140、步骤S150和步骤S160。
步骤S110,对图像数据进行分块,得到至少一个数据块。
具体的,一张待处理的图像(H*W)包括大量的图像数据,对该图像数据进行分块,得到至少一个数据块。需要说明的是,若存在多个数据块,那这多个数据块是在垂直方向上并行排列。例如一张待处理的图像(H*W),分成h1*W、h2*W、h3*W,其中h1+h2+h3=H,需要说明的是h1、h2、h3可以相同,也可以互不相同。可以理解的是,可根据处理块的大小确定数据块的高度。
步骤S120,根据用户设定的stride对齐方式确定取数宽度。
具体的,stride对齐方式越大,图像数据的总宽度越大。例如,stride对齐方式:比如整体图像宽度为100字节,若要求stride对齐方式为128字节,那么stride长度至少为128字节,或者128的倍数,其中每一行将空置28字节。若stride对齐方式为8字节,那么stride长度至少为104字节,或112字节、120字节等,若是104字节则其中每一行空置4字节。可以理解的是,用户设置的stride对齐方式越大,那图像数据的总宽度越大,导致占用的存储空间会增大。但取数宽度可随着stride对齐方式增大,在如今存储空间资源充足的情况下,取数宽度越大将影响一次取数据的大小,一次取的数据越多,越有益于提高图像处理的速度。以固定处理块大小方式取数据无法由用户进行灵活配置stride对齐来进行取块。并且固定处理块大小取数据方式的字节对齐限制将会严重影响用户使用体验及外部Memory存储空间使用效率。
步骤S130,当数据块的首地址非8字节对齐,根据取数宽度和首地址确定第一取数宽度,并根据第一取数宽度和首地址从数据块中取出首数据块,第一取数宽度小于取数宽度;步骤S140,从首数据块的末地址的下一地址开始,按照地址顺序根据取数宽度依次取出数据作为中间数据块,直到数据块的余下数据的宽度小于取数宽度,将数据块的余下数据取出作为末数据块。
在步骤S130至步骤S140中,以首地址非8字节对齐,例如首地址低三位为2,用户设定的stride对齐为16字节对齐为例。首数据块中的每一行的行数据的第一取数宽度将为14字节,但是总线将取回16字节数据。其中前2字节数据为多余数据,将被丢弃,后14字节为有效数据将被储存到数据缓存模块。中间数据块中的每一行的行数据将以16字节取数据。末数据块的每一行的行数据为剩余字节,将读取16字节或8字节,丢弃多余的字节数据,并将有效的数据储存到数据缓存模块。
步骤S150,依次将首数据块、中间数据块和末数据块中的图像数据写入数据缓存模块。
具体的,本方案的取数据方式仅在行数据第一笔Memory总线请求和最后一笔请求时总线请求非8字节对齐,其中中间块根据stride对齐方式至少为8字节对齐。因此,不会因此首地址非8字节对齐导致增加其他额外的总线请求,若按固定处理大小取数据时,块与块之间会导致有非对齐总线请求。
步骤S160,根据处理块大小和地址顺序从数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
具体的,按处理块进行图像处理时,块边界的像素点计算需要进行插值滤波处理,则需要多取pixel实现(如32*32处理块大小,插值滤波需要38*38 pixel实现)。若按固定处理块大小,则每次需要重复通过Memory总线从外部存储器读取,本方案是在数据缓存模块通过复用水平方向上的预设列数据,使得插值滤波需要的额外pixel不需要重复通过memory总线读取。预设列数据可由用户配置,本实施例所指的预设列数据据为六列数据,若是随着精度要求的提高,预设列数据也可随着增加。本发明实施例通过在外部存储模块和处理块之间设置一个数据缓存模块,使得处理块在获取图像数据时不需要增加多余的总线请求,尤其是在需要多获取图像处理算法带来的额外像素时,可通过在数据缓存模块复用水平方向列数据的方式,有效减少了总线请求,大大提高了图像处理的效率。
需要说明的是,本申请先从外部存储空间获取图像数据并存入数据缓存模块,再根据处理块大小从数据缓存模块获取图像数据用于图像处理,相较于现有技术,减少了总线请求,优化了对总线的占用,提高了图像处理的效率。
可以理解的是,取数宽度为stride对齐方式对应的字节数的整数倍。
例如,stride对齐方式为16字节对齐,则其对应的字节数即为16。取数宽度为16的整数倍,可为16、32、64、128、256等。在如今存储空间资源充足的情况下,取数宽度越大将影响一次取数据的大小,一次取的数据越多,越有益于提高图像处理的速度。本方案在取中间数据块方式上提供用户自定义配置方式,可由用户平衡占用系统内存空间与图像加速效率之间的关系。若系统内存空间大,则可配置图像数据对齐方式如128字节,大的对齐方式会浪费更多的内存空间。但会提高图像处理的速度,如当stride为16字节对齐时,中间数据块的行数据将以16字节为宽度进行取块数据,这样能够使得块的每一行数据的总线请求地址低4位对齐,从而节省总线地址计算控制逻辑资源。
参照图2,步骤S130包括但不限于步骤S210至步骤S230。
步骤S210,根据取数宽度确定第一数量,第一个数为地址中低位为零的个数;
步骤S220,按照地址顺序在数据块的地址中确定低位为零的第二数量,并当第二数量大于或等于第一数量,将第二数量对应的地址作为数据块的第一对齐地址;
步骤S230,根据首地址和第一对齐地址确定第一取数宽度。
具体的,以首地址非8字节对齐,即首地址低三位为2时,用户设定的stride对齐为16字节对齐为例。根据16字节确定地址中低位为零的第一个数为4。从首地址开始按地址顺序确定第二个数,如数据块中地址为3的第二个数为0,地址为4的第二个数为2,该第二个数都不满足条件。直到查找到地址为16的第二个数为4,并将该地址作为第一对齐地址。根据首地址和第一对齐地址确定第一取数宽度为14。
参照图3,步骤S130还包括但不限于步骤S310至步骤S330。
步骤S310,根据取数宽度确定地址对齐倍数;
步骤S320,根据地址对齐倍数以及按照地址顺序在数据块的地址中查找第二对齐地址,第二对齐地址与地址对齐倍数成倍数关系;
步骤S330,根据首地址和第二对齐地址确定第一取数宽度。
具体的,以首地址非8字节对齐,即首地址低三位为2时,用户设定的stride对齐为16字节对齐为例。根据16字节确定地址对齐倍数为16。从首地址开始按地址顺序,将每一个地址与地址对齐倍数进行计算,例如地址为3不是16的倍数,直至到地址16,才是16的倍数,将地址16作为第二对齐地址。根据第二对齐地址和首地址确定第一数据宽度为14字节。
在另一实施例中,以首地址非8字节对齐,即首地址为17时,用户设定的stride对齐为16字节对齐为例。根据16字节确定地址对齐倍数为16。从首地址开始按地址顺序,将每一个地址与地址对齐倍数进行计算,例如地址为18、地址为19均不是16的倍数,直至到地址32,才是16的倍数,将地址32作为第二对齐地址。根据第二对齐地址和首地址确定第一数据宽度为5字节。可以理解的是,根据取数宽度和首地址确定第一取数宽度,并根据第一取数宽度和首地址从数据块中取出首数据块。这样的好处是,虽然首数据块的取数宽度不与总线请求要求的8字节对齐,但此后中间数据块的取数宽度都与8字节对齐,不会产生因首地址非对齐导致的块与块之间数据的中断,减少了总线请求。
在一实施例中,数据缓存模块至少满足两个处理块的乒乓操作。
具体的,参照图4,图4为本发明实施例提供的在数据缓存模块中的数据存储方式的示意图。在图4中,水平方向上表示的是每一行像素包括的列像素,垂直方向上表示的是具体有多少行,即在数据缓存模块中,存储有2*m+9列的像素数据,n+6行的像素数据。以处理块m*n pixel为例(包括但不止32x32 pixel,64x64 pixel等),那一个处理块所需图像数据的列数至少大于m列,又为满足bilinear算法所需的六列数据(包括上一个块的后三列,与下一个块的前三列),因此在图4中,一个m列像素两旁均有3列像素,因此为满足两个处理块能够在数据缓存模块内进行乒乓操作,在水平方向上,每一行像素至少存储有2*m+9列像素的数据。在一实施例中,为满足bilinear算法以及两个处理块乒乓操作,以处理块32*32为例,图像加速处理如旋转/放缩/错切等功能的时,bilinear算法在处理每个边界(上边界、下边界、左边界、右边界)时都需要多加3个pixel,那么完成每个处理块需要(32+6)*(32+6)pixel数据才满足32*32处理块图像处理的需求,那么水平方向至少需要缓存2*32+12的pixel数据做乒乓处理。但由于本发明实施例复用了水平方向的预设列数据,所以在水平方向上的数据缓存模块的空间可减少。
具体的,参照图5,图5为本发明实施例提供的在数据缓存模块的水平方向上的数据读取方式的示意图。在读取水平方向上的像素数据时,第一个处理块(图5中的块1)需要从第一列开始读取数据至第m+6列的数据。对于第二个处理块(图5中的块2)而言,需要复用第一个处理块的后三列数据(即从m+4开始获取第二个处理块所需的数据),因此数据缓存空间在水平方向上至少需要2*m+9。第三个处理块(图5中的块3)则从第二个处理块的后三列的位置(即2*m+7)开始获取数据,直至m+3,第四个处理块(图5中的块4)则从第三个处理块的后三列的位置(即第m+1列)开始获取数据。每一个处理块获取数据时从上一个处理块的后三列的位置开始读取水平方向上的数据,可以设置水平方向上的缓存空间大于2*m+9,例如3*m等,可以提高硬件流水线处理的流利度。需要说明的是,若是复用水平方向上的预设列数据为六列,说明此次处理块需复用上一个处理块的后三列数据,以及复用下一个处理块的前三列数据。
可以理解的是,根据处理块大小和地址顺序从数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据,包括:
根据上一次所读取的图像数据在数据缓存模块中所处的位置,以及预设列数据确定预设列位置;
根据处理块大小和地址顺序从预设列位置开始读取水平方向上的图像数据。
具体的,确定上一次所读取的图像数据在数据缓存中的位置,以及确定所要复用的水平方向上的预设列数据,例如预设列数据为六列,根据确定的位置和确定的预设列数据得到预设列位置,如预设列位置为上一次所读取的图像数据的倒数三列的位置。并根据处理块大小和地址顺序从预设列位置开始读取水平方向上的图像数据。
需要说明的是,根据所需复用的预设列数据不同,得到的预设列位置随之不同。
可以理解的是,根据处理块大小和地址顺序从数据缓存模块中依次获取图像数据,并复用垂直方向上的预设行数据,包括:
根据上一次所读取的图像数据在数据缓存模块中所处的位置,以及预设行数据确定预设行位置;
根据处理块大小和地址顺序从预设行位置开始读取垂直方向上的图像数据。
具体的,确定上一次所读取的图像数据在数据缓存中的位置,以及确定所要复用的水平方向上的预设行数据,例如预设行数据为六行,根据确定的位置和确定的预设行数据得到预设行位置,如预设行位置为上一次所读取的图像数据的倒数三行的位置。并根据处理块大小和地址顺序从预设行位置开始读取垂直方向上的图像数据。
具体的,参照图6,垂直方向由于bilinear算法至少需要n+6行的数据存储空间。第一个处理块(图6中的块1)需要从第一行开始读取像素数据至第n+6行的数据。对于第二个处理块(图6中的块2)而言,需要复用第一个处理块的后三行数据(即从n+4开始获取第二个处理块所需的数据)。垂直方向上,一个块使用的下方3行像素将被下一个块使用,因此在垂直方向同样进行存储空间的轮序,并控制数据将bilinear数据进行写入与清除。若采用n+6行数据存储空间,那么在上一个处理块时使用全部空间,在下一个处理块将从后三行数据开始轮序到行首。从而达到连续循环读写。若继续增加行数据存储空间,那将可继续增加缓冲行数据,从而能够进一步提升硬件加速图像处理的连续处理效率。
需要说明的是,根据所需复用的预设行数据不同,得到的预设行位置随之不同。
可以理解的是,可以根据实际复用或者增加数据缓存模块的存储空间大小,可一次缓存更多个处理块数据,可以进一步提升硬件加速图像的处理速度。
参照图7,本方案将取数据块与处理块进行区分控制,取数据按stride对齐方式处理,而图像处理功能时按pixel,即按照处理块的大小处理。在取数据时根据首地址、图像stride对齐等限制按字节对齐方式进行,Memory总线(通常为AXI协议)需要8字节对齐。在产生取数据块控制逻辑时,第一笔数据块总线请求的地址将结合图像首地址,以确保中间数据块能够实现至少stride对齐(8字节对齐为例),而中间取数据将主要根据图像stride对齐方式进行划块。而在图像处理时按处理块大小进行像素pixel块的图像处理(处理块大小即图像按块处理的最大size(限制最大处理块,小于等于该size都可处理),通常处理块大小如32*32,64*64,64*32 pixel等。处理块越大需要的缓存空间越大,需要更多芯片面积,但是能够一定程度上提高图像加速效率。处理块太小则需要更多次块的划分,需要更多控制逻辑,会降低图像加速效率。通常会平衡芯片面积与图像加速效率来选择处理块的大小。本方案实现取数据块与处理块之间的数据块与像素块大小之间的分别控制与调整。
与以固定处理块大小取数据的方式相比,可节省水平方向上bilinear算法额外多取数据的Memory总线请求,以及可节省一次由于数据块与块之间行数据断点的Memory总线请求。具体是:现有做法通常是按处理块大小直接进行Memory总线取数据,然而Memory总线(如AXI协议)是一次请求是需要8字节对齐的,若两次处理块行数据之间断点在一次8字节之间,则这一笔AXI请求需要重复请求两次(分别丢掉不需要的字节数据)。而本方案做法:取数据不按处理块大小取数据,而是根据图像数据字节对齐方式进行。确保不会重复取图像行数据,从而会减小Memory总线请求次数。
按处理块进行图像处理时,块边界的像素点计算需要进行插值滤波处理,则需要多取pixel实现(如32*32处理块大小,插值滤波需要38*38 pixel实现。若按固定处理块大小,则每次需要重复通过Memory总线从外部存储器读取,本发明实施例通过控制逻辑在数据缓存模块控制复用插值滤波需要的额外pixel,不需要重复通过memory总线读取)。
另外,本发明实施例在回写像素数据时同样顺延Memory总线取数据块信息,以同样的取数据块方式回写像素数据到外部存储器。相比于固定取数据块方式回写像素数据,同样使硬件加速图像处理降低对Memory总线的占用时间,可进一步提高硬件加速图像处理的整体效率。
另外在不提高Memory总线占用时间的前提下,本发明实施例还可兼容了某些需要变化处理块大小的图像加速情景。本发明实施例支持功能模块进行按块处理的直接数据来自数据缓存模块,当功能模块需要不规则size处理或者变化处理块大小时,由于在最后一个处理块可能为任意大小(从1*1 pixel到处理块大小),因而在数据缓存模块输出数据逻辑支持任意大小的处理块。若功能模块需要变化处理块大小,本发明实施例也能够支持,且不需要修改总线请求控制逻辑,并且不会增加由于size变化导致总线请求次数增多及控制逻辑复杂度加大的情况。如在图像放缩需根据放缩比例变化当前处理块大小时,本发明实施例可通过调整像素数据缓存模块读出数据控制方案,对缓存空间输出控制逻辑根据当前处理块大小进行调整。因此在无需提高Memory总线占时间和缓存空间的基础上,可兼容变化处理块大小的图像加速处理。
本发明实施例还提供了一种图像处理系统,包括:
分块处理模块,用于对图像数据进行分块,得到至少一个数据块;取数宽度确定模块,用于根据用户设定的stride对齐方式确定取数宽度;第一处理模块,用于当数据块的首地址非8字节对齐,根据取数宽度和首地址确定第一取数宽度,并根据第一取数宽度和首地址从数据块中取出首数据块,第一取数宽度小于取数宽度;第二处理模块,用于从首数据块的末地址的下一地址开始,按照地址顺序根据取数宽度依次取出数据作为中间数据块,直到数据块的余下数据的宽度小于取数宽度,将数据块的余下数据取出作为末数据块;图像数据写入模块,用于依次将首数据块、中间数据块和末数据块中的图像数据写入数据缓存模块;图像数据获取模块,用于根据处理块大小和地址顺序从数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
具体的,该图像处理系统各个模块通过执行图像处理方法,通过用户设置的stride对齐方式与图像数据的首地址对图像数据进行分块,确保不会重复取图像行数据。相比固定处理块大小的取数据方式,在首地址非对齐的情况下,保证中间数据块的取数宽度与总线请求的字节对齐相对应。可减少一次读取数据块与数据块之间水平方向上断点的一次Memory总线请求,从而优化对总线的占用。并且根据处理块大小从数据缓存模块数据获取图像数据时,还复用水平方向上的预设列数据,无需再次发出Memory总线请求,更进一步减少总线请求,提高了图像处理的效率。
其中,一种图像处理系统的具体执行步骤参照上述一种图像处理方法,此处不再赘述。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一项方法实施例中的方法。
此外,本发明的一个实施例还提供了一种存储介质,该存储介质为计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个控制处理器执行,一个或多个控制处理器执行上述方法实施例中的方法,例如,执行以上描述的图1中的方法步骤S110至S160、图2中的方法步骤S210至S230、图3中的方法步骤S310至S330。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络节点上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本公开实施例描述的实施例是为了更加清楚的说明本公开实施例的技术方案,并不构成对于本公开实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本公开实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,实施例示出的技术方案并不构成对本公开实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机可读存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机可读存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机可读存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。此外,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
Claims (10)
1.一种图像处理方法,其特征在于,包括:
对图像数据进行分块,得到至少一个数据块;
根据用户设定的stride对齐方式确定取数宽度;
当所述数据块的首地址非8字节对齐,根据所述取数宽度和所述首地址确定第一取数宽度,并根据所述第一取数宽度和所述首地址从所述数据块中取出首数据块,所述第一取数宽度小于所述取数宽度;
从所述首数据块的末地址的下一地址开始,按照地址顺序根据所述取数宽度依次取出数据作为中间数据块,直到所述数据块的余下数据的宽度小于所述取数宽度,将所述数据块的余下数据取出作为末数据块;
依次将所述首数据块、所述中间数据块和所述末数据块中的图像数据写入数据缓存模块;
根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
2.根据权利要求1所述的一种图像处理方法,其特征在于,所述取数宽度为所述stride对齐方式对应的字节数的整数倍。
3.根据权利要求1所述的一种图像处理方法,其特征在于,所述根据所述取数宽度和所述首地址确定第一取数宽度,包括:
根据所述取数宽度确定第一数量,所述第一数量为地址中低位为零的个数;
按照地址顺序在所述数据块的地址中确定低位为零的第二数量,并当所述第二数量大于或等于所述第一数量,将所述第二数量对应的地址作为所述数据块的第一对齐地址;
根据所述首地址和所述第一对齐地址确定第一取数宽度。
4.根据权利要求1所述的一种图像处理方法,其特征在于,所述根据所述取数宽度和所述首地址确定第一取数宽度,包括:
根据所述取数宽度确定地址对齐倍数;
根据所述地址对齐倍数以及按照地址顺序在所述数据块的地址中查找第二对齐地址,所述第二对齐地址与所述地址对齐倍数成倍数关系;
根据所述首地址和所述第二对齐地址确定第一取数宽度。
5.根据权利要求1所述的一种图像处理方法,其特征在于,所述数据缓存模块至少满足两个处理块的乒乓操作。
6.根据权利要求1所述的一种图像处理方法,其特征在于,所述根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据,包括:
根据上一次所读取的图像数据在所述数据缓存模块中所处的位置,以及所述预设列数据确定预设列位置;
根据处理块大小和地址顺序从所述预设列位置开始读取水平方向上的图像数据。
7.根据权利要求6所述的一种图像处理方法,其特征在于,根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用垂直方向上的预设行数据,包括:
根据上一次所读取的图像数据在所述数据缓存模块中所处的位置,以及所述预设行数据确定预设行位置;
根据处理块大小和地址顺序从所述预设行位置开始读取垂直方向上的图像数据。
8.一种图像处理系统,其特征在于,包括:
分块处理模块,用于对图像数据进行分块,得到至少一个数据块;
取数宽度确定模块,用于根据用户设定的stride对齐方式确定取数宽度;
第一处理模块,用于当所述数据块的首地址非8字节对齐,根据所述取数宽度和所述首地址确定第一取数宽度,并根据所述第一取数宽度和所述首地址从所述数据块中取出首数据块,所述第一取数宽度小于所述取数宽度;
第二处理模块,用于从所述首数据块的末地址的下一地址开始,按照地址顺序根据所述取数宽度依次取出数据作为中间数据块,直到所述数据块的余下数据的宽度小于所述取数宽度,将所述数据块的余下数据取出作为末数据块;
图像数据写入模块,用于依次将所述首数据块、所述中间数据块和所述末数据块中的图像数据写入数据缓存模块;
图像数据获取模块,用于根据处理块大小和地址顺序从所述数据缓存模块中依次获取图像数据,并复用水平方向上的预设列数据。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7中任意一项所述的方法。
10.一种存储介质,所述存储介质为计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行如权利要求1至7中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210164392.XA CN114219700B (zh) | 2022-02-23 | 2022-02-23 | 一种图像处理方法、系统、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210164392.XA CN114219700B (zh) | 2022-02-23 | 2022-02-23 | 一种图像处理方法、系统、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114219700A CN114219700A (zh) | 2022-03-22 |
CN114219700B true CN114219700B (zh) | 2022-06-03 |
Family
ID=80709237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210164392.XA Active CN114219700B (zh) | 2022-02-23 | 2022-02-23 | 一种图像处理方法、系统、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114219700B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000172634A (ja) * | 1998-12-08 | 2000-06-23 | Nec Eng Ltd | データ転送制御装置,バッフア装置およびデータ転送制御方法 |
CN103617123A (zh) * | 2013-11-21 | 2014-03-05 | 珠海金山网络游戏科技有限公司 | 一种通过内存块实现内存管理的方法及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100424654C (zh) * | 2005-11-25 | 2008-10-08 | 杭州中天微系统有限公司 | 一种矩阵数据存取方法及其矩阵数据存储装置 |
CN103150703A (zh) * | 2012-11-15 | 2013-06-12 | 长沙景嘉微电子股份有限公司 | 一种应用于图像处理的帧存数据搬移模块的硬件实现 |
CN104035903B (zh) * | 2014-07-02 | 2017-06-16 | 东南大学 | 一种基于可重构技术的二维数据访问动态自适应方法 |
JP2017191145A (ja) * | 2016-04-11 | 2017-10-19 | キヤノン株式会社 | 画像処理装置、画像処理方法、およびプログラム |
US10733688B2 (en) * | 2017-09-26 | 2020-08-04 | Intel Corpoation | Area-efficient implementations of graphics instructions |
CN111159075B (zh) * | 2019-12-31 | 2021-11-05 | 成都海光微电子技术有限公司 | 数据传输方法和数据传输装置 |
CN112506567B (zh) * | 2020-11-27 | 2022-11-04 | 海光信息技术股份有限公司 | 数据读取方法和数据读取电路 |
CN113573072B (zh) * | 2021-09-22 | 2021-12-17 | 苏州浪潮智能科技有限公司 | 一种图像处理方法、装置及相关组件 |
-
2022
- 2022-02-23 CN CN202210164392.XA patent/CN114219700B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000172634A (ja) * | 1998-12-08 | 2000-06-23 | Nec Eng Ltd | データ転送制御装置,バッフア装置およびデータ転送制御方法 |
CN103617123A (zh) * | 2013-11-21 | 2014-03-05 | 珠海金山网络游戏科技有限公司 | 一种通过内存块实现内存管理的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114219700A (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107748723B (zh) | 支持无冲突跨步按块访问的存储方法及访存装置 | |
JPH06342403A (ja) | 予測キャッシングシステム | |
EP3166269B1 (en) | Queue management method and apparatus | |
US9942510B2 (en) | Method and device for processing input image data | |
CN106980579A (zh) | 一种图片加载方法及装置 | |
CN113015003B (zh) | 视频帧缓存方法和设备 | |
CN108377394A (zh) | 视频编码器的图像数据读取方法、计算机装置及计算机可读存储介质 | |
CN111984189B (zh) | 神经网络计算装置和数据读取、数据存储方法及相关设备 | |
CN110727520B (zh) | 一种优化Android帧动画的实现方法 | |
CN114219700B (zh) | 一种图像处理方法、系统、设备及介质 | |
US11016802B2 (en) | Techniques for ordering atomic operations | |
JP5569312B2 (ja) | メモリアクセス判定回路、メモリアクセス判定方法、キャッシュ制御装置および電子機器 | |
CN111538677A (zh) | 数据处理方法及装置 | |
CN116166185A (zh) | 缓存方法、图像传输方法、电子设备及存储介质 | |
CN107797757B (zh) | 影像处理系统中的快取存储器管理方法及装置 | |
US6801209B1 (en) | Method and apparatus for storing data in a block-based memory arrangement | |
US7573482B2 (en) | Method for reducing memory consumption when carrying out edge enhancement in multiple beam pixel apparatus | |
CN113766315A (zh) | 显示设备及视频信息处理方法 | |
CN114930306A (zh) | 带宽均衡方法和装置 | |
CN115049529A (zh) | 一种图像梯度确定方法、装置、设备及存储介质 | |
JP2010033507A (ja) | メモリコントローラおよび画像処理装置 | |
CN111435417A (zh) | 一种用于条形码扫描的图像解析方法、装置及存储介质 | |
JPH11328369A (ja) | キャッシュシステム | |
CN112784188A (zh) | 一种页面渲染方法及装置 | |
CN117011146B (zh) | 图像缩放方法及其装置、电子设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |