CN117422608A - 图像引导滤波方法及*** - Google Patents

图像引导滤波方法及*** Download PDF

Info

Publication number
CN117422608A
CN117422608A CN202311453632.9A CN202311453632A CN117422608A CN 117422608 A CN117422608 A CN 117422608A CN 202311453632 A CN202311453632 A CN 202311453632A CN 117422608 A CN117422608 A CN 117422608A
Authority
CN
China
Prior art keywords
image
sub
filtering
input sub
matrix
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.)
Pending
Application number
CN202311453632.9A
Other languages
English (en)
Inventor
王宇翔
周兵
熊大鹏
李涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Yizhu Intelligent Technology Co ltd
Original Assignee
Suzhou Yizhu Intelligent Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Yizhu Intelligent Technology Co ltd filed Critical Suzhou Yizhu Intelligent Technology Co ltd
Priority to CN202311453632.9A priority Critical patent/CN117422608A/zh
Publication of CN117422608A publication Critical patent/CN117422608A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/50Image enhancement or restoration using two or more images, e.g. averaging or subtraction

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)

Abstract

本申请公开一种图像引导滤波方法及***,包括:将输入图像和引导图像从主机内存读入GPU的全局内存中;在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,输入子图像和多个引导子图像一一对应;将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项;多个工作项依次并行调用第一内核函数和第二内核函数获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中,减少资源占用。

Description

图像引导滤波方法及***
技术领域
本发明涉及图像处理技术领域,更具体地,涉及一种图像引导滤波方法及***。
背景技术
图像滤波是图像处理的重要手段,具有重要的意义和研究价值。由于成像***、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。而图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
图像滤波方法可分为两种:一种是线性移不变滤波,其滤波核权值与输入图像的内容无关,代表为高斯滤波、均值滤波、拉普拉斯滤波等;另外一种是线性移变滤波,代表为引导滤波,在滤波过程中需要利用原有图像所包含的内容信息,称之为引导图信息,其中引导图和输入图相同或者不同。引导滤波在图像去噪、图像增强、图像匹配和去雾等领域得到了广泛的应用。虽然引导滤波算法简单有效,但需要计算复杂的矩阵和求解大型线性方程组,导致引导滤波算法耗费大量的运算时间和空间。
一般而言,图像引导滤波都以PC为架构,以CPU为运算核心的***上完成。虽然与其它滤波方式,在滤波图像效果和速度上都有大幅提高,但是由于CPU必须集中对引导滤波函数进行处理,特别是针对大分辨率图像时,处理效率慢,实时性差。
发明内容
鉴于上述问题,本发明的目的在于提供一种图像引导滤波方法及***,可以减少资源的占用,提高资源利用率。
根据本发明的第一方面,提供一种图像引导滤波方法,包括:将输入图像和引导图像从主机内存读入GPU的全局内存中,所述引导图像为预设的图像或所述输入图像本身;在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应;将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项;多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中;多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
优选地,多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵包括:根据滤波宽度获取每个输入子图像相应的邻域图像;每个工作项采用内存共享方式从全局内存中读取输入子图像及其邻域图像的数据;根据并行数据宽度以及滤波宽度对输入子图像及其邻域图像进行移位求和以获取输入子图像的均值滤波结果;将输入子图像替换成引导子图像,求取相应的引导子图像的均值滤波结果;根据输入子图像的均值滤波结果和引导子图像的均值滤波结果计算输入子图像与引导子图像的协方差矩阵和方差矩阵;根据输入子图像与引导子图像的协方差矩阵和引导子图像的方差矩阵计算输入子图像的缩放矩阵和偏移矩阵。
优选地,根据滤波宽度获取每个输入子图像相应的邻域图像包括:根据滤波半径对输入图像和引导图像分别进行补边处理;所述补边处理包括在输入图像的上下两侧补充R行像素点,在输入图像和引导图像的左右两侧补充R列像素点,其中,R为滤波半径,补充像素点的像素值以原始输入图像和原始引导图像的边界为对称轴折叠获取;从输入子图像的上下各取R行像素点以及左右各取R列像素点作为输入子图像相应的邻域图像。
优选地,根据并行数据宽度以及滤波宽度对输入子图像以及相应的邻域图像进行移位求和以获取输入子图像的均值滤波结果包括:构建第一内核函数,第一内核函数至少包括第一核函数和第二核函数,其中,第一核函数用于计算输入子图像以及相应的邻域图像中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像以及相应的邻域图像中每一列从第i1行至第i2行的像素和,j1=(m-1)*k+1-R,m=1,2,……,W/k,j2=j1+w-1,i1=-R,……,H+R;i2=i1+w-1,其中,k为并行数据宽度,w为滤波宽度,w=2R+1,R为滤波半径,M为工作项的编号;每个工作项通过循环调用第一核函数以完成对输入子图像的横向滤波,以及循环调用第二核函数以完成对输入子图像的纵向滤波,循环中采用共享内存保存中间数据。
优选地,对输入子图像进行横向滤波时,每一行从第一个像素点开始经过移位处理,获取w组向量值,每组向量值包括k个像素值,将w组向量进行求和并且求均值以得到横向滤波结果;对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度,依次类推,对横向滤波结果沿列方向进行求和并且求均值以得到纵向滤波结果作为均值滤波结果。
优选地,对输入子图像进行横向滤波时,每一行从第一个像素点开始经过移位处理,获取w组向量值,每组向量值包括k个像素值,将w组向量进行求和以得到横向滤波结果;对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度,依次类推,对横向滤波结果沿列方向进行求和纵向滤波结果;对纵向滤波结果求取均方值作为均值滤波结果。
优选地,每个工作项根据工作项号m从全局内存中获取数据,第m工作项对应的起始列为(m-1)*k+1,m=1,2,……,W/k,其中W为输入图像的宽度,k为并行数据宽度。
优选地,多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果包括:根据滤波宽度获取每个输入子图像的缩放矩阵相应的缩放邻域矩阵以及偏移矩阵相应的偏移邻域矩阵;每个工作项采用内存共享方式从共享内存中读取输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵;根据并行数据宽度以及滤波宽度对输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵进行移位求和以获取输入子图像的缩放矩阵的均值滤波结果和偏移矩阵的均值滤波结果。
优选地,根据并行数据宽度以及滤波宽度对输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵进行移位求和以获取输入子图像的缩放矩阵的均值滤波结果和偏移矩阵的均值滤波结果包括:构建第二内核函数,第一内核函数包括第一核函数、第二核函数、第三核函数和第四核函数,其中,第一核函数用于计算输入子图像的缩放矩阵及其相应的缩放邻域矩阵中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像的缩放矩阵及其相应的缩放邻域矩阵中每一列从第i1行至第i2行的像素和,第一核函数用于计算输入子图像的偏移矩阵及其相应的偏移邻域矩阵中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像的偏移矩阵及其相应的偏移邻域矩阵中每一列从第i1行至第i2行的像素和,j1=1,2,……,k;j2=j1+w-1,i1=1,2,……,k;i2=i1+w-1,其中,k为并行数据宽度,w为滤波宽度,w=2R+1,R为滤波半径;每个工作项通过循环调用第一核函数以完成对输入子图像的缩放矩阵的横向滤波,循环调用第二核函数以完成对输入子图像的缩放矩阵的纵向滤波,循环调用第三核函数以完成对输入子图像的偏移矩阵的横向滤波,循环调用第四核函数以完成对输入子图像的偏移矩阵的纵向滤波,循环中采用共享内存保存中间数据。
根据本发明的另一方面,提供一种图像引导滤波***,包括:图像获取模块,用于将输入图像和引导图像从主机内存读入GPU的全局内存中,所述引导图像为预设的图像或所述输入图像本身;图像划分模块,用于在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应;任务分配模块,用于将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项;滤波参数确定模块,用于控制多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中;输出图像确定模块,用于控制多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
本发明提供的图像引导滤波方法及***,将输入图像和引导图像分成多个子图像,并将多个子图像的引导滤波处理分配至多个工作项并行处理,提高计算效率,每个工作项负责相应子图像的引导滤波处理可以减少资源的占用,提高资源利用率。
进一步地,每个工作项采用内存共享方式从全局内存中获取数据,每个工作项根据工作项号获取相应子图像在全局内存中的寻址地址,并通过该寻址地址获取相应子图像的数据,可以减少数据的复制开销。
进一步地,每个工作项直接通过寻址方式获取数据实现补边,可以减少数据的存储。
进一步地,仅调用两次GPU内核函数实现图像引导滤波的处理,而且在每次核计算过程中,数据并行处理,可以计算效率;另外,在减少GPU内核函数的调用的同时充分使用全局内存和共享内存,从而减少CPU和GPU之间的数据传递,减少算法耗时。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示出本发明实施例提供的图像引导滤波方法所使用的硬件***的简要框图;
图2示出本发明实施例提供的图像引导滤波方法的流程示意图;
图3示出本发明实施例提供的图像引导滤波方法中步骤S240的流程示意图;
图4示出本发明实施例提供的补边后的输入图像的示意图;
图5示出本发明实施例提供的输入子图像的横向滤波和纵向滤波的示意图;
图6示出本发明实施例提供的图像引导滤波方法中步骤S250的流程示意图;
图7示出本发明实施例提供的图形引导滤波***的结构示意图;
图8示出本发明实施例提供的电子设备的结构示意图。
具体实施方式
以下将参照附图更详细地描述本发明的各种实施例。在各个附图中,相同的元件采用相同或类似的附图标记来表示。为了清楚起见,附图中的各个部分没有按比例绘制。
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1是用于说明OpenCL(开放计算语言)平台的图。OpenCL是可以体现的编程语言之一,因此不同形式的计算设备可以同时运行。因此,由OpenCL创建的程序可以同时在多个平台上运行。
参见图1,OpenCL平台100可以包括主机处理器110和至少一个计算设备120。
主机处理器110是在其上执行主机程序的处理器,并且可以定义用于执行内核的工作空间。在这里,工作空间也分为多个工作组,可以包括多个工作项。在这里,工作项对应于工作空间中的每个点,并成为最小工作单位。例如,主处理器110可以是通用CPU(中央处理单元),但不限于此。
计算设备120可以包括至少一个计算单元CU,每个计算单元CU可以包括至少一个处理单元PE,该计算单元CU为用于处理一个工作组(work group)的单元,处理单元PE为用于处理一个工作项(work item)的单元。例如,计算单元CU可以处理从主机处理器110接收的一个工作组,并且处理单元PE可以处理该工作组中包含的每个工作项。因此,包含在工作组中的多个工作项由处理单元PE并行处理。另一方面,计算设备120也是多核处理器,但是并不局限于此,只要是具有至少一个核的处理器即可。例如计算设备120可以是嵌入式GPU(图形处理单元)。
另一方面,OpenCL程序可以包括一个主机程序和至少一个内核(kernel)程序。主机程序由主机处理器110执行,并且主机处理器110通过命令方式将内核程序发送至计算设备120,计算设备120在处理单元上执行计算。在此,内核程序在计算设备120上执行,完成OpenCL应用的具体工作,计算设备120通过内核程序对输入数据进行相应的处理后输出到主机。
图2示出本发明实施例提供的图像引导滤波方法的流程示意图。如图2所示,所述图像引导滤波方法包括以下步骤。
在步骤S210中,将输入图像和引导图像从主机内存读入计算设备的全局内存中,所述引导图像为预设的图像或所述输入图像本身。
在本实施例中,引导滤波中包括输入图像和引导图像。引导图像可以是预设的,也可以是输入图像本身。
OpenCL编译器的内存模型包括全局内存、常量内存、本地内存和私有内存,这四种内存分别代表不同的内存区域,内存空间都与OpenCL Kernel源代码有关。在一个内核中,可能会有global(全局)、constant(常量)、local(本地)或private(私有)关键字,不同关键字用来指定变量使用特定的内存进行创建数据的存储空间。本实施例中内存模型包括全局内存和私有内存。
全局内存,对于执行内核中的所有工作项(work item)都是可见的。数据从主机处理器110和计算设备120的传输需要存储在全局内存中才能进行,对应存储在本申请中计算设备120的共享内存(share Memory)中。其中,工作项(work item)指一个循环中最里面的一次运算,称为一个工作项,访问相同处理资源的工作项组成一个工作组。
私有内存,只能由工作项自己进行访问。工作项从全局内存中获取的数据存储在私有内存中,对应存储在本申请中计算设备120的共享内存中。本实施例中对于Kernel源代码中使用private或_private关键字的变量对应存储在计算设备120的共享内存中。
在一个优选的实施例中,采用乒乓缓存的方式从主机内存读入到全局内存中。全局内存包括第一缓存区和第二缓存区,将当前帧的输入图像和引导图像读入第一缓存区中,然后工作项直接访问第一缓存区内的图像数据进行图像滤波处理;在进行图像滤波处理的同时,将下一帧的输入图像和引导图像读入第二缓存区中;当下一帧的输入图像和引导图像完全读入第二缓存区后,工作项直接访问第二缓存区内的图像数据进行图像滤波处理;在对第二缓存区内的图像数据进行图像滤波处理的同时,向第一缓存区内读入新的一帧的输入图像和引导图像。第一缓存区和第二缓存区交替进行数据传输和数据处理,数据传输和数据处理同时进行可以提高计算效率。
在步骤S220中,在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应。
在本实施例中,输入图像和引导图像的大小为W*H,其中,W为输入图像的宽度,H为输入图像的高度,根据并行数据宽度k将输入图像和引导图像划分为多个子输入图像和多个子引导图像,子输入图像和子引导图像的个数均为W/k。
本实施例中以并行数据宽度w=8为例进行说明,但并不局限于此。每个子图像的大小为8*H。
在步骤S230中,将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项。
在本实施例中,计算设备上最多有1024个工作项,工作项之间执行相互独立,每个工作组包含若干个工作项,每个工作项独立处理所在工作组对应的核函数,工作项完成核函数的操作。
本申请将每个输入子图像的引导滤波处理分配至相应的工作项,每个工作项处理一个输入子图像的引导滤波处理,整个输入图像分成多个输入子图像并行处理,大大减少了资源占用。
在步骤S240中,多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中。
在本实施例中,参见图3,步骤S240具体包括步骤S241至步骤S245。
在步骤S241中,根据滤波宽度获取每个输入子图像的邻域图像。
在本实施例中,为了使输出图像与输入图像的大小一致,需要根据滤波半径对输入图像进行补边处理。具体地,所述补边处理包括在输入图像的上下两侧补充R行像素点,在输入图像和引导图像的左右两侧补充R列像素点,其中,R为滤波半径,补充像素点的像素值以原始输入图像和原始引导图像的边界为对称轴折叠获取(参见图4)。从输入子图像的上下各取R行像素点以及左右各取R列像素点作为输入子图像相应的邻域图像。
图4中以W=640,H=720,并行数据宽度k=8、滤波半径R=5为例进行说明,但并不局限于此。根据并行数据宽度将输入图像划分成80个输入子图像,以输入子图像1为例,在输入子图像的四周分别选取5行或者5列像素点作为输入图像1的邻域图像。
在步骤S242中,每个工作项采用内存共享方式从全局内存中读取相应的输入子图像及其邻域图像。
在本实施例中,每个工作项均从全局内存中读取相应的输入子图像及其邻域图像。从全局内存中获取各个输入子图像及其邻域图像的数据时,每个工作项根据工作项号m从全局内存中获取数据,第m工作项对应的起始列为(m-1)*k+1,m=1,2,……,W/k,其中W为输入图像的宽度,k为并行数据宽度。具体地,第一工作项对应的第一输入子图像的起始列为Col1,其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(-R+1),结束列为Col(k+R)。第二工作项对应的第二输入子图像的起始列为Col(k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(k+1-R),结束列为Col(2k+R)。以此类推,第m个工作项对应的第m个输入子图像的起始列为Col((m-1)*k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col((m-1)*k+1-R),结束列为Col(mk+R)。
每个工作项根据工作项号m从全局内存中读取数据,即从全局内存中读取数据的起始地址为[-R+1,(m-1)*k+1-R],从第-R+1行开始,从第(m-1)*k+1-R列开始依次读取k个像素值,移位循环w次,得到w个向量组,每个向量组包括k个像素值;每行均按照上述方式读取从而读取该工作项对应的输入子图像及其邻域图像的数据。需要说明的是,全局内存中依然存储的是多个输入子图像,每个工作项从全局内存中读取数据时,当输入子图像的边界为原始输入图像的边界时,读取沿输入子图像边界对称的R行数据或R列数据实现补边处理。在进行横向滤波时,在原始输入图像的左右两侧进行补边;在进行纵向滤波时,在原始输入图像的上下两侧进行补边。
一个工作组包括256个工作项,每个工作项从全局内存中可读取的最大数据量为32*H,每次读取4个像素值或8个像素值或16个像素值。
例如,第一输入子图像在读取第一行数据时,从全局内存中依次读取Col_5、Col_4、Col_3、Col_2、Col_1、Col_1-Col_11的像素值作为一个向量组;再读取Col_3、Col_2、Col_1、Col_1-Col_13的像素值作为一个向量组;从而实现对输入子图像的补边处理。
在步骤S243中,根据并行数据宽度以及滤波宽度对输入子图像及其邻域图像进行移位求和以获取输入子图像的均值滤波结果avg_p。
在本实施例中,步骤S243具体包括:构建第一内核函数,第一内核函数至少包括第一核函数和第二核函数,其中,第一核函数用于计算输入子图像以及相应的邻域图像中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像以及相应的邻域图像中每一列从第i1行至第i2行的像素和,j1=(m-1)*k+1-R,m=1,2,……,W/k,j2=j1+w-1,i1=-R,……,H+R,i2=i1+w-1,其中,k为并行数据宽度,w为滤波宽度,w=2R+1,R为滤波半径;每个工作项通过循环调用第一核函数以完成对输入子图像的横向滤波,以及循环调用第二核函数以完成对输入子图像的纵向滤波,循环中采用共享内存保存中间数据。
具体地,也就是每个输入子图像及其邻域图像包括(k+w-1)*(H+w-1)个像素点,每一行在取数据时,从输入子图像及其邻域图像中的第1列开始取k个像素值,然后向后移位从第2列开始取k个像素值,依次移位从w列开始取k个像素值,形成w个向量组,然后对w个向量组求和取平均值以得到每一行的横向滤波结果;然后对每一行的横向滤波结果沿列方向循环移位依次对w行求和取平均值以得到每一列的纵向滤波结果。
对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度;依次类推,对横向均值滤波结果沿列方向进行求和并且求均值以得到纵向均值滤波结果。
在一个优选的实施例中,每个输入子图像及其邻域图像包括(k+w-1)*(H+w-1)个像素点,每一行在取数据时,从输入子图像及其邻域图像中的第1列开始取k个像素值,然后向后移位从第2列开始取k个像素值,依次移位从w列开始取k个像素值,形成w个向量组,然后对w个向量组求和以得到每一行的横向求和结果;然后对每一行的横向求和结果沿列方向循环移位依次对w行求和以得到每一列的纵向求和结果;最后将每一列的纵向求和结果除以R2以得到最终的均值滤波结果。先在行方向和列方向上进行移位求和最后再求取均值,可以减少计算过程中的误差,降低图片的噪声。还可以将求和结果除以R2的操作转换成乘法运算以提高计算效率。
在本实施例中,初始sum为当前sum的值为上一sum的值加上当前sum的最后一行与上一sum的第一行的差值,当前sum的值采用上一sum的值进行差值计算,可以减少计算量。
参见图5,以第一个输入子图像及其邻域图像为例进行说明,其中,k=8,R=5,w=11,每一行有18个像素值,而由于从全局内存里读取数据一次性读取16个像素值,要将18个像素值从全局数据中读取出来,可以分两次读取16个像素值,即读取Col_5、Col_4、Col_3、Col_2、Col_1、Col_1-Col_11的像素值作为一个向量,然后读取Col_3、Col_2、Col_1、Col_1-Col_13的像素值作为一个向量;然后从这两个向量中分别读取相应的8个像素值作为一个向量,即从这两个向量中依次移位读取8个像素值,得到11个向量,然后将11个向量求和得到s1-s8,并对s1-s8求取平均值(即s1-s8均除以11)作为相应行的横向滤波结果;依次类推,对每一行进行横向滤波得到输入子图像的横向滤波结果。然后对横向滤波结果沿列方向进行纵向循环移位求和取平均值得到输入子图像的纵向滤波结果。在纵向滤波过程中设置中间变量sum,初始sum为每一列从第一个像素点开始的前11个像素点的和,向下移位计算第2行至第12行的sum值时,可利用前11行的sum值加上第12行与第1行的差值得到,从而减少计算量。
在步骤S244中,将输入子图像替换成引导子图像,重复以上步骤一求取相应的引导子图像的均值滤波结果。
在步骤S245中,根据输入子图像的均值滤波结果和引导子图像的均值滤波结果计算输入子图像的协方差矩阵和方差矩阵。
在步骤S246中,根据输入子图像的协方差矩阵和方差矩阵计算输入子图像的缩放矩阵和偏移矩阵,以及将多个输入子图像的均值滤波结果、缩放矩阵和偏移矩阵采用合并存储的方式存放在共享内存中。
在本实施例中,缩放矩阵根据输入子图像的协方差矩阵cov和方差矩阵var得到,公式为:a=cov/(var+c),其中,c为调节参数,可以根据输出子图像的效果调节。偏移矩阵根据输入子图像的均值滤波结果和偏移矩阵得到,公式为b=avg_p*(1-a)。
在步骤S250中,多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
在本实施例中,参见图6,步骤S250具体包括步骤S251至步骤S253。
在步骤S251中,根据滤波宽度获取每个输入子图像的缩放矩阵相应的缩放邻域矩阵以及偏移矩阵相应的偏移邻域矩阵。
在本实施例中,对输入图像的缩放矩阵和偏移矩阵进行补边处理,输入图像的缩放矩阵和偏移矩阵按照并行数据宽度进行划分成多个输入子图像的缩放矩阵和偏移矩阵;然后输入图像的缩放矩阵和偏移矩阵对缩放矩阵和偏移矩阵进行补边处理,根据滤波宽度获取每个输入子图像的缩放矩阵相应的缩放邻域矩阵以及偏移矩阵相应的偏移邻域矩阵。具体步骤与步骤S242中的相同,在此不再赘述。
在步骤S252中,每个工作项采用内存共享方式从共享内存中读取输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵。
在本实施例中,从共享内存中获取各个输入子图像的缩放矩阵及其邻域图像的数据时,每个工作项根据工作项号m从共享内存中获取数据,第m工作项对应的起始列为(m-1)*k+1,m=1,2,……,W/k,其中W为输入图像的宽度,k为并行数据宽度。具体地,第一工作项对应的第一输入子图像的缩放矩阵的起始列为Col1,其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(-R+1),结束列为Col(k+R)。第二工作项对应的第二输入子图像的缩放矩阵的起始列为Col(k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(k+1-R),结束列为Col(2k+R)。以此类推,第m个工作项对应的第m个输入子图像的缩放矩阵的起始列为Col((m-1)*k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col((m-1)*k+1-R),结束列为Col(mk+R)。
每个工作项根据工作项号m从共享内存中读取数据,即从共享内存中读取数据的起始地址为[-R+1,(m-1)*k+1-R],从第-R+1行开始,从第(m-1)*k+1-R列开始依次读取k个像素值,移位循环w次,得到w个向量组,每个向量组包括k个像素值;每行均按照上述方式读取从而读取该工作项对应的输入子图像的缩放矩阵及其邻域图像的数据。
获取输入子图像的偏移矩阵及其邻域图像的数据与获取输入子图像的缩放矩阵及其邻域图像的数据的方法相同,在此不再赘述。
在步骤S253中,根据并行数据宽度以及滤波宽度对输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵进行移位求和以获取输入子图像的缩放矩阵的均值滤波结果和偏移矩阵的均值滤波结果。
在本实施例中,缩放矩阵和偏移矩阵的均值滤波方法与上述输入子图像的均值滤波方法相同,在此不再赘述。
上述实施例的图像滤波方法,在800Mkz的频率下,该方法包括数据的输入输出搬运过程,速度达到50fps。该方法移植之后,提升性能同时,也为嵌入式CPU芯片节省资源,可以做更多业务上处理,为产品化方案提供有效支撑。
本发明提供的图像引导滤波方法,将输入图像和引导图像分成多个子图像,并将多个子图像的引导滤波处理分配至多个工作项并行处理,提高计算效率,每个工作项负责相应子图像的引导滤波处理可以减少资源的占用,提高资源利用率。
进一步地,每个工作项采用内存共享方式从全局内存中获取数据,每个工作项根据工作项号获取相应子图像在全局内存中的寻址地址,并通过该寻址地址获取相应子图像的数据,可以减少数据的复制开销。
进一步地,每个工作项直接通过寻址方式获取数据实现补边,可以减少数据的存储。
进一步地,仅调用两次GPU内核函数实现图像引导滤波的处理,而且在每次核计算过程中,数据并行处理,可以计算效率;另外,在减少GPU内核函数的调用的同时充分使用全局内存和共享内存,从而减少CPU和GPU之间的数据传递,减少算法耗时。
图7示出本发明实施例提供的图像引导滤波***的结构示意图。如图7所示,所述图像引导滤波结构包括图像获取模块710、图像划分模块720、任务分配模块730、滤波参数确定模块740和输出图像确定模块750。
其中,图像获取模块710用于将输入图像和引导图像从主机内存读入GPU的全局内存中,所述引导图像为预设的图像或所述输入图像本身。
在本实施例中,引导滤波中包括输入图像和引导图像。引导图像可以是预设的,也可以是输入图像本身。
OpenCL编译器的内存模型包括全局内存、常量内存、本地内存和私有内存,这四种内存分别代表不同的内存区域,内存空间都与OpenCL Kernel源代码有关。在一个内核中,可能会有global(全局)、constant(常量)、local(本地)或private(私有)关键字,不同关键字用来指定变量使用特定的内存进行创建数据的存储空间。本实施例中内存模型包括全局内存和私有内存。
全局内存,对于执行内核中的所有工作项(work item)都是可见的。数据从主机处理器110和计算设备120的传输需要存储在全局内存中才能进行,对应存储在本申请中计算设备120的共享内存(share Memory)中。其中,工作项(work item)指一个循环中最里面的一次运算,称为一个工作项,访问相同处理资源的工作项组成一个工作组。
私有内存,只能由工作项自己进行访问。工作项从全局内存中获取的数据存储在私有内存中,对应存储在本申请中计算设备120的共享内存中。本实施例中对于Kernel源代码中使用private或_private关键字的变量对应存储在计算设备120的共享内存中。
在一个优选的实施例中,采用乒乓缓存的方式从主机内存读入到全局内存中。全局内存包括第一缓存区和第二缓存区,将当前帧的输入图像和引导图像读入第一缓存区中,然后工作项直接访问第一缓存区内的图像数据进行图像滤波处理;在进行图像滤波处理的同时,将下一帧的输入图像和引导图像读入第二缓存区中;当下一帧的输入图像和引导图像完全读入第二缓存区后,工作项直接访问第二缓存区内的图像数据进行图像滤波处理;在对第二缓存区内的图像数据进行图像滤波处理的同时,向第一缓存区内读入新的一帧的输入图像和引导图像。第一缓存区和第二缓存区交替进行数据传输和数据处理,数据传输和数据处理同时进行可以提高计算效率。
图像划分模块720用于在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应。
在本实施例中,输入图像和引导图像的大小为W*H,其中,W为输入图像的宽度,H为输入图像的高度,根据并行数据宽度k将输入图像和引导图像划分为多个子输入图像和多个子引导图像,子输入图像和子引导图像的个数均为W/k。
本实施例中以并行数据宽度w=8为例进行说明,但并不局限于此。每个子图像的大小为8*H。
任务分配模块730用于将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项。
在本实施例中,计算设备上最多有1024个工作项,工作项之间执行相互独立,每个工作组包含若干个工作项,每个工作项独立处理所在工作组对应的核函数,工作项完成核函数的操作。
本申请将每个输入子图像的引导滤波处理分配至相应的工作项,每个工作项处理一个输入子图像的引导滤波处理,整个输入图像分成多个输入子图像并行处理,大大减少了资源占用。
滤波参数确定模块740用于控制多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中。
在本实施例中,滤波参数确定模块740根据滤波宽度获取每个输入子图像的邻域图像;控制每个工作项采用内存共享方式从全局内存中读取相应的输入子图像及其邻域图像;根据并行数据宽度以及滤波宽度对输入子图像及其邻域图像进行移位求和以获取输入子图像的均值滤波结果avg_p;将输入子图像替换成引导子图像,重复以上步骤一求取相应的引导子图像的均值滤波结果;根据输入子图像的均值滤波结果和引导子图像的均值滤波结果计算输入子图像的协方差矩阵和方差矩阵;根据输入子图像的协方差矩阵和方差矩阵计算输入子图像的缩放矩阵和偏移矩阵。
在本实施例中,为了使输出图像与输入图像的大小一致,需要根据滤波半径对输入图像进行补边处理。具体地,所述补边处理包括在输入图像的上下两侧补充R行像素点,在输入图像和引导图像的左右两侧补充R列像素点,其中,R为滤波半径,补充像素点的像素值以原始输入图像和原始引导图像的边界为对称轴折叠获取(参见图4)。从输入子图像的上下各取R行像素点以及左右各取R列像素点作为输入子图像相应的邻域图像。
图4中以W=640,H=720,并行数据宽度k=8、滤波半径R=5为例进行说明,但并不局限于此。根据并行数据宽度将输入图像划分成80个输入子图像,以输入子图像1为例,在输入子图像的四周分别选取5行或者5列像素点作为输入图像1的邻域图像。
每个工作项均从全局内存中读取相应的输入子图像及其邻域图像。从全局内存中获取各个输入子图像及其邻域图像的数据时,每个工作项根据工作项号m从全局内存中获取数据,第m工作项对应的起始列为(m-1)*k+1,m=1,2,……,W/k,其中W为输入图像的宽度,k为并行数据宽度。具体地,第一工作项对应的第一输入子图像的起始列为Col1,其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(-R+1),结束列为Col(k+R)。第二工作项对应的第二输入子图像的起始列为Col(k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col(k+1-R),结束列为Col(2k+R)。以此类推,第m个工作项对应的第m个输入子图像的起始列为Col((m-1)*k+1),其邻域图像的起始行为Row(-R+1),结束行为Row(H+R),起始列为Col((m-1)*k+1-R),结束列为Col(mk+R)。
每个工作项根据工作项号m从全局内存中读取数据,即从全局内存中读取数据的起始地址为[-R+1,(m-1)*k+1-R],从第-R+1行开始,从第(m-1)*k+1-R列开始依次读取k个像素值,移位循环w次,得到w个向量组,每个向量组包括k个像素值;每行均按照上述方式读取从而读取该工作项对应的输入子图像及其邻域图像的数据。需要说明的是,全局内存中依然存储的是多个输入子图像,每个工作项从全局内存中读取数据时,当输入子图像的边界为原始输入图像的边界时,读取沿输入子图像边界对称的R行数据或R列数据实现补边处理。在进行横向滤波时,在原始输入图像的左右两侧进行补边;在进行纵向滤波时,在原始输入图像的上下两侧进行补边。
一个工作组包括256个工作项,每个工作项从全局内存中可读取的最大数据量为32*H,每次读取4个像素值或8个像素值或16个像素值。
例如,第一输入子图像在读取第一行数据时,从全局内存中依次读取Col_5、Col_4、Col_3、Col_2、Col_1、Col_1-Col_11的像素值作为一个向量组;再读取Col_3、Col_2、Col_1、Col_1-Col_13的像素值作为一个向量组;从而实现对输入子图像的补边处理。
具体地,也就是每个输入子图像及其邻域图像包括(k+w-1)*(H+w-1)个像素点,每一行在取数据时,从输入子图像及其邻域图像中的第1列开始取k个像素值,然后向后移位从第2列开始取k个像素值,依次移位从w列开始取k个像素值,形成w个向量组,然后对w个向量组求和取平均值以得到每一行的横向滤波结果;然后对每一行的横向滤波结果沿列方向循环移位依次对w行求和取平均值以得到每一列的纵向滤波结果作为均值滤波结果。
对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度;依次类推,对横向滤波结果沿列方向进行求和并且求均值以得到纵向滤波结果。
在一个优选的实施例中,每个输入子图像及其邻域图像包括(k+w-1)*(H+w-1)个像素点,每一行在取数据时,从输入子图像及其邻域图像中的第1列开始取k个像素值,然后向后移位从第2列开始取k个像素值,依次移位从w列开始取k个像素值,形成w个向量组,然后对w个向量组求和以得到每一行的横向滤波结果;然后对每一行的横向滤波结果沿列方向循环移位依次对w行求和以得到每一列的纵向滤波结果;对每一列的纵向滤波结果求取均方值作为均值滤波结果,其中,具体地,将每一列的纵向滤波结果除以滤波半径的平方(R2)以得到最终的均值滤波结果。先在行方向和列方向上进行移位求和最后再求取均方值,可以减少计算过程中的误差,降低图片的噪声。进一步地,还可以将纵向滤波结果与滤波半径的平方R2的除法运算转换成乘法运算以提高计算效率。
在本实施例中,初始sum为当前sum的值为上一sum的值加上当前sum的最后一行与上一sum的第一行的差值,当前sum的值采用上一sum的值进行差值计算,可以减少计算量。
参见图5,以第一个输入子图像及其邻域图像为例进行说明,其中,k=8,R=5,w=11,每一行有18个像素值,而由于从全局内存里读取数据一次性读取16个像素值,要将18个像素值从全局数据中读取出来,可以分两次读取16个像素值,即读取Col_5、Col_4、Col_3、Col_2、Col_1、Col_1-Col_11的像素值作为一个向量,然后读取Col_3、Col_2、Col_1、Col_1-Col_13的像素值作为一个向量;然后从这两个向量中分别读取相应的8个像素值作为一个向量,即从这两个向量中依次移位读取8个像素值,得到11个向量,然后将11个向量求和得到s1-s8,并对s1-s8求取平均值(即s1-s8均除以11)作为相应行的横向滤波结果;依次类推,对每一行进行横向滤波得到输入子图像的横向滤波结果。然后对横向滤波结果沿列方向进行纵向循环移位求和取平均值得到输入子图像的纵向滤波结果。在纵向滤波过程中设置中间变量sum,初始sum为每一列从第一个像素点开始的前11个像素点的和,向下移位计算第2行至第12行的sum值时,可利用前11行的sum值加上第12行与第1行的差值得到,从而减少计算量。
输出图像确定模块750用于控制多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
本发明提供的图像引导滤波***,将输入图像和引导图像分成多个子图像,并将多个子图像的引导滤波处理分配至多个工作项并行处理,提高计算效率,每个工作项负责相应子图像的引导滤波处理可以减少资源的占用,提高资源利用率。
进一步地,每个工作项采用内存共享方式从全局内存中获取数据,每个工作项根据工作项号获取相应子图像在全局内存中的寻址地址,并通过该寻址地址获取相应子图像的数据,可以减少数据的复制开销。
进一步地,每个工作项直接通过寻址方式获取数据实现补边,可以减少数据的存储。
进一步地,仅调用两次GPU内核函数实现图像引导滤波的处理,而且在每次核计算过程中,数据并行处理,可以计算效率;另外,在减少GPU内核函数的调用的同时充分使用全局内存和共享内存,从而减少CPU和GPU之间的数据传递,减少算法耗时。
图8示出本发明实施例提供的电子设备的结构示意图。如图8所示,该实施例的电子设备100包括:至少一个处理器101(图8中仅示出一个)处理器、存储器102以及存储在所述存储器102中并可在所述至少一个处理器101上运行的计算机程序103,所述处理器101执行所述计算机程序103时实现上述神经网络模型压缩方法的步骤。
所述电子设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,图8仅仅是电子设备100的举例,并不构成对电子设备100的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器101可以是中央处理单元(Central Processing Unit,CPU),该处理器101还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器102在一些实施例中可以是所述电子设备100的内部存储单元,例如电子设备100的硬盘或内存。所述存储器102在另一些实施例中也可以是所述电子设备100的外部存储设备,例如所述电子设备100上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器102还可以既包括所述电子设备100的内部存储单元也包括外部存储设备。所述存储器102用于存储操作***、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器102还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行时实现可实现上述各个方法实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到装置/电子设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/电子设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/电子设备实施例仅仅是示意性的,例如,所述模块或单元的分块,仅仅为一种逻辑功能分块,实际实现时可以有另外的分块方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
依照本发明的实施例如上文所述,这些实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施例。显然,根据以上描述,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地利用本发明以及在本发明基础上的修改使用。本发明仅受权利要求书及其全部范围和等效物的限制。

Claims (12)

1.一种图像引导滤波方法,其特征在于,包括:
将输入图像和引导图像从主机内存读入GPU的全局内存中,所述引导图像为预设的图像或所述输入图像本身;
在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应;
将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项;
多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中;
多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
2.根据权利要求1所述的图像引导滤波方法,其特征在于,多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵包括:
根据滤波宽度获取每个输入子图像相应的邻域图像;
每个工作项采用内存共享方式从全局内存中读取输入子图像及其邻域图像的数据;
根据并行数据宽度以及滤波宽度对输入子图像及其邻域图像进行移位求和以获取输入子图像的均值滤波结果;
将输入子图像替换成引导子图像,求取相应的引导子图像的均值滤波结果;
根据输入子图像的均值滤波结果和引导子图像的均值滤波结果计算输入子图像与引导子图像的协方差矩阵和方差矩阵;
根据输入子图像与引导子图像的协方差矩阵和引导子图像的方差矩阵计算输入子图像的缩放矩阵和偏移矩阵。
3.根据权利要求2所述的图像引导滤波方法,其特征在于,根据滤波宽度获取每个输入子图像相应的邻域图像包括:
根据滤波半径对输入图像和引导图像分别进行补边处理;所述补边处理包括在输入图像的上下两侧补充R行像素点,在输入图像和引导图像的左右两侧补充R列像素点,其中,R为滤波半径,补充像素点的像素值以原始输入图像和原始引导图像的边界为对称轴折叠获取;
从输入子图像的上下各取R行像素点以及左右各取R列像素点作为输入子图像相应的邻域图像。
4.根据权利要求3所述的图像引导滤波方法,其特征在于,根据并行数据宽度以及滤波宽度对输入子图像以及相应的邻域图像进行移位求和以获取输入子图像的均值滤波结果包括:
构建第一内核函数,第一内核函数至少包括第一核函数和第二核函数,其中,第一核函数用于计算输入子图像以及相应的邻域图像中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像以及相应的邻域图像中每一列从第i1行至第i2行的像素和,j1=(m-1)*k+1-R,m=1,2,……,W/k,j2=j1+w-1,i1=-R,……,H+R;i2=i1+w-1,其中,k为并行数据宽度,w为滤波宽度,w=2R+1,R为滤波半径,M为工作项的编号;
每个工作项通过循环调用第一核函数以完成对输入子图像的横向滤波,以及循环调用第二核函数以完成对输入子图像的纵向滤波,循环中采用共享内存保存中间数据。
5.根据权利要求4所述的图像引导滤波方法,其特征在于,对输入子图像进行横向滤波时,每一行从第一个像素点开始经过移位处理,获取w组向量值,每组向量值包括k个像素值,将w组向量进行求和并且求均值以得到横向滤波结果;对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度,依次类推,对横向滤波结果沿列方向进行求和并且求均值以得到纵向滤波结果作为均值滤波结果。
6.根据权利要求4所述的图像引导滤波方法,其特征在于,对输入子图像进行横向滤波时,每一行从第一个像素点开始经过移位处理,获取w组向量值,每组向量值包括k个像素值,将w组向量进行求和以得到横向滤波结果;对输入子图像进行纵向滤波时,设置一个中间存储变量sum,设初始sum为每一列从第一个像素点开始的前w个像素点的和,然后每次递增取第w+1个像素值和第一个像素值的差值,其中,w为滤波宽度,依次类推,对横向滤波结果沿列方向进行求和纵向滤波结果;对纵向滤波结果求取均方值作为均值滤波结果。
7.根据权利要求3所述的图像引导滤波方法,其特征在于,每个工作项根据工作项号m从全局内存中获取数据,第m工作项对应的起始列为(m-1)*k+1,m=1,2,……,W/k,其中W为输入图像的宽度,k为并行数据宽度。
8.根据权利要求3所述的图像引导滤波方法,其特征在于,多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果包括:
根据滤波宽度获取每个输入子图像的缩放矩阵相应的缩放邻域矩阵以及偏移矩阵相应的偏移邻域矩阵;
每个工作项采用内存共享方式从共享内存中读取输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵;
根据并行数据宽度以及滤波宽度对输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵进行移位求和以获取输入子图像的缩放矩阵的均值滤波结果和偏移矩阵的均值滤波结果。
9.根据权利要求8所述的图像引导滤波方法,其特征在于,根据并行数据宽度以及滤波宽度对输入子图像的缩放矩阵及其相应的缩放邻域矩阵和偏移矩阵及其相应的偏移邻域矩阵进行移位求和以获取输入子图像的缩放矩阵的均值滤波结果和偏移矩阵的均值滤波结果包括:
构建第二内核函数,第一内核函数包括第一核函数、第二核函数、第三核函数和第四核函数,其中,第一核函数用于计算输入子图像的缩放矩阵及其相应的缩放邻域矩阵中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像的缩放矩阵及其相应的缩放邻域矩阵中每一列从第i1行至第i2行的像素和,第一核函数用于计算输入子图像的偏移矩阵及其相应的偏移邻域矩阵中每一行从第j1列至第j2列的像素和,第二核函数用于计算输入子图像的偏移矩阵及其相应的偏移邻域矩阵中每一列从第i1行至第i2行的像素和,j1=1,2,……,k;j2=j1+w-1,i1=1,2,……,k;i2=i1+w-1,其中,k为并行数据宽度,w为滤波宽度,w=2R+1,R为滤波半径;
每个工作项通过循环调用第一核函数以完成对输入子图像的缩放矩阵的横向滤波,循环调用第二核函数以完成对输入子图像的缩放矩阵的纵向滤波,循环调用第三核函数以完成对输入子图像的偏移矩阵的横向滤波,循环调用第四核函数以完成对输入子图像的偏移矩阵的纵向滤波,循环中采用共享内存保存中间数据。
10.一种图像引导滤波***,其特征在于,包括:
图像获取模块,用于将输入图像和引导图像从主机内存读入GPU的全局内存中,所述引导图像为预设的图像或所述输入图像本身;
图像划分模块,用于在全局内存中,根据并行数据宽度将输入图像和引导图像划分成多个输入子图像和多个引导子图像,所述输入子图像和多个引导子图像一一对应;
任务分配模块,用于将每个输入子图像的引导滤波处理分别分配至GPU的多个工作项,每个输入子图像和相应的引导子图像进行引导滤波处理的过程对应一个工作项;
滤波参数确定模块,用于控制多个工作项并行调用第一内核函数以分别获取输入子图像的缩放矩阵和偏移矩阵,并将多个输入子图像的缩放矩阵和偏移矩阵合并保存至共享内存中;
输出图像确定模块,用于控制多个工作项并行调用第二内核函数以获取多个输入子图像的缩放矩阵和偏移矩阵的均值滤波结果,以及根据多个输入子图像以及相应缩放矩阵和偏移矩阵的均值滤波结果计算相应的输出子图像,并将多个输出子图像合并保存至全局内存中。
11.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-9中任一项所述的神经网络模型压缩方法。
12.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-9中任一项所述的神经网络模型压缩方法。
CN202311453632.9A 2023-11-03 2023-11-03 图像引导滤波方法及*** Pending CN117422608A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311453632.9A CN117422608A (zh) 2023-11-03 2023-11-03 图像引导滤波方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311453632.9A CN117422608A (zh) 2023-11-03 2023-11-03 图像引导滤波方法及***

Publications (1)

Publication Number Publication Date
CN117422608A true CN117422608A (zh) 2024-01-19

Family

ID=89528153

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311453632.9A Pending CN117422608A (zh) 2023-11-03 2023-11-03 图像引导滤波方法及***

Country Status (1)

Country Link
CN (1) CN117422608A (zh)

Similar Documents

Publication Publication Date Title
CN110046702B (zh) 神经网络计算加速器及其执行的方法
US10394929B2 (en) Adaptive execution engine for convolution computing systems
KR20210036715A (ko) 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법
US20220083857A1 (en) Convolutional neural network operation method and device
CN112991142B (zh) 图像数据的矩阵运算方法、装置、设备及存储介质
KR102470027B1 (ko) 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체
CN112633470B (zh) 优化神经网络卷积残差结构的方法、***、设备及介质
CN115509764B (zh) 一种实时渲染的多gpu并行调度方法、装置及存储器
WO2021088569A1 (en) Convolution method and device, electronic device
US20220113944A1 (en) Arithmetic processing device
JP7278150B2 (ja) 画像処理装置、撮像装置、画像処理方法
JP6906622B2 (ja) 演算回路および演算方法
CN117422608A (zh) 图像引导滤波方法及***
CN112967331B (zh) 一种图像处理的方法、电子设备及存储介质
KR101204866B1 (ko) 윈도우 기반 영상 처리에서 고속으로 윈도우 영역 내 화소 연산을 수행하기 위한 방법 및 장치
JPH0756673B2 (ja) 分割空間フイルタによる画像処理方法
US8503793B2 (en) Correlation processing apparatus and medium readable by correlation processing apparatus
CN117971501B (zh) 一种数据访问方法、设备、存储介质及程序产品
US11132569B2 (en) Hardware accelerator for integral image computation
Wu et al. Parallel integral image generation algorithm on multi-core system
CN117437114A (zh) 图像数据处理方法、装置、电子设备及介质
Dang et al. A fast integral image generation algorithm on GPUs
CN115205513A (zh) 图像预处理方法和装置、图像处理方法、电子设备及介质
CN112418417A (zh) 基于simd技术的卷积神经网络加速装置及方法
CN114549278A (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