具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
请参见图1,为本申请一实施例提供的一种图像二值化方法的示意流程图,可以应用于用于进行图像处理的服务端或者客户端,所述方法包括以下步骤:
步骤100:确定图像中待处理的当前像素点。
步骤110:获取包含所述当前像素点的局部区域。
本实施例中,所述局部区域的大小可以是预先设定的。如图2所示的像素点示意图,以像素点(G,8)为例,首先确定包含该像素点(G,8)的局部区域,如图2中阴影区域。
步骤120:计算所述局部区域中所有像素点的灰度平均值。
通常,所述图像中每一个像素点都可以通过RGB色彩模式,即可以使用R(red,红)、G(green,绿)、B(blue,蓝)三个分量来表示。在计算机中,RGB的大小可以是指亮度,通常可以使用整数表示,R、G、B各可以有256级的亮度,一般采用数字0、1、2、3……、255,即R、G、B的范围值各为[0,255]。如此,利用RGB色彩模式可以展示256*256*256=16777216种不同的颜色。
在RGB色彩模式中,当R=G=B时,彩色可以表示为一种灰度颜色。通常,可以将R=G=B的值称之为灰度值,灰度值的范围为[0,255]。因此,可以将像素点的RGB值转换为灰度值。一般的,灰度值的转换(即灰度化)可以通过如下方式实现:
第一种实现方式中,可以采用分量法:
将彩色图像中的RGB三分量,任意选取一个分量值作为灰度值。也就是说,用户可以根据实际应用的需要,仅选取R分量的值作为灰度值;也可以仅选取G分量的值作为灰度值;还可以仅选取B分量的值作为灰度值。
在第二种实现方式中,可以采用最大值法:
将彩色图像中的RGB三分量中的最大值作为灰度值。计算灰度值的公式可以为:MAX(R,G,B)。例如,某一个RGB三分量为(R=122,G=90,B=200),则可以将最大值B=200作为灰度值,即灰度值为200。
在第三种实现方式中,可以采用平均值法:
将彩色图像中的RGB三分量求和后计算一个平均值,进而将该平均值作为灰度值。这样,计算灰度值的公式可以为:(R+G+B)/3。
在第四种实现方式中,可以采用加权平均值:
该实现方式中,可以预先给每一种分量设置一个权值,计算时对RGB三分量进行加权平均,将加权平均值作为灰度值。一般的,设置的权值可以根据实际应用需求,例如人眼对绿色的敏感最高,对蓝色敏感最低,则可以对G设置一个高权值如0.59,对B设置一个低权值如0.11,对R设置一个中间权值如0.3;这样,计算灰度值的公式可以为:(0.3R+0.59G+0.11B)/3。
当然,上述灰度化的方式仅为示例,在实际应用过程中可以根据实际需要选择合适的灰度化方式。
在获取到该局部区域内所有像素点的灰度值之后,可以计算所述局部区域中所有像素点的灰度平均值。
如图2所示的局部区域包含的像素点(G,8)、(H,8),(G,9)和(H,9);则计算灰度平均值为这4个像素点的灰度值之和除以4。
步骤130:判断所述当前像素点的灰度值是否大于所述灰度平均值。
步骤140:根据所述判断的结果,确定二值化值,并扩大所述局部区域的范围,重复执行所述步骤120:计算所述局部区域中所有像素点的灰度平均值,直到判断的次数到达设定的次数;
本实施例中,所述根据所述判断的结果,确定二值化值,具体可以包括:
在所述当前像素点的灰度值大于所述灰度平均值的情况下,确定二值化值为0;
在所述当前像素点的灰度值不大于所述灰度平均值的情况下,确定二值化值为1。
该实施例,如前所述灰度值的范围为[0,255];灰度值为0时显示的是全黑,灰度值为255时显示的是全白。一般的,二值化值的1可以表示黑色,0可以表示白色。
因此,对于在所述当前像素点的灰度值大于所述灰度平均值的的情况下,可以确定二值化值为0,即为白色;对于在所述当前像素点的灰度值不大于所述灰度平均值的的情况下,可以确定二值化值为1,即为黑色。
后续步骤中提出的示例均以该种二值化值为例进行描述的。但在值得一提的是,由于二值化值的含义是预先定义的,该实施例中所述的二值化值的1表示黑色,0表示白色;在其它实施例中,二值化值的含义可以是相反的,例如二值化值的1表示白色,0表示黑色。此时,所述根据所述判断的结果,确定二值化值,具体可以包括:
在所述当前像素点的灰度值大于所述灰度平均值的情况下,确定二值化值为1;
在所述当前像素点的灰度值不大于所述灰度平均值的情况下,确定二值化值为0。
需要说明的是,通常意义上来说二值化值即为0或1;但是,在某些实施例中也可以使用其它数值、文字或者符号来替换,其本质含义依然是一样的。
本实施例中,
在第一种实现方式中,所述设定的次数可以是人为根据经验预先设置的一个经验值。
在第二种实现方式中,所述设定的次数可以是通过如下方式计算得到的:
获取所述图像的像素宽度和像素高度;
将所述像素宽度和像素高度中数值大的确定为对数函数的真数x;
获取设定的对数函数的底a;
根据对数函数y=log a(x),计算得到设定的次数y。
以图2所示,图像中横向由A到P,则像素宽度width即为16;图像中纵向由1到16,则像素高度height即为16。
进一步的,x=MAX(width,height);由于像素宽度和像素高度都为16,因此,x=16;
进一步的,根据对数函数y=loga(x),假设a为2,则计算得到设定的次数y=log2(16)=4,即设定的次数为4。
需要说明的是,所述对数函数的底a还与扩大局部区域的范围有关;
具体地,扩大后所述局部区域的范围为像素宽度和像素高度均为a的i次方(即a^i)的区域,所述i初始值为1,随着每一次判断i值加1。
值得一提的是,如果扩大后的像素高度或者像素宽度超过了其最大值,则无需再扩大该方向的像素值。例如,某一图像的像素高度为16,像素宽度为15,则当需要扩大到例如16*16时,由于超过了像素宽度的最大值15,则扩大到像素宽度最大值即可,这样扩大后的局部区域的范围即为16*15。
以下以设定的次数y=4,a=2为例,详细介绍图2所示当前像素点(G,8)的二值化处理过程:
第一次计算当前像素点(G,8)的二值化值:
计算图2中i=1对应虚线框内所示局部区域中所有像素点(G,8),(H,8),(G,9)和(H,9)的灰度平均值,即为Q1;
判断当前像素点(G,8)的灰度值是否大于Q1;
假设当前像素点(G,8)的灰度值大于Q1;则可以确定当前像素点(G,8)此次计算的二值化值为1;
由于此时判断的次数i为1,并没有达到设定的次数4;因此,可以扩大所述局部区域的范围,即可以根据前述对数函数的底2,扩大后所述局部区域如图2中i=2对应虚线框内的区域;范围为4*4;(2^2)。
第二次计算当前像素点(G,8)的二值化值:
计算图2中i=2对应虚线框内所示局部区域中所有像素点(F,7),(G,7),(H,7),(I,7),(F,8),(G,8),(H,8),(I,8),(F,9),(G,9),(H,9),(I,9),(F,10),(G,10),(H,10)和(I,10)的灰度平均值,即为Q2;
判断当前像素点(G,8)的灰度值是否大于Q2;
假设当前像素点(G,8)的灰度值大于Q2;则可以确定当前像素点(G,8)此次计算的二值化值为1;
由于此时判断的次数i为2,并没有达到设定的次数4;因此,可以扩大所述局部区域的范围,类似的即可以根据前述对数函数的底2,扩大后所述局部区域如图2中i=3对应虚线框内的区域;范围为8*8;(2^3)。
第三次计算当前像素点(G,8)的二值化值:
计算图2中i=3对应虚线框内所示局部区域中所有像素点的灰度平均值,即为Q3;
判断当前像素点(G,8)的灰度值是否大于Q3;
假设当前像素点(G,8)的灰度值大于Q3;则可以确定当前像素点(G,8)此次计算的二值化值为1;
由于此时判断的次数i为3,并没有达到设定的次数4;因此,可以扩大所述局部区域的范围,类似的即可以根据前述对数函数的底2,扩大后所述局部区域如图2中i=4对应虚线框内的区域;范围为16*16;(2^4),此时已经扩大到整个图像范围。
第四次计算当前像素点(G,8)的二值化值:
计算图2中i=4对应虚线框内所示局部区域中所有像素点的灰度平均值,即为Q4;
判断当前像素点(G,8)的灰度值是否大于Q4;
假设当前像素点(G,8)的灰度值不大于Q3;则可以确定当前像素点(G,8)此次计算的二值化值为0;
由于此时判断的次数i为4,已经达到设定的次数4,因此,可以执行后续步骤150;并且经过4次计算,得出的当前像素点(G,8)的二值化值分别为:1,1,1,0。
在第三种实现方式中,所述设定的次数可以是通过如下方式计算得到的:
获取所述图像的像素宽度和像素高度;
将所述像素宽度和像素高度中数值大的确定为分子x;
获取设定的分母a;
根据函数y=x/a,计算得到设定的次数y。
以图2所示,图像中横向由A到P,则像素宽度width即为16;图像中纵向由1到16,则像素高度height即为16。
进一步的,x=MAX(width,height);由于像素宽度和像素高度都为16,因此,x=16;
进一步的,根据函数y=x/a,假设a为2,则计算得到设定的次数y=16/2=8,即设定的次数为8。
需要说明的是,所述函数的分母a还与扩大局部区域的范围有关;
具体地,扩大后所述局部区域的范围为像素宽度和像素高度均为a*i的区域,所述i初始值为1,随着每一次判断i值加1。
值得一提的是,如果扩大后的像素高度或者像素宽度超过了其最大值,则无需再扩大该方向的像素值。例如,某一图像的像素高度为16,像素宽度为15,则当需要扩大到例如16*16时,由于超过了像素宽度的最大值15,则扩大到像素宽度最大值即可,这样扩大后的局部区域的范围即为16*15。
与图2相同的图像,采用第三种实现方式,以设定的次数y=8,a=2为例,计算当前像素点(G,8)的二值化过程中局部区域变换过程如图3所示。
第一次计算当前像素点(G,8)的二值化值时的局部区域为i=1对应虚线框内的区域;范围为2*2;(2*1);
第二次计算当前像素点(G,8)的二值化值时的局部区域为i=2对应虚线框内的区域;范围为4*4;(2*2);
第三次计算当前像素点(G,8)的二值化值时的局部区域为i=3对应虚线框内的区域;范围为6*6;(2*3);
第四次计算当前像素点(G,8)的二值化值时的局部区域为i=4对应虚线框内的区域;范围为8*8;(2*4);
第五次计算当前像素点(G,8)的二值化值时的局部区域为i=5对应虚线框内的区域;范围为10*10;(2*5);
第六次计算当前像素点(G,8)的二值化值时的局部区域为i=6对应虚线框内的区域;范围为12*12;(2*6);
第七次计算当前像素点(G,8)的二值化值时的局部区域为i=7对应虚线框内的区域;范围为14*14;(2*7);
第八次计算当前像素点(G,8)的二值化值时的局部区域为i=8对应虚线框内的区域;范围为16*16;(2*8)。
通过图2和图3比较得出:
采用第二种实现方式时,每一次扩大后的局部区域范围都是呈指数增长的,因此其处理同样的图像,处理速度更快。适合处理像素较多的图像。
采用第三种实现方式时,每一次扩大后的局部区域范围都是呈线性增长的,处理同样的图像,相比第二种实现方式,二值化处理的更为精细,因此,得到的最终的二值化值更为准确。适合处理像素较少,或者二值化值要求更为准确的图像。
步骤150:在判断的次数到达设定的次数的情况下,根据每一次确定的二值化值,确定所述当前像素点最终的二值化值。
在本申请的一个具体实施例中,所述步骤150,具体可以包括:
统计相同二值化值的数量;
将数量多的二值化值确定为所述当前像素点最终的二值化值。
依然以上一步骤中所示的例子为例加以说明,即经过4次计算,得出的当前像素点(G,8)的二值化值分别为:1,1,1,0。由于当前像素点(G,8)的二值化值为1的次数是3次,为0的次数为1次,因此可以将1确定为当前像素点(G,8)最终的二值化值。
在实际应用过程中,可能会出现两种二值化值的数量相同的情况,
在一种实现方式中:
在出现两种二值化值的数量相同的情况下,可以任取一种二值化值确定为所述当前像素点最终的二值化值。
例如,假设经过4次计算,得出的当前像素点(G,8)的二值化值分别为1,1,0,0;由于为1的次数和为0的次数均为2次,因此可以随机将1或0作为二值化值;
在另一种实现方式中:
在出现两种二值化值的数量相同的情况下,可以将预设的二值化值确定为所述当前像素点最终的二值化值。
该实施例中,可以是预先设置倾向性的二值化值,例如实际应用时如果倾向于白色,则在出现两种二值化值的数量相同的情况下,可以将代表白色的0作为当前像素点(G,8)最终的二值化值;同样的,如果倾向于黑色,在出现两种二值化值的数量相同的情况下,则可以将代表黑色的1作为当前像素点(G,8)最终的二值化值。
在另一种实现方式中:
在出现两种二值化值的数量相同的情况下,可以根据当前所述局部区域的灰度平均值,确定所述当前像素点最终的二值化值。具体地,如果当前所述局部区域的灰度平均值偏白色(如大于127.5),则当前像素点最终的二值化值为表示白色的0;如果当前所述局部区域的灰度平均值偏黑色(如小于或等于127.5),则当前像素点最终的二值化值为表示黑色的1。
在本申请的另一个实施例中,所述步骤150,具体可以包括:
获取每一次确定的二值化值对应的权重值;
将每一次确定的二值化值与对应的权重值相乘后求和;
判断所述求和结果是否大于阈值;
根据所述求和结果是否大于阈值的结果,确定所述当前像素点最终的二值化值。
本实施例中,所述权重值可以是人为预先设置的,每一个二值化值都可以对应有一个权重值,并且所有权重值之和为1。
所述权重值可以与局部区域的范围大小有关,例如随着局部区域的范围扩大,二值化值对应的权重值是递增的;例如当前像素点有4个二值化值的情况下,权重值可以为0.1,0.2,0.3,0.4,呈递增趋势;当然,也可以是递减的,例如0.4,0.3,0.2,0.1。需要说明的是,此处权重值的设置仅为示例,本实施例并不加以限定;在实际应用过程中,可以根据需求灵活设置。
具体地,将每一次确定的二值化值与对应的权重值相乘后求和,可以通过如下公式实现:
其中,n表示之前所述确定的二值化值的数量;ki表示第i个二值化值对应的权重值,bi表示第i个二值化值。
所述阈值可以人为预先设置一个经验值,例如0.5。
所述根据所述求和结果是否大于阈值的结果,确定所述当前像素点最终的二值化值,具体可以包括:
在所述求和结果大于阈值的情况下,确定所述当前像素点最终的二值化值为0;
在所述求和结果不大于阈值的情况下,确定所述当前像素点最终的二值化值为1。
本步骤与前述步骤140中根据所述判断的结果,确定二值化值类似,此处不再赘述。
依然以上述实施例中的例子加以说明,即经过4次计算,得出的当前像素点(G,8)的二值化值分别为1,1,1,0;假设获取到每一次确定的二值化值对应的权重值为0.1,0.2,0.3,0.4;阈值为0.5;
则,可以将每一次确定的二值化值与对应的权重值相乘后求和:
1*0.1+1*0.2+1*0.3+0*0.4=0.6;
由于所述求和结果0.6大于0.5,所以可以确定所述当前像素点(G,8)最终的二值化值为1。
需要说明的是,对于图2中(G,8)以外的其它像素点,都可以通过上述步骤100-150得出最终的二值化值。
通过本实施例,经过逐渐增大包含当前像素点的局部区域的范围,并计算不同局部区域中该当前像素点的二值化值;这种多层次的二值化处理方式,由于不同局部区域中具有不同的影响因素,所以使得每一层计算得到的二值化值参考了这些影响因素,并且最终确定的二值化值又是基于每一次计算得到的二值化值,这样最终确定的二值化值可以认为是参考了各个影响因素,如此,可以实现提高图像二值化处理的准确性。进而,为后续图像处理奠定更好的基础,有利于图像处理的准确性。
与前述图1所示图像二值化方法实施例相对应,本申请还提供了一种图像二值化装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请提高安全性的装置所在设备的一种硬件结构图,除了图4所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据该提高安全性的实际功能,还可以包括其他硬件,对此不再赘述。
参见图5,为本申请一实施例提供的图像二值化装置的模块图,所述装置可以包括:
确定单元200,确定图像中待处理的当前像素点;
获取单元210,获取包含所述当前像素点的局部区域;
第一计算单元220,计算所述局部区域中所有像素点的灰度平均值;
判断单元230,判断所述当前像素点的灰度值是否大于所述灰度平均值;
循环控制单元240,根据所述判断的结果,确定二值化值,并扩大所述局部区域的范围,将所述扩大后的局部区域输入到所述第一计算单元220,直到判断的次数到达设定的次数;
第二计算单元250,在判断的次数到达设定的次数的情况下,根据每一次确定的二值化值,计算所述当前像素点最终的二值化值。
在一个可选的实施例中:
所述循环控制单元240,具体包括:
第一循环控制子单元,在所述当前像素点的灰度值大于所述灰度平均值的情况下,确定二值化值为0,并扩大所述局部区域的范围,将所述扩大后的局部区域输入到所述第一计算单元220,直到判断的次数到达设定的次数;
第二循环控制子单元,在所述当前像素点的灰度值不大于所述灰度平均值的情况下,确定二值化值为1,并扩大所述局部区域的范围,将所述扩大后的局部区域输入到所述第一计算单元220,直到判断的次数到达设定的次数。
在一个可选的实施例中:
所述设定的次数,通过如下子单元得到:
第一获取子单元,获取所述图像的像素宽度和像素高度;
第一确定子单元,将所述像素宽度和像素高度中数值大的确定为对数函数的真数x;
第二获取子单元,获取设定的对数函数的底a;
第一计算子单元,根据对数函数y=loga(x),计算得到设定的次数y。
在一个可选的实施例中:
扩大后所述局部区域的范围为像素宽度和像素高度均为a的i次方的区域,所述i初始值为1,随着每一次判断i值加1。
在一个可选的实施例中:
所述设定的次数,通过如下子单元得到:
第一获取子单元,获取所述图像的像素宽度和像素高度;
第一确定子单元,将所述像素宽度和像素高度中数值大的确定为分子x;
第二获取子单元,获取设定的分母a;
第一计算子单元,根据函数y=x/a,计算得到设定的次数y。
在一个可选的实施例中:
扩大后所述局部区域的范围为像素宽度和像素高度均为a乘以i的区域,所述i初始值为1,随着每一次判断i值加1。
在一个可选的实施例中:
所述第二计算单元250,具体包括:
统计子单元,统计相同二值化值的数量;
第二确定子单元,将数量多的二值化值确定为所述当前像素点最终的二值化值。
在一个可选的实施例中:
在所述统计子单元之后,所述装置还包括:
第三确定子单元,在两种二值化值的数量相同的情况下,任取一种二值化值确定为所述当前像素点最终的二值化值。
在一个可选的实施例中:
所述第二计算单元,具体包括:
权重获取子单元,获取每一次确定的二值化值对应的权重值;
求和子单元,将每一次确定的二值化值与对应的权重值相乘后求和;
判断子单元,判断所述求和结果是否大于阈值;
第三确定子单元,根据所述求和结果是否大于阈值的结果,确定所述当前像素点最终的二值化值。
在一个可选的实施例中:
所述第三确定子单元,具体包括:
第四确定子单元,在所述求和结果大于阈值的情况下,确定所述当前像素点的二值化值为0;
第五确定子单元,在所述求和结果不大于阈值的情况下,确定所述当前像素点的二值化值为1。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上描述了图像二值化装置的内部功能模块和结构示意,其实质上的执行主体可以为一种计算机存储介质,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
确定图像中待处理的当前像素点;
获取包含所述当前像素点的局部区域;
计算所述局部区域中所有像素点的灰度平均值;
判断所述当前像素点的灰度值是否大于所述灰度平均值;
根据所述判断的结果,确定二值化值,并扩大所述局部区域的范围,重复执行所述计算所述局部区域中所有像素点的灰度平均值的步骤,直到判断的次数到达设定的次数;
在判断的次数到达设定的次数的情况下,根据每一次确定的二值化值,确定所述当前像素点最终的二值化值。
在上述计算机存储介质的实施例中,应理解,该处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-only memory,缩写:ROM)、随机存取存储器(英文:random access memory,简称:RAM)、快闪存储器、硬盘或者固态硬盘。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。