CN105787910B - 一种人脸区域滤波方法基于异构平台的计算优化方法 - Google Patents

一种人脸区域滤波方法基于异构平台的计算优化方法 Download PDF

Info

Publication number
CN105787910B
CN105787910B CN201510989202.8A CN201510989202A CN105787910B CN 105787910 B CN105787910 B CN 105787910B CN 201510989202 A CN201510989202 A CN 201510989202A CN 105787910 B CN105787910 B CN 105787910B
Authority
CN
China
Prior art keywords
pixel
register
weight
instruction
platform
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
Application number
CN201510989202.8A
Other languages
English (en)
Other versions
CN105787910A (zh
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.)
Wuhan Hongruida Information Technology Co Ltd
Original Assignee
Wuhan Hongruida Information 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 Wuhan Hongruida Information Technology Co Ltd filed Critical Wuhan Hongruida Information Technology Co Ltd
Priority to CN201510989202.8A priority Critical patent/CN105787910B/zh
Publication of CN105787910A publication Critical patent/CN105787910A/zh
Application granted granted Critical
Publication of CN105787910B publication Critical patent/CN105787910B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/10Image enhancement or restoration using non-spatial domain filtering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10016Video; Image sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20024Filtering details
    • G06T2207/20028Bilateral filtering

Landscapes

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

Abstract

本发明公开了一种人脸区域滤波方法基于异构平台的计算优化方法,包括人脸区域滤波方法在X86架构平台和ARM架构平台的计算优化。本发明在X86架构平台中:在单核处理器上,启用单线程,在多核处理器上,启用多线程;在每个线程里,采用SSE内嵌指令集,一次并行处理相邻8个像素点。在ARM架构平台中:在单核处理器上,启用单线程,在多核处理器上,启用多线程;在每个线程里,采用NEON内嵌指令集,一次并行处理相邻8个像素点。本发明根据人脸区域滤波方法的可并行特性,利用X86架构平台的SSE内嵌指令集和ARM架构平台的NEON内嵌指令集和处理器的多核性;有效提升了算法的执行速度,保证了运行的实时性。

Description

一种人脸区域滤波方法基于异构平台的计算优化方法
技术领域
本发明涉及视频成像技术领域,尤其涉及一种人脸区域滤波方法基于异构平台的计算优化方法。
背景技术
为了解决在线娱乐平台主播拍摄的视频画面平淡、清晰展现人脸部的斑点、皱纹等不受欢迎因素的问题,申请人发明了一种应用于互联网视频直播的视频美化方法,可有效提升视频画面的美感,尤其是视频中的人脸。
视频美化算法应用于PC机和移动设备如智能手机,利用硬件以空间上并行的方法可大大提升算法的运行速度。目前的视频美化算法在人脸区域滤波过程中是对每个像素点都做处理,逐点处理,计算量大,运行的实时性很差。同时,现有的处理方法在PC机和移动设备上的处理过程相同,但是,目前很多移动设备如智能手机大多都采用了ARM架构的处理器,PC机大多采用的是X86架构的处理器,ARM的指令集与X86的指令集是完全不同的;采用现有处理方法降低了运算效率。
发明内容
针对上述问题中存在的不足之处,本发明提供一种人脸区域滤波方法基于异构平台的计算优化方法。
为实现上述目的,本发明提供了一种人脸区域滤波方法基于异构平台的计算优化方法,包括:
根据异构平台的架构平台类型的处理器核数,启用线程处理的数目,每个线程处理人脸区域中的一部分像素点;选用架构平台类型上的内嵌指令集为像素点的滤波提供指令,所述异构平台的架构平台类型包括X86架构平台或ARM架构平台;
通过内嵌指令集中的指令对人脸区域内的像素点进行行方向的滤波;
通过内嵌指令集中的指令对滤波后的像素点再进行列方向的滤波。作为本发明的进一步改进,所述人脸区域滤波方法为:
对人脸区域中的像素点滤波,采用保边缘的双边滤波的一个变形,公式如下:
其中:r是半径,p0是中心像素,pi是p0的相邻像素,T是阈值,m表示权重,i表示行,j表示列,mij是i行j列的权重,pij是i行j列的像素点,p表示像素点的值;
半径r为指定模糊取样区域的大小;阈值T为控制相邻像素值与中心像素值相差多大时,才能成为模糊的一部分;像素值之差大于阈值的像素将被排除在模糊之外。
作为本发明的进一步改进,在X86架构平台上,所述行方向的滤波方法为:
步骤一、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤二、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;
步骤三、第一行上,用_mm_loadl_epi64指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用_mm_loadl_epi64指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤四、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值;
步骤五、用_mm_abs_epi16指令计算所述差值的绝对值,并得出所述差值对应的权重;
步骤六、用_mm_mullo_epi16计算权重和像素值的积;
步骤七、用_mm_adds_pi16指令把权重以及权重与像素值的积分别进行累加;
步骤八、右移一个像素,用_mm_loadl_epi64指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤四~步骤七;
步骤九、重复步骤八直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤十、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一行的滤波结果;
步骤十一、重复步骤三~步骤十,直至得到d行中每一行的滤波结果。
作为本发明的进一步改进,所述步骤三与步骤四之间还包括步骤十二;
步骤十二、用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位。
作为本发明的进一步改进,在X86架构平台上,所述列方向的滤波方法为:
步骤1、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤2、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;
步骤3、第一列上,用_mm_loadl_epi64指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用_mm_loadl_epi64指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤4、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值;
步骤5、用_mm_abs_epi16指令计算所述差值的绝对值,并得出所述差值对应的权重;
步骤6、用_mm_mullo_epi16计算权重和像素值的积;
步骤7、用_mm_adds_pi16指令把权重以及权重与像素值的积分别进行累加;
步骤8、右移一个像素,用_mm_loadl_epi64指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤4~步骤7;
步骤9、重复步骤8直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤10、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一列的滤波结果;
步骤11、重复步骤3~步骤10,直至得到d列中每一列的滤波结果。
作为本发明的进一步改进,所述步骤3与步骤4之间还包括步骤12;
步骤12、用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位。
作为本发明的进一步改进,在ARM架构平台上,所述行方向的滤波方法为:
步骤A、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤B、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;
步骤C、第一行上,用vld3_u8指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用vld3_u8指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤D、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,用vmovl_u8将差值的绝对值扩展到16位,并得出所述差值绝对值对应的权重;
步骤E、用vmlaq_u16计算权重与像素值的积,同时把权重以及权重与像素值的积分别进行累加;
步骤F、右移一个像素,用vld3_u8指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤D~步骤E;
步骤G、重复步骤F直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤H、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一行的滤波结果;
步骤I、重复步骤C~步骤H,直至得到d行中每一行的滤波结果。
作为本发明的进一步改进,在ARM架构平台上,所述列方向的滤波方法为:
步骤a、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤b、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;
步骤c、第一列上,用vld3_u8指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用vld3_u8指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤d、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,用vmovl_u8将差值的绝对值扩展到16位,并得出所述差值绝对值对应的权重;
步骤e、用vmlaq_u16计算权重与像素值的积,同时把权重以及权重与像素值的积分别进行累加;
步骤f、右移一个像素,用vld3_u8指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤d~步骤e;
步骤g、重复步骤f直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤h、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一列的滤波结果;
步骤i、重复步骤c~步骤h,直至得到d列中每一列的滤波结果。
作为本发明的进一步改进,所述r优选取4。
与现有技术相比,本发明的有益效果为:
本发明提供了一种人脸区域滤波方法基于异构平台的计算优化方法,根据人脸区域滤波方法的可并行特性,利用X86架构平台的SSE内嵌指令集和ARM架构平台的NEON内嵌指令集和处理器的多核性;其中SSE内嵌指令集和NEON内嵌指令集都属于SIMD指令集;通过一个指令处理多个数据的方式,有效提升了算法的执行速度,降低了计算的循环次数,保证了运行的实时性。
附图说明
图1为本发明一种实施例公开的人脸区域滤波方法在X86架构平台的计算优化方法中行方向滤波的流程图;
图2为本发明一种实施例公开的人脸区域滤波方法在X86架构平台的计算优化方法中列方向滤波的流程图;
图3为本发明一种实施例公开的人脸区域滤波方法在ARM架构平台的计算优化方法中行方向滤波的流程图;
图4为本发明一种实施例公开的人脸区域滤波方法在ARM架构平台的计算优化方法中列方向滤波的流程图;
图5为本发明一种实施例公开的像素矩阵图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明公开了一种人脸区域滤波方法基于异构平台的计算优化方法,根据异构平台的架构平台类型的处理器核数,启用线程处理的数目,每个线程处理人脸区域中的一部分像素点;选用架构平台类型上的内嵌指令集为像素点的滤波提供指令,所述异构平台的架构平台类型包括X86架构平台或ARM架构平台;
通过内嵌指令集中的指令对人脸区域内的像素点进行行方向的滤波;
通过内嵌指令集中的指令对滤波后的像素点再进行列方向的滤波。
现有技术中,在视频美化方法中包括:检测人脸区域、对人脸区域滤波、调整整帧图像的亮度和对比度。其中:对人脸区域中的每个像素点滤波,采用保边缘的双边滤波的一个变形,公式如下:
其中:r是半径,p0是中心像素,pi是p0的相邻像素,T是阈值,m表示权重,i表示行,j表示列,mij是i行j列的权重,pij是i行j列的像素点,p表示像素点的值;半径r为指定模糊取样区域的大小;阈值T为控制相邻像素值与中心像素值相差多大时,才能成为模糊的一部分;像素值之差大于阈值的像素将被排除在模糊之外。
视频美化方法中人脸区域检测并不是对每一帧图像都检测,但人脸区域滤波是对每个像素点都做处理,耗时最大,针对该步骤进行优化。
针对视频美化方法人脸区域滤波所存在的技术问题,本发明公开了一种人脸区域滤波方法基于异构平台的计算优化方法,先对人脸区域内的像素点进行行方向的滤波,对滤波后的像素点再进行列方向的滤波。具体包括人脸区域滤波方法在X86架构平台的计算优化和人脸区域滤波方法在ARM架构平台的计算优化。
为了降低算法的复杂度,保证图像美化的最优效果,对算法降维,取r=4。下面结合附图对本发明做进一步的详细描述:
设输入视频帧图像为RGB图像,对图像的R、G、B三通道分别进行上面的滤波。
实施例1:如图1、图2、图5所示,本发明公开人脸区域滤波方法在X86架构平台的计算优化方法,包括:行方向滤波和列方向滤波;
如图1、图5所示,行方向滤波方法为:
S101、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
S102、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;X86SSE指令集是X86平台上一种SIMD(SingleInstruction,Multiple Data,单指令、多数据)指令集,通过一条指令处理多个数据的方式,达到提高数据处理效率的目的。
S103、对行方向的滤波用SIMD指令优化,第一行上,用_mm_loadl_epi64指令把相邻的8个像素点,共24个数据导入寄存器A(由于取模糊半径r=4,所以在寄存器A中导入的是A1,1~A1,8共8个像素点;同时,由于每个像素点有R、G、B三通道,所以其8个像素点共有24个数据),再用_mm_loadl_epi64指令把8个像素之前的4个像素(即A1,a~A1,d)和8个像素中的前4个像素(即A1,1~A1,4)共8个像素点24个数据导入寄存器B中;这样两个寄存器中的数据就分别相差4个像素;用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位;通过将像素点的数据由原先的8位扩展到16位,用于防止在计算过程中数据溢出,避免出现计算结果不准确的问题;
S104、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值,寄存器A与寄存器B对应像素的差值就是指的寄存器A中的第一个像素与寄存器B中的第一个像素相对应的差值;
S105、用_mm_abs_epi16指令计算差值的绝对值,并根据公式mi∈[0,1]得出差值对应的权重m;
S106、用_mm_mullo_epi16计算权重和像素值的积;
S107、由于模糊半径r=4,所以在依次计算会产生8个权重值和8个权重与像素值的积;用_mm_adds_pi16指令把8个权重以及8个权重与像素值的积分别进行累加;
S108、将寄存器B内的像素右移一个像素,即为用_mm_loadl_epi64指令把8个像素之前的3个像素(即A1,b~A1,d)和8个像素中的前5个像素(即A1,1~A1,5)共8个像素点的数据导入寄存器B中,寄存器A内的像素保持不变(寄存器A内存入的像素值仍为A1,1~A1,8);这时两个寄存器A、B就相差3个像素,重复S104~S107;
S109、重复S108直至把8个像素中的后4个像素(即A1,5~A1,8)和8个像素之后4个像素(即A1,e~A1,h)共8个像素点的数据导入寄存器B中,通过上述计算过程算出8个权重及权重与8个像素值的积,并分别进行累加;
S110、将每一次移动所得到的权重与像素值的积的累加值进行求和,将每一次移动所得到的权重累加值进行求和,将权重与像素值的积的累加值之和除以权重累加值之和,得到第一行的滤波结果;
S111、重复S103~S110,依次对第二行、第三行···的滤波结果进行计算,直至得到全部8行中每一行的滤波结果。
模糊半径内的行滤波完成后,在行滤波结果的基础上进行列方向的滤波,列方向滤波所调用的指令以及滤波方法与行方向相同;如图2所示:
S201、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
S202、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;X86SSE指令集是X86平台上一种SIMD(SingleInstruction,Multiple Data,单指令、多数据)指令集,通过一条指令处理多个数据的方式,达到提高数据处理效率的目的。
S203、对列方向的滤波用SIMD指令优化,第一列上,用_mm_loadl_epi64指令把相邻的8个像素点,共24个数据导入寄存器A,再用_mm_loadl_epi64指令把8个像素之前的4个像素和8个像素中的前4个像素共8个像素点24个数据导入寄存器B中;这样两个寄存器中的数据就分别相差4个像素;用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位;通过将像素点的数据由原先的8位扩展到16位,用于防止在计算过程中数据溢出,避免出现计算结果不准确的问题;
S204、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值,寄存器A与寄存器B对应像素的差值就是指的寄存器A中的第一个像素与寄存器B中的第一个像素相对应的差值;
S205、用_mm_abs_epi16指令计算差值的绝对值,并根据公式mi∈[0,1]得出差值对应的权重m;
S206、用_mm_mullo_epi16计算权重和像素值的积;
S207、由于模糊半径r=4,所以在依次计算会产生8个权重值和8个权重与像素值的积;用_mm_adds_pi16指令把8个权重以及8个权重与像素值的积分别进行累加;
S208、将寄存器B内的像素右移一个像素,即为用_mm_loadl_epi64指令把8个像素之前的3个像素和8个像素中的前5个像素共8个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;这时两个寄存器A、B就相差3个像素,重复S204~S207;
S209、重复S208直至把8个像素中的后4个像素和8个像素之后4个像素共8个像素点的数据导入寄存器B中,通过上述计算过程算出8个权重及权重与8个像素值的积,并分别进行累加;
S210、将每一次移动所得到的权重与像素值的积的累加值进行求和,将每一次移动所得到的权重累加值进行求和,将权重与像素值的积的累加值之和除以权重累加值之和,得到第一列的滤波结果;
S211、重复S203~S210,依次对第二列、第三列···的滤波结果进行计算,直至得到全部8列中每一列的滤波结果。
列滤波完成后,则模糊半径r为4的8行8列的模糊区域的滤波处理完成,则转向下一个8行8列的模糊区域进行滤波处理。
实施例2:如图3~5所示,本发明公开人脸区域滤波方法在ARM架构平台的计算优化方法,包括:行方向滤波和列方向滤波;
如图3、图5所示,行方向滤波方法为:
S301、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
S302、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;ARM NEON指令集是ARM平台上一种128位SIMD(SingleInstruction,Multiple Data,单指令、多数据)指令集,通过一条指令处理多个数据的方式,达到提高数据处理效率的目的。
S303、对行方向的滤波用NEON内嵌指令集优化,第一行上,用vld3_u8指令把相邻的8个像素点,共24个数据导入寄存器A(由于取模糊半径r=4,所以在寄存器A中导入的是A1,1~A1,8共8个像素点;同时,由于每个像素点有R、G、B三通道,所以其8个像素点共有24个数据),再用vld3_u8指令把8个像素之前的4个像素(即A1,a~A1,d)和8个像素中的前4个像素(即A1,1~A1,4)共8个像素点24个数据导入寄存器B中;这样两个寄存器中的数据就分别相差4个像素。
S304、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,寄存器A与寄存器B对应像素的差值就是指的寄存器A中的第一个像素与寄存器B中的第一个像素相对应的差值;用vmovl_u8指令将差值的绝对值扩展到16位;通过将像素点的数据由原先的8位扩展到16位,用于防止在计算过程中数据溢出,避免出现计算结果不准确的问题;并根据公式mi∈[0,1]得出差值对应的权重m;
S305、用vmlaq_u16计算权重与像素值的积,由于模糊半径r=4,所以在依次计算会产生8个权重值和8个权重与像素值的积;把8个权重以及8个权重与像素值的积分别进行累加;
S306、将寄存器B内的像素右移一个像素,即为用vld3_u8指令把8个像素之前的3个像素(即A1,b~A1,d)和8个像素中的前5个像素(即A1,1~A1,5)共8个像素点的数据导入寄存器B中,寄存器A内的像素保持不变(寄存器A内存入的像素值仍为A1,1~A1,8);这时两个寄存器A、B就相差3个像素,重复S304~S305;
S307、重复S306直至把8个像素中的后4个像素(即A1,5~A1,8)和8个像素之后4个像素(即A1,e~A1,h)共8个像素点的数据导入寄存器B中,通过上述计算过程算出8个权重及权重与8个像素值的积,并分别进行累加;
S308、将每一次移动所得到的权重与像素值的积的累加值进行求和,将每一次移动所得到的权重累加值进行求和,将权重与像素值的积的累加值之和除以权重累加值之和,得到第一行的滤波结果;
S309、重复S303~S308,依次对第二行、第三行···的滤波结果进行计算,直至得到全部8行中每一行的滤波结果。
模糊半径内的行滤波完成后,在行滤波结果的基础上进行列方向的滤波,列方向滤波所调用的指令以及滤波方法与行方向相同;如图4所示:
S401、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
S402、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;ARM NEON指令集是ARM平台上一种128位SIMD(SingleInstruction,Multiple Data,单指令、多数据)指令集,通过一条指令处理多个数据的方式,达到提高数据处理效率的目的。
S403、对列方向的滤波用NEON内嵌指令集优化,第一列上,用vld3_u8指令把相邻的8个像素点,共24个数据导入寄存器A,再用vld3_u8指令把8个像素之前的4个像素和8个像素中的前4个像素共8个像素点24个数据导入寄存器B中;这样两个寄存器中的数据就分别相差4个像素。
S404、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,寄存器A与寄存器B对应像素的差值就是指的寄存器A中的第一个像素与寄存器B中的第一个像素相对应的差值;用vmovl_u8指令将差值的绝对值扩展到16位;通过将像素点的数据由原先的8位扩展到16位,用于防止在计算过程中数据溢出,避免出现计算结果不准确的问题;并根据公式mi∈[0,1]得出差值对应的权重m;
S405、用vmlaq_u16计算权重与像素值的积,由于模糊半径r=4,所以在依次计算会产生8个权重值和8个权重与像素值的积;把8个权重以及8个权重与像素值的积分别进行累加;
S406、将寄存器B内的像素右移一个像素,即为用vld3_u8指令把8个像素之前的3个像素和8个像素中的前5个像素共8个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;这时两个寄存器A、B就相差3个像素,重复S404~S405;
S407、重复S406直至把8个像素中的后4个像素和8个像素之后4个像素共8个像素点的数据导入寄存器B中,通过上述计算过程算出8个权重及权重与8个像素值的积,并分别进行累加;
S408、将每一次移动所得到的权重与像素值的积的累加值进行求和,将每一次移动所得到的权重累加值进行求和,将权重与像素值的积的累加值之和除以权重累加值之和,得到第一列的滤波结果;
S409、重复S403~S408,依次对第二列、第三列···的滤波结果进行计算,直至得到全部8列中每一列的滤波结果。
列滤波完成后,则模糊半径r为4的8行8列的模糊区域的滤波处理完成,则转向下一个8行8列的模糊区域进行滤波处理。
本发明提供了一种人脸区域滤波方法基于异构平台的计算优化方法,将人脸区域滤波方法在X86架构的平台和ARM架构的平台上优化。在X86架构平台中:在单核处理器上,启用单线程,在多核处理器上,启用多线程;在每个线程里,采用SSE内嵌指令集(一种SIMD指令集),一次并行处理相邻8个像素点。在ARM架构平台中:在单核处理器上,启用单线程,在多核处理器上,启用多线程;在每个线程里,采用NEON内嵌指令集(一种SIMD指令集),一次并行处理相邻8个像素点。本发明根据人脸区域滤波方法的可并行特性,利用X86架构平台的SSE内嵌指令集和ARM架构平台的NEON内嵌指令集和处理器的多核性;其中SSE内嵌指令集和NEON内嵌指令集都属于SIMD指令集;通过一个指令处理多个数据的方式,有效提升了算法的执行速度,降低了计算的循环次数,保证了运行的实时性。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,包括:
根据异构平台的架构平台类型的处理器核数,启用线程处理的数目,每个线程处理人脸区域中的一部分像素点;选用架构平台类型上的内嵌指令集为像素点的滤波提供指令,所述异构平台的架构平台类型包括X86架构平台或ARM架构平台;在X86架构平台中选取SSE内嵌指令集,在ARM架构平台中选取NEON内嵌指令集,SSE内嵌指令集和NEON内嵌指令集都属于SIMD指令集;
通过内嵌指令集中的指令对人脸区域内的像素点进行行方向的滤波;其中,在X86架构平台上,所述行方向的滤波方法为:
步骤一、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤二、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;
步骤三、第一行上,用_mm_loadl_epi64指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用_mm_loadl_epi64指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤四、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值;
步骤五、用_mm_abs_epi16指令计算所述差值的绝对值,并得出所述差值对应的权重;
步骤六、用_mm_mullo_epi16计算权重和像素值的积;
步骤七、用_mm_adds_pi16指令把权重以及权重与像素值的积分别进行累加;
步骤八、右移一个像素,用_mm_loadl_epi64指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤四~步骤七;
步骤九、重复步骤八直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤十、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一行的滤波结果;
步骤十一、重复步骤三~步骤十,直至得到d行中每一行的滤波结果;
通过内嵌指令集中的指令对滤波后的像素点再进行列方向的滤波。
2.如权利要求1所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,所述人脸区域滤波方法为:
对人脸区域中的像素点滤波,采用保边缘的双边滤波的一个变形,公式如下:
其中:r是半径,p0是中心像素,pi是p0的相邻像素,T是阈值,i表示行,j表示列,mij是i行j列的权重,pij是i行j列的像素点,p表示像素点的值;
半径r为指定模糊取样区域的大小;阈值T为控制相邻像素值与中心像素值相差多大时,才能成为模糊的一部分;像素值之差大于阈值的像素将被排除在模糊之外。
3.如权利要求1所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,所述步骤三与步骤四之间还包括步骤十二;
步骤十二、用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位。
4.如权利要求1~2中任一项权利要求所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,在X86架构平台上,所述列方向的滤波方法为:
步骤1、当X86架构的处理器为单核时,启用单线程处理;当X86架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤2、选用X86架构平台上的SSE内嵌指令集为像素点的滤波提供指令;
步骤3、第一列上,用_mm_loadl_epi64指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用_mm_loadl_epi64指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤4、用_mm_sub_epi16指令计算寄存器A与寄存器B对应像素的差值;
步骤5、用_mm_abs_epi16指令计算所述差值的绝对值,并得出所述差值对应的权重;
步骤6、用_mm_mullo_epi16计算权重和像素值的积;
步骤7、用_mm_adds_pi16指令把权重以及权重与像素值的积分别进行累加;
步骤8、右移一个像素,用_mm_loadl_epi64指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤4~步骤7;
步骤9、重复步骤8直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤10、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一列的滤波结果;
步骤11、重复步骤3~步骤10,直至得到d列中每一列的滤波结果。
5.如权利要求4所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,所述步骤3与步骤4之间还包括步骤12;
步骤12、用_mm_cvtepu8_epi16指令把寄存器A和寄存器B中像素点的数据均扩展到16位。
6.如权利要求1~2中任一项权利要求所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,在ARM架构平台上,所述行方向的滤波方法为:
步骤A、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤B、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;
步骤C、第一行上,用vld3_u8指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用vld3_u8指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤D、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,用vmovl_u8将差值的绝对值扩展到16位,并得出所述差值绝对值对应的权重;
步骤E、用vmlaq_u16计算权重与像素值的积,同时把权重以及权重与像素值的积分别进行累加;
步骤F、右移一个像素,用vld3_u8指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤D~步骤E;
步骤G、重复步骤F直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤H、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一行的滤波结果;
步骤I、重复步骤C~步骤H,直至得到d行中每一行的滤波结果。
7.如权利要求1~2中任一项权利要求所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,在ARM架构平台上,所述列方向的滤波方法为:
步骤a、当ARM架构的处理器为单核时,启用单线程处理;当ARM架构的处理器为多核时,启用多线程处理,每个线程处理人脸区域中的一部分像素点;
步骤b、选用ARM架构平台上的NEON内嵌指令集为像素点的滤波提供指令;
步骤c、第一列上,用vld3_u8指令把第1~d共d个像素点的数据导入寄存器A,所述d表示直径,d=2r,再用vld3_u8指令把d个像素之前的r个像素和d个像素中的前r个像素共d个像素点的数据导入寄存器B中;
步骤d、用vabd_u8指令计算寄存器A与寄存器B对应像素的差值绝对值,用vmovl_u8将差值的绝对值扩展到16位,并得出所述差值绝对值对应的权重;
步骤e、用vmlaq_u16计算权重与像素值的积,同时把权重以及权重与像素值的积分别进行累加;
步骤f、右移一个像素,用vld3_u8指令把d个像素之前的r-1个像素和d个像素中的前r+1个像素共d个像素点的数据导入寄存器B中,寄存器A内的像素保持不变;重复步骤d~步骤e;
步骤g、重复步骤f直至把d个像素中的后r个像素和d个像素之后r个像素共d个像素点的数据导入寄存器B中,算出权重及权重与像素值的积,并分别进行累加;
步骤h、将得到的所有权重与像素值的积的累加值之和除以所有权重累加值之和,得到第一列的滤波结果;
步骤i、重复步骤c~步骤h,直至得到d列中每一列的滤波结果。
8.如权利要求7所述的人脸区域滤波方法基于异构平台的计算优化方法,其特征在于,所述r取4。
CN201510989202.8A 2015-12-24 2015-12-24 一种人脸区域滤波方法基于异构平台的计算优化方法 Active CN105787910B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510989202.8A CN105787910B (zh) 2015-12-24 2015-12-24 一种人脸区域滤波方法基于异构平台的计算优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510989202.8A CN105787910B (zh) 2015-12-24 2015-12-24 一种人脸区域滤波方法基于异构平台的计算优化方法

Publications (2)

Publication Number Publication Date
CN105787910A CN105787910A (zh) 2016-07-20
CN105787910B true CN105787910B (zh) 2019-01-11

Family

ID=56390270

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510989202.8A Active CN105787910B (zh) 2015-12-24 2015-12-24 一种人脸区域滤波方法基于异构平台的计算优化方法

Country Status (1)

Country Link
CN (1) CN105787910B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106341696A (zh) * 2016-09-28 2017-01-18 北京奇虎科技有限公司 一种直播视频流处理方法和装置
CN107886469A (zh) * 2017-09-26 2018-04-06 北京潘达互娱科技有限公司 一种图像美化方法、装置、电子设备及存储介质
CN108198124B (zh) * 2017-12-27 2023-04-25 上海联影医疗科技股份有限公司 医学图像处理方法、装置、计算机设备和存储介质
CN108510459A (zh) * 2018-04-08 2018-09-07 哈尔滨理工大学 一种基于小波自适应阈值与双边滤波图像降噪算法
CN108764037B (zh) * 2018-04-24 2021-12-24 石狮市森科智能科技有限公司 一种基于ARM Cotex-A系列平台的人脸检测实现方法
CN110648287B (zh) * 2019-08-26 2022-11-25 上海科技大学 盒式滤波器并行高效计算方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222317A (zh) * 2011-06-22 2011-10-19 王洪剑 一种图像缩放方法和系统
CN102685480A (zh) * 2011-03-16 2012-09-19 中兴通讯股份有限公司 一种视频滤波方法及装置
CN103400359A (zh) * 2013-08-07 2013-11-20 中国科学院长春光学精密机械与物理研究所 基于非局部域变换的实时彩色图像滤波方法
CN104572027A (zh) * 2014-12-24 2015-04-29 天津大学 基于多核处理器的哈里斯特征点检测并行实现方法
CN104732490A (zh) * 2014-12-03 2015-06-24 南京理工大学 基于cuda的快速双边滤波方法
CN104866537A (zh) * 2014-02-25 2015-08-26 英特尔公司 用于特征搜索的系统、装置和方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102685480A (zh) * 2011-03-16 2012-09-19 中兴通讯股份有限公司 一种视频滤波方法及装置
CN102222317A (zh) * 2011-06-22 2011-10-19 王洪剑 一种图像缩放方法和系统
CN103400359A (zh) * 2013-08-07 2013-11-20 中国科学院长春光学精密机械与物理研究所 基于非局部域变换的实时彩色图像滤波方法
CN104866537A (zh) * 2014-02-25 2015-08-26 英特尔公司 用于特征搜索的系统、装置和方法
CN104732490A (zh) * 2014-12-03 2015-06-24 南京理工大学 基于cuda的快速双边滤波方法
CN104572027A (zh) * 2014-12-24 2015-04-29 天津大学 基于多核处理器的哈里斯特征点检测并行实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
SEPARABLE BILATERAL FILTERING FOR FAST VIDEO PREPROCESSING;Tuan Q.Pham 等;《IEEE International Conference on Multimedia and Expo》;20051231;第1-4页
一种改进的双边滤波算法;张志强 等;《中国图象图形学报》;20090331;第14卷(第3期);第3.2节,第4节,图1
面向在线实时应用的卡通风格化方法;洪朝群 等;《厦门理工学院学报》;20150228;第23卷(第1期);第73-78页

Also Published As

Publication number Publication date
CN105787910A (zh) 2016-07-20

Similar Documents

Publication Publication Date Title
CN105787910B (zh) 一种人脸区域滤波方法基于异构平台的计算优化方法
EP3895118B1 (en) Systems and methods for noise reduction
Pan et al. Deep blind video super-resolution
EP3739431B1 (en) Method for determining point of gaze, contrast adjustment method and device, virtual reality apparatus, and storage medium
CN103260081B (zh) 一种视频图像缩放处理方法及装置
CN108604369B (zh) 一种去除图像噪声的方法、装置、设备及卷积神经网络
Li et al. Video super-resolution using an adaptive superpixel-guided auto-regressive model
EP2898473A1 (en) Systems and methods for reducing noise in video streams
CN112785507A (zh) 图像处理方法及装置、存储介质、终端
CN107509031A (zh) 图像处理方法、装置、移动终端及计算机可读存储介质
Guo et al. Single image dehazing based on fusion strategy
CN108053424B (zh) 目标跟踪方法、装置、电子设备及存储介质
WO2009091081A1 (en) Systems and methods for video processing based on motion-aligned spatio-temporal steering kernel regression
CN110047122A (zh) 渲染图像的方法、装置、电子设备和计算机可读存储介质
CN105118027A (zh) 一种图像的去雾方法
CN109389560A (zh) 一种自适应加权滤波图像降噪方法、装置及图像处理设备
CN113240760A (zh) 一种图像处理方法、装置、计算机设备和存储介质
CN101739670B (zh) 非局部均值空域时变图像滤波方法
CN105979283A (zh) 视频转码方法和装置
CN105787892A (zh) 一种基于机器学习的蒙特卡洛噪声去除方法
Liu et al. Large size single image fast defogging and the real time video defogging FPGA architecture
CN104751417A (zh) 一种去除颜色噪声的方法、装置及图像处理系统
Wu et al. A new sampling algorithm for high-quality image matting
CN111724306B (zh) 一种基于卷积神经网络的图像缩小方法及系统
Wang et al. Image super-resolution using non-local Gaussian process regression

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