一种灰度图图像均值预处理的优化方法技术

技术编号:36648897 阅读:23 留言:0更新日期:2023-02-18 13:10
本发明专利技术提供了一种灰度图图像均值预处理的优化方法,针对灰度图,每次加载128个图像数据,一个寄存器加载16个8bit数据,使用8个变量寄存器中,分别为vrd0,vrd2,vrd4,vrd6,vrd8,vrd10,vrd12,vrd14,再将加载的寄存器数据转化为16比特,即使用16个寄存器存储数据,对上面的变量寄存器进行复用,再增加8个变量寄存器,生成vrd0,vrd1,

【技术实现步骤摘要】
一种灰度图图像均值预处理的优化方法


[0001]本专利技术涉及图像处理
,特别涉及一种灰度图图像均值预处理的优化方法。

技术介绍

[0002]在现有的图像处理技术中,特别是针对灰度图或是一个通道的图像,例如在活体检测采集的红外图像,是单通道图像,是一个灰度图。一些为了加速处理也会将彩色图处理成一个通道的灰度图,作为原始图像的输入。处理过程中经常会使用累加和求均值的方法,但是普通的加和、普通的均值计算,速度会很慢,例如北京君正集成电路股份有限公司(简称:北京君正)T30、T31型号的芯片,现有技术中计算均值的速度会拖延整体的运行速度。芯片上使用现有技术的普通方法,是连续相加,把整个图数据累加到一个数据,再求平均,时间比较长,且没有使用simd对均值的实现。此外,目前其他芯片上也没有发现针对一张图像使用simd求均值的实现方法。一些其他求均值的应用,使用的实现方法,加载16个8比特数据,将原始8比特数据转化为32比特,然后每4个一组,使用simd累加,再加载16个数据,再转化为16比特,再累加,直到最后,再将这组数据累加,再求平均。这种方法效率也是非常低。
[0003]现有技术中的常用术语如下:
[0004]1、均值:均值一般指平均数。平均数,统计学术语,是表示一组数据集中趋势的量数,是指在一组数据中所有数据之和再除以这组数据的个数。它是反映数据集中趋势的一项指标。解答平均数应用题的关键在于确定“总数量”以及和总数量对应的总份数。
[0005]2、灰度图:只有一个通道的图像。
[0006]3、simd指令(singleinstructionmultipledata),即一种以向量方式计算的指令。单指令流多数据流,也就是说一次运算指令可以执行多个数据流,这样在很多时候可以提高程序的运算速度。simd指令可以理解为运行一次指令,运行指定大小数组的运算。128bit的simd指令,数组大小是用128bit定义,放16个8bit数据,或放4个32比特数据,或放8个16bit数据。例如“两个数组”相加,一条simd指令直接就得到。

技术实现思路

[0007]为了解决上述现有技术中的问题,本申请的目的在于:提高计算均值的速度。可以实现40倍的提升。
[0008]具体地,本专利技术提供一种灰度图图像均值预处理的优化方法,所述方法针对灰度图,每次加载128个图像数据,一个寄存器可以加载16个8bit数据,使用8个变量寄存器中,分别为vrd0,vrd2,vrd4,vrd6,vrd8,vrd10,vrd12,vrd14,再将加载的寄存器数据转化为16比特,即使用16个寄存器存储数据,对上面的变量寄存器进行复用,再增加8个变量寄存器,这里会生成vrd0,vrd1,vrd2,vrd3,vrd4,vrd5,vrd6,vrd7,vrd8,vrd9,vrd10,vrd11,vrd12,vrd13,vrd14,vrd15;使用一个寄存器sum_h0进行16bit数据的累加,当sum_h0累加到256次时,对数据进行右移位8位,等价计算为除以256,再使用一个新的寄存器sum_h1对
移位后的sum_h0进行累加,而sum_h0初始化为0,再重新累加加载的新的数据;使用sum_h1对移位后的sum_h0进行累加,sum_h1累加到256次时,将sum_h1的结果保存到一个数组中;最后将数组的数据,再进行累加,再求均值。
[0009]所述方法进一步包括:
[0010]S1,初始化和使用的变量寄存器声明:设vri0为将8bit寄存器中的前8个数据转化为16bit的选择寄存器,vri1为将8bit寄存器中的后8个数据转化为16bit的选择寄存器;
[0011]预处理的数据为indata,数据宽为width,长为height,数据总数为piel_count=width*height;
[0012]设一个数据组为vsave[8],一个常规临时变量sum_int,均值为avg,统计sum_h1累加次数的计算器count,初始为0;
[0013]S2,加载128个图像数据到vrd0,vrd1,vrd2,vrd3,vrd4,vrd5,vrd6,vrd7,vrd8,vrd9,vrd10,vrd11,vrd12,vrd13,vrd14,vrd15,然后在对indata指针进行变化,即indata=indata+128;
[0014]S3,使用设置好的选择顺序实现对数据由8bit转化为16bit,由于在指令集中没有实现将8bit直接转化为16bit的指令,所以需要使用任意取值指令实现该功能,也就是设置两个选择的寄存器vri0,vri1,并对里面的具体选择顺序预先设计好;
[0015]S4,使用一个寄存器sum_h0进行16bit数据的累加,第一次累计和需要初始化时,sum_h0内数据为0;
[0016]S5,重复步骤S2、S3、S4,直到循环次数达到256次时,对sum_h0进行移位处理,再将处理后结果累加到sum_h1中,最后将sum_h0内的数据置0,同时count加1;
[0017]S6,重复步骤S2、S3、S4、S5,直到循环次数达到256次时,将sum_h1保存到vsave[8]中,对vsave[8]的数据进行求和为sum_int,sum_h1内的数据置为0;重复步骤S2、S3、S4、S5,直至所有数据计算完;
[0018]S7,求均值:所述将sum_h1的数据保存到vsave[8]中,对vsave[8]的数据进行求和为sum_int,累加的次数为count,则均值为:avg=sum_int/count;sum_h1是个寄存器,里面放的是8个16比特数据,把里面的数据取出来放到数组vsave[8]中,将数组vsave[8]里面的8个数据累加为sum_int。
[0019]所述方法应用于具有simd指令的芯片,对相应的指令集进行优化处理,处理的目标的长*宽为2048的倍数,图像均值预处理要求的精度误差在1以内,使用的相应的指令集有加法指令、移位指令、任意取值指令、除法指令、加载数据指令、保存数据指令。
[0020]所述方法应用于北京君正T30、T31型号芯片。
[0021]所述步骤S2中,对indata指针进行变化,进一步包括加载数据指令,输入的待载入的数据,当前是数据的指针indata,从该数据indata在内存里指向的位置0,16,
……
96,112开始加载128bit的数据,如果是8bit的数据是加载16个,如果是16bit数据加载8个,如果是32bit,加载4个数据:
[0022]vrd0=ingenic_load(indata,0);
[0023]vrd2=ingenic_load(indata,16);
[0024]vrd4=ingenic_load(indata,32);
[0025]vrd6=ingenic_load(indata,48);
[0026]vrd8=本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种灰度图图像均值预处理的优化方法,其特征在于,所述方法针对灰度图,每次加载128个图像数据,一个寄存器加载16个8bit数据,使用8个变量寄存器中,分别为vrd0,vrd2,vrd4,vrd6,vrd8,vrd10,vrd12,vrd14,再将加载的寄存器数据转化为16比特,即使用16个寄存器存储数据,对上面的变量寄存器进行复用,再增加8个变量寄存器,这里生成vrd0,vrd1,vrd2,vrd3,vrd4,vrd5,vrd6,vrd7,vrd8,vrd9,vrd10,vrd11,vrd12,vrd13,vrd14,vrd15;使用一个寄存器sum_h0进行16bit数据的累加,当sum_h0累加到256次时,对数据进行右移位8位,等价计算为除以256,再使用一个新的寄存器sum_h1对移位后的sum_h0进行累加,而sum_h0初始化为0,再重新累加加载的新的数据;使用sum_h1对移位后的sum_h0进行累加,sum_h1累加到256次时,将sum_h1的结果保存到一个数组中;最后将数组的数据,再进行累加,再求均值。2.根据权利要求1所述的一种灰度图图像均值预处理的优化方法,其特征在于,所述方法进一步包括:S1,初始化和使用的变量寄存器声明:设vri0为将8bit寄存器中的前8个数据转化为16bit的选择寄存器,vri1为将8bit寄存器中的后8个数据转化为16bit的选择寄存器;预处理的数据为indata,数据宽为width,长为height,数据总数为piel_count=width*height;设一个数据组为vsave[8],一个常规临时变量sum_int,均值为avg,统计sum_h1累加次数的计算器count,初始为0;S2,加载128个图像数据到vrd0,vrd1,vrd2,vrd3,vrd4,vrd5,vrd6,vrd7,vrd8,vrd9,vrd10,vrd11,vrd12,vrd13,vrd14,vrd15,然后在对indata指针进行变化,即indata=indata+128;S3,使用设置好的选择顺序实现对数据由8bit转化为16bit,由于在指令集中没有实现将8bit直接转化为16bit的指令,所以需要使用任意取值指令实现该功能,也就是设置两个选择的寄存器vri0,vri1,并对里面的具体选择顺序预先设计好;S4,使用一个寄存器sum_h0进行16bit数据的累加,第一次累计和需要初始化时,sum_h0内数据为0;S5,重复步骤S2、S3、S4,直到循环次数达到256次时,对sum_h0进行移位处理,再将处理后结果累加到sum_h1中,最后将sum_h0内的数据置0,同时count加1;S6,重复步骤S2、S3、S4、S5,直到循环次数达到256次时,将sum_h1保存到vsave[8]中,对vsave[8]的数据进行求和为sum_int,sum_h1内的数据置为0;重复步骤S2、S3、S4、S5,直至所有数据计算完;S7,求均值:所述将sum_h1的数据保存到vsave[8]中,对vsave[8]的数据进行求和为sum_int,累加的次数为count,则均值为:avg=sum_int/count。3.根据权利要求2所述的一种灰度图图像均值预处理的优化方法,其特征在于,所述方法应用于具有simd指令的芯片,对相应的指令集进行优化处理,处理的目标的长*宽为2048的倍数,图像均值预处理要求的精度误差在1以内,使用的相应的指令集有加法指令、移位指令、任意取值指令、除法指令、加载数据指令、保存数据指令。4.根据权利要求3所述的一种灰度图图像均值预处理的优化方法,其特征在于,所述方法应用于北京君正T30、T31型号芯片。
5.根据权利要求3所述的一种灰度图图像均值预处理的优化方法,其特征在于,所述的加法指令、移位指令、任意取值指令、除法指令、加载数据指令、保存数据指令,表示如下:a)加法指令:表示如下:vrd=ingenic_add_h(vrs,vrt);输入变量vrs,vrt,输出变量是vrd,vrd存储的是8个int16_t的数据,vrs和vrt存储的是8个int16_t数据,等价的运算:vrd0:=vrs0+vrt0;vrd1:=vrs1+vrt1;
……
vrd7:=vrs7+vrt7;b)移位指令:将变量里的每个元素进行移位,移动i位,该指令具有四舍五入的运算;左移移位指令,表示如下:vrd=ingenic_shift_left(vrs,i);右移移位指令,表示如下:vrd=ingenic_shift_right(vrs,i);c)任意取值指令:从变量vrs和vrt中根据vri设置的编号选择出4个或8个或16个数据,在使用该指令时,需要占有一个永久寄存器vri,用于指令选择具体位置的数据,vrd=ingenic_choise_h(vrs,vrt,vri);d)除法指令:表示如下:vrd=ingenic_div_d(vrs,vrt);输入变量vrs,vrt,输出变量是vrd寄存器,vrd存储的是16个int8_t的数据,vrs和vrt存储的是16个int8_t数据,结果按照四舍五入方式取值;等价的运算:vrd0:=vrs0/vrt0;vrd1:=vrs1/vrt1;
……
vrd7:=vrs7/vrt7;
……
Vrd15:=vrs15/vrt15;e)加载数据指令:输入的待载入的数据,当前是数据的指针indata,从该数据indata在内存里指向的位置m开始加载128bit的数据,如果是8bit的数据是加载16个,如果是16bit数据加载8个,如果是32bit,加载4个数据;数据加载到变量vrd寄存器...

【专利技术属性】
技术研发人员:田凤彬于晓静
申请(专利权)人:北京君正集成电路股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1