CN108805846B - 二值图像处理优化的方法及其系统 - Google Patents
二值图像处理优化的方法及其系统 Download PDFInfo
- Publication number
- CN108805846B CN108805846B CN201710305455.8A CN201710305455A CN108805846B CN 108805846 B CN108805846 B CN 108805846B CN 201710305455 A CN201710305455 A CN 201710305455A CN 108805846 B CN108805846 B CN 108805846B
- Authority
- CN
- China
- Prior art keywords
- bit
- data
- preset
- tail
- head
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 59
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000005260 corrosion Methods 0.000 claims abstract description 42
- 230000007797 corrosion Effects 0.000 claims abstract description 42
- 238000005457 optimization Methods 0.000 claims abstract description 31
- 239000013598 vector Substances 0.000 claims abstract description 27
- 239000011159 matrix material Substances 0.000 claims abstract description 26
- 230000003628 erosive effect Effects 0.000 claims abstract description 25
- 230000010339 dilation Effects 0.000 claims abstract description 18
- 238000009792 diffusion process Methods 0.000 claims abstract description 13
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 238000012937 correction Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 abstract description 7
- 229910052754 neon Inorganic materials 0.000 description 13
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical group [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 13
- 230000001133 acceleration Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 241000760358 Enodes Species 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- VOCBWIIFXDYGNZ-IXKNJLPQSA-N testosterone enanthate Chemical compound C1CC2=CC(=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H](OC(=O)CCCCCC)[C@@]1(C)CC2 VOCBWIIFXDYGNZ-IXKNJLPQSA-N 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration using local operators
- G06T5/30—Erosion or dilatation, e.g. thinning
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
本发明适用于图像处理技术领域,提供了一种二值图像处理优化的方法及其系统,所述方法包括:A、将二值图像按每预定数值个数的横向像素按照预定顺序组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;B、对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;C、对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;D、将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像。借此,本发明能够实现更高效地处理优化二值图像。
Description
技术领域
本发明涉及图像处理技术领域,尤其涉及一种二值图像处理优化的方法及其系统。
背景技术
二值图像(Binary Image)是指将图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。检测运动物体时需要对二值图像进行膨胀腐蚀操作,去除小的噪声点,填补空洞,使二值图像的轮廓更加清晰可见,以便提取出运动目标。现有技术的Opencv(Open Source Computer Vision Library,开源计算机视觉库)自带膨胀腐蚀算法如下:
膨胀算法:用n x n的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为0,结构图像的该像素为0,否则为1.结果:使二值图像扩大一圈。
腐蚀算法:用n x n的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为1,结构图像的该像素为1,否则为0.结果:使二值图像减小一圈。
上述的n x n的结构元素指的是全为1大小为1x1、3x3、5x5、7x7的卷积核,通过这个卷积核与二值图像进行覆盖‘与’运算得到结果图像。
但直接使用Opencv的膨胀腐蚀函数其运算速度慢,这在高密度视频处理领域效率变得低下。
综上可知,现有的二值图像处理优化技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。
发明内容
针对上述的缺陷,本发明的目的在于提供一种二值图像处理优化的方法及其系统,以能够实现更高效地处理优化二值图像。
为了实现上述目的,本发明提供一种二值图像处理优化的方法,所述方法包括:
A、将二值图像按每预定数值个数的横向像素按照预定顺序组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;
B、对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;
C、对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;
D、将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像。
根据本发明所述的方法,所述步骤A包括:
A1、将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;
A2、将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;
A3、将至少一个所述64位数加载到64位或128位的寄存器;
所述步骤B包括:
B1、对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;
B2、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;和/或
B3、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据。
根据本发明所述的方法,所述步骤C包括:
C1、将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;
C2、将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;
C3、对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;
C4、将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据。
根据本发明所述的方法,在所述步骤A2中,在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;
所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;
所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
根据本发明所述的方法,在所述步骤A之前包括:
E、在所述二值图像的横向像素的像素值小于整数倍的所述预定数值时,对所述二值图像的横向像素的像素值进行补偿至等于整数倍的所述预定数值;
在所述步骤D中,将所述图像矩阵数据中的等于整数倍的所述预定数值的所述二值图像的横向像素的像素值转化为所述二值图像的横向像素的像素值,并输出对应的二值图像;
所述预设的寄存器为ARM处理器中的NEON寄存器。
本发明还提出一种二值图像处理优化的系统,所述系统包括:
加载模块,用于将二值图像按每预定数值个数的横向像素按照预定顺序组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;
运算模块,用于对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;
修正模块,用于对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;
输出模块,用于将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像。
根据本发明所述的系统,所述加载模块包括:
转换子模块,用于将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;
组合子模块,用于将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;
加载子模块,用于将至少一个所述64位数加载到64位或128位的寄存器;
所述运算模块包括:
偏移子模块,用于对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;
膨胀运算子模块,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;和/或
腐蚀运算子模块,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据。
根据本发明所述的系统,所述修正模块包括:
标记子模块,用于将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;
第一运算子模块,用于将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;
第二运算子模块,用于对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;
替换子模块,用于将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据。
根据本发明所述的系统,所述加载子模块在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;
所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;
所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
根据本发明所述的系统,所述系统还包括:
补偿模块,用于在所述二值图像的横向像素的像素值小于整数倍的所述预定数值时,对所述二值图像的横向像素的像素值进行补偿至等于整数倍的所述预定数值;
所述输出模块具体将所述图像矩阵数据中的等于整数倍的所述预定数值的所述二值图像的横向像素的像素值转化为所述二值图像的横向像素的像素值,并输出对应的二值图像;
所述预设的寄存器为ARM(Advanced RISC Machines,微处理器)处理器中的NEON(128位SIMD扩展结构)寄存器。
本发明提供的二值图像处理优化的方法通过将二值图像按每预定数值个数的横向像素按照预定顺序转换组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器,可以通过设置该预定数值及寄存器,控制及提高每次处理优化的二值图像的横向像素;由此,对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算,将会明显提高优化效率;之后对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正,消除相邻数据之间高低位的影响,提高二值图像处理优化的精度;最后,将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像,实现高效地处理优化二值图像。此外,可以对二值图像预先做等效处理后再行其他相关的处理优化,由此时所述方法能适应任意大小的二值图像。此外,本发明还相应的提供了实现所述二值图像处理优化的方法的系统,通过该系统能够对任意大小的二值图像实现高效地处理优化二值图像。
附图说明
图1是本发明第一实施例提供的二值图像处理优化的系统的结构示意图;
图2是本发明第二、三、四实施例提供的二值图像处理优化的系统的结构示意图;
图3是本发明第一实施例提供的二值图像处理优化的方法流程图;
图4是本发明第一、二、三、四实施例提供二值图像处理优化的具体方法流程图;
图5是本发明优选实施例的原二值图像的示意图;
图6是现有Opencv自带函数单次膨胀后的二值图像的示意图;
图7是本发明优选实施例所述方法单次膨胀后的二值图像的示意图;
图8是现有Opencv自带函数四次膨胀和两次腐蚀后的二值图像的示意图;
图9是本发明优选实施例所述方法四次膨胀和两次腐蚀后的二值图像的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1,本发明提供一种二值图像处理优化的系统100,所述系统100包括有:
加载模块11,用于将二值图像按每预定数值个数的横向像素按照预定顺序转换组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;
运算模块12,用于对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;
修正模块13,用于对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;
输出模块14,用于将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像。
本实施例中利用SIMD(Single Instruction Multiple Data,单指令多数据流)指令集进行改进,SIMD指令集也因为其单指令多数据流的特性而在图像处理领域有很大的利用空间,这种并行指令将大大提高数据处理效率。具体的提供了二值图像处理优化的系统100通过将二值图像的横向像素提取并转换组成预设数值的位数,再对所述预设数值的位数左移右移后进行膨胀和/或腐蚀运算;其中预定数值个数可以为32个、64个或者是128个等,根据选用的寄存器以及需要达到的运算速度进行设置。相应的转换组合成至少一个预定数值的位数为32位数、64位数或者是128位数。优选的是,所述预设的寄存器为ARM处理器中的NEON寄存器,所述预设数值的位数通过寄存器的单指令多数据流指令进行膨胀和/腐蚀运算所处理的图像效果与opencv结构化元素为矩形的膨胀腐蚀的结果相差无几,并且显著提高了海量视频处理的效率。
参见图2,在本发明的第二实施例中,所述加载模块11包括:
转换子模块111,用于将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;
组合子模块112,用于将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;
加载子模块113,用于将至少一个所述64位数加载到64位或128位的寄存器;
所述运算模块12包括:
偏移子模块121,用于对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;
膨胀运算子模块122,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;和/或
腐蚀运算子模块123,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据。
所述加载子模块113在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;本实施例中,转换子模块111将二值图像的每64个横向像素的像素值(如0、255)一个个对应转换成相对的高低位(如0、1),所述组合子模块112将转换后的每64个横向像素按由高位到低位顺序组合成一个个64位数,而优化处理后的高低位0或1相应地转换为相应的像素值0或255则获得优化处理后的图像。如大小256*192的二值图像可以组合成4*192=768个64位数。并通过加载子模块113将所有的64位数加载到寄存器内,本实施例的NEON寄存器为128位寄存器,可一次性加载2个64位数,如表1,所述NEON寄存器一次性加载1st uint64*2_t或2nd uint64*2_t或3rd uint64*2_t所对应的一行,即每次以128位数据进行加载。运算模块12第一次按照行对齐处理‘1st uint64x2_t’对应的每一行,且循环的次数与图片大小有关,图片宽度小于或等于128的按照一次循环处理,宽度大于128小于或等于256的按照两次循环处理,依次类推。
表1:
每一行最终的处理结果是由当前行和上下两行决定的,因此这相当于opencv中膨胀和腐蚀以3*3的结构化元素处理,每一次膨胀都是3行同时作用的结果。以膨胀为例,偏移子模块121对第一行和最后一行不做处理,从第二行开始,当前行膨胀过后的结果是由膨胀运算子模块122对上一行、当前行、下一行、上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移这9个向量相或得到的,表2演示一个8位数是如何进行膨胀,所述64位数的膨胀原理与其相同。而腐蚀运算子模块123对上一行、当前行、下一行、上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移这9个向量相与得到的所述64位数的腐蚀运算的结果数据。
表2:
而其腐蚀结果则是由上一行、当前行、下一行、上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移这9个向量相与得到的,即上述8位数的腐蚀结果为00000000。其膨胀结果11111111中的8个1最终转化为8个像素值255的像素点,腐蚀结果00000000中的8个0最终转化为8个像素值0的像素点,进而构成优化后的二值图像。
参见图2,在本发明的第三实施例中,所述修正模块13包括:
标记子模块131,用于将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;
第一运算子模块132,用于将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;
第二运算子模块133,用于对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;
替换子模块134,用于将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据。
本实施例中,由于第二实施例中所针对的处理是每个预定数值的位数,由于相邻的两个64位数的最高位和最低位会相互影响,因此每行的64位数的头和尾都需要另做处理。如表3,所述标记子模块131将每个64位数的最高位所在的八个位取出来作为一个个uint8_t的数,记为对应64位数的头部,再把每个64位数的最低位所在的八个位取出来作为一个个uint8_t的数,记为对应64位数的尾部;
表3:
所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;
所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
1)第一运算子模块132将每个64位数的头部以16个为单位加载到128位的neon寄存器,再和预先定义好的头部掩膜进行相与操作,头部掩膜的定义规则为:每一行最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80。这里定义掩膜的作用是为了取出每个头部的最高位并且把处在二值图像每一行左边界上的头部置零,因为图像左边界上的头部是不会影响相邻64位数的尾部的;参加表4,例如,假如head1_1=10001110,head1_2=10011100;那么经过mask相与后的head1_1=00000000,head1_2=10000000;即相邻两64位数的最高位分别为10001110和10011100,则经过上述头部掩膜的相与操作后分别变成00000000和10000000。同理设置尾部掩膜。每个64位数的尾部也加载到128位寄存器,再和预先定义好的mask进行相与操作,mask的定义规则为:每一行最右边界64位数上的尾部mask为0x00,其余的尾部mask为0x01。这里定义mask的作用是为了取出每个尾部的最低位并且把处在二值图像每一行右边界上的尾部置零,因为图像右边界上的尾部是不会影响相邻64位数的头部的。如表4,假如tail1_1=10000110,tail1_2=10001101;那么经过mask相与后的tail1_1=00000000,tail1_2=00000000。另外,需要注意的是不同大小的二值图像需要定义不同的掩膜,因为它们边界的64位数所处位置会随图像大小变化而变化。
第二运算子模块133对每个头部和相邻的与掩膜相与后的尾部进行相或操作得到处理后的每个64位数的头部,对每个尾部和相邻的与掩膜相与后的头部进行相或操作得到处理后的每个64位数的尾部。这样得到每相邻两个64位数边界的处理结果,再把这些处理完的头部和尾部通过替换子模块134替换掉原来64位数的头部和尾部。
表4:
参见图2,在本发明的第四实施例中,所述系统100还包括:
补偿模块15,用于在所述二值图像的横向像素的像素值小于整数倍的所述预定数值时,对所述二值图像的横向像素的像素值进行补偿至等于整数倍的所述预定数值;例如预定数值为64时,横向像素的像素值数不足64的倍数时,则为其补偿,本实施例优选为其补偿数位0,以使其满足64倍数则停止补偿。
所述输出模块14具体将所述图像矩阵数据中的等于整数倍的所述预定数值的所述二值图像的横向像素的像素值转化为所述二值图像的横向像素的像素值,并输出对应的二值图像;最终处理结果等效于opencv中3*3且为矩形结构化元素的膨胀或腐蚀产生的结果。如果希望膨胀或腐蚀的结果等效于opencv中5*5且为矩形结构化元素的膨胀腐蚀产生的结果,那么上述处理过程需要进行两次,7*7的则进行三次。
参见图3,本发明提供了二值图像处理优化的方法,该方法采用上述多个实施例中提供的二值图像处理优化的系统100实现,该方法的步骤如下:
步骤S301:将二值图像按每预定数值个数的横向像素按照预定顺序转换组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;该步骤由加载模块11实现;
步骤S302:对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;该步骤由运算模块12实现;
步骤S303:对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;该步骤由修正模块13实现;
步骤S304:将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像;该步骤由输出模块14实现。
本实施例中,首先由加载模块11对二值图像按每预定数值个数的横向像素及预定的顺序转换组合成至少一个所述预定数值的位数,根据所选用的处理器以及需要达到的处理速度,该预定数值会有所不同,如为64、128等,并将经过转换组合的预定数值的位数加载到预设的寄存器;运算模块12对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;需要说明的是腐蚀(erode)是与膨胀(dilate)的运算步骤过程类似的。dilate是1的扩散,erode是0的扩散,因此erode的整个过程只是比dilate多了个取反操作。由于相邻的预定数值的两个位数的最高位和最低位会相互影响,因此需要修正模块13对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正。最后输出模块14将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像,实现了对二值图像的处理优化,其处理优化处理速度远高于现有技术中的Opencv自带函数的处理方式,提高了二值图像处理优化速度。
在本发明的一个优选实施例中,所述步骤S301包括:
A1、将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;该步骤由转换子模块111实现;
A2、将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;该步骤由组合子模块112实现;
A3、将至少一个所述64位数加载到64位或128位的寄存器;该步骤由加载子模块113实现;
所述S302包括:
B1、对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;该步骤由偏移子模块121实现;
B2、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;该步骤由膨胀运算子模块122实现;和/或
B3、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据;该步骤由腐蚀运算子模块123实现。
本实施例中,转换子模块111将二值图像的每64个横向像素的像素值(如0、255)一个个对应转换成相对的高低位(如0、1),所述组合子模块112将转换后的每64个横向像素按由高位到低位顺序组合成一个个64位数。加载子模块113将转换组合获得的一个或多个64位数加载到预设的寄存器。该寄存器可以为32位、64位或128位,甚至是256位的寄存器。优选的,所述预设的寄存器为ARM处理器中的NEON寄存器;ARM处理器的ARMV7架构包含:16个通用寄存器(32bit),r0-r15;16个NEON寄存器(128bit),q0-q15(同时也可以被视为32个64bit的寄存器,d0-d31);16个VFP寄存器(32bit),s0-s15。在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;由此提高了加载的效率。
在本发明另一优选实施例中,所述步骤S303包括:
C1、将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;该步骤由标记子模块131实现;
C2、将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;该步骤由第一运算子模块132实现;
C3、对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;该步骤由第二运算子模块133实现;
C4、将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据;该步骤替换子模块134实现。
在本实施例中,需要对相邻的两个64位数的最高位和最低位会相互影响,因此每行的64位数的头和尾都需要另做处理。并且,分别对头部掩膜和尾部掩膜进行预先设定,具体的:所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;
所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
本发明的另一优选实施例中,在所述步骤S301之前包括:
E、在所述二值图像的横向像素的像素值小于整数倍的所述预定数值时,对所述二值图像的横向像素的像素值进行补偿至等于整数倍的所述预定数值;该步骤由补偿模块15实现;
在所述步骤S304中,将所述图像矩阵数据中的等于整数倍的所述预定数值的所述二值图像的横向像素的像素值转化为所述二值图像的横向像素的像素值,并输出对应的二值图像。
本实施例中,如NEON寄存器最大为128位,为了充分利用寄存器,多个处理过程都是基于宽度为128的倍数、高度不限的二值图像,要使算法适用于任意大小的二值图像,必须在{(1)左右移对像素进行膨胀或腐蚀(2)每个64位数最高位和最低位的修正}这两个步骤之前和之后对做一些等效处理:
例如:二值图像大小为150x 150,在加载图像数据时把图像当成256x 150进行处理,处理完后再将大小为256x 150的图像数据转化为150x 150的图像数据,这样的图像才是最终需要的,这样处理会耗费多一点时间,但总体性能影响不大。这样发明提供的二值图像处理优化的方法则可以适应任意大小的二值图像了。
参见图4,在本发明的一个实施例中,所述方法具体实施例流程图如下:
步骤S401:输入二值图像;该步骤中输入的是原始的二值图像,其灰度值为0或255;
步骤S402;对图像数据每行作为一次循环处理单元;
步骤S403:每次加载所述二值图像的横向像素的64个像素,其中,行数据不足64倍数的则寄存器补0;并按顺序用0位或1位表示,连成一个64位数;
步骤S404:判定是否加载完成?若是则进入步骤步骤S405,若否则回到步骤步骤S403;
步骤S405:每次加载两个所述64位数到NEON寄存器;
步骤S406:对加载到所述NEON寄存器中的所述64位数左右偏移完成0或1扩散,之后进行膨胀和/或腐蚀运算;
步骤S407:判定是否加载完成?若是则进入步骤S408,若否则回到步骤步骤S405;
步骤S408:对完成所述膨胀和/或腐蚀运算的所述64位数进行修正;具体的依次处理每个膨胀或腐蚀后的64位数的最高位和最低位;
步骤S409:每加载一个修正完的所述64位数,之后将所述64位数的每一位的0位或1位转换为对应像素值的0或255;
步骤S410:判定是否加载完成?若是则进入步骤步骤S411,若否则回到步骤步骤S409;
步骤S411:将修正后的所述64位数中的行向量的数据转换成实际大小的图像矩阵数据;
步骤S412:输出与所述图像矩阵数据对应的二值图像。
图5~9为本发明算法与现有opencv自带函数算法对二值图像的优化处理对比图,如图可知,本发明所处理的图像效果与opencv结构化元素为矩形的膨胀腐蚀的结果相差无几,且经过时间测试,本发明单次膨胀或者腐蚀比opencv自带函数快5~6倍,多次膨胀或者腐蚀则加速效果更加明显,6次膨胀或腐蚀运行速度提升可达16~20倍;若输入二值图像宽度为128的倍数(高度不限),则效率最高。
在本发明的一个实施例中,本发明提供的所述二值图像处理优化的方法的优化前提:
(1)整个腐蚀或膨胀的过程只用到定点,不涉及浮点数
(2)neon能一次性处理一个向量而不是一个变量,因为其单指令流多数据流的处理方式。
(3)原图是二值图像,因而可以把像素值0、255转化为位中的0、1,使得表示方式简单,有效处理数据。
本发明内容是基于NEON指令集的图像处理膨胀腐蚀函数的加速算法。鉴于目前arm支持neon加速,在这基础上另辟蹊径对腐蚀膨胀进行加速。改进算法后单次膨胀或者腐蚀比opencv自带函数快3~6倍,多次膨胀或者腐蚀则加速效果更加明显,6次膨胀或腐蚀运行速度提升可达10~20倍以上,且处理完的二值化图像效果与opencv结构化元素为矩形的膨胀腐蚀的结果相差无几。这很好地提高了海量视频处理的效率。本算法适用于所有支持SIMD特性的机器。
综上所述,本发明提供的二值图像处理优化的方法通过将二值图像按每预定数值个数的横向像素按照预定顺序转换组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器,可以通过设置该预定数值及寄存器,控制及提高每次处理优化的二值图像的横向像素;由此,对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算,将会明显提高优化效率;之后对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正,消除相邻数据之间高低位的影响,提高二值图像处理优化的精度;最后,将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像,实现高效地处理优化二值图像。此外,可以对二值图像预先做等效处理后再行其他相关的处理优化,由此时所述方法能适应任意大小的二值图像。此外,本发明还相应的提供了实现所述二值图像处理优化的方法的系统,通过该系统能够对任意大小的二值图像实现高效地处理优化二值图像。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (6)
1.一种二值图像处理优化的方法,其特征在于,所述方法包括:A、将二值图像按每预定数值个数的横向像素按照预定顺序转换组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;B、对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;C、对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;D、将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像,所述步骤A包括:A1、将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;A2、将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;A3、将至少一个所述64位数加载到64位或128位的寄存器;所述步骤B包括:B1、对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;B2、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;和/或B3、将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据。
2.根据权利要求1所述的方法,其特征在于,所述步骤C包括:C1、将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;C2、将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;C3、对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;C4、将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据。
3.根据权利要求2所述的方法,其特征在于,在所述步骤A2中,在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
4.一种二值图像处理优化的系统,其特征在于,所述系统包括:加载模块,用于将二值图像按每预定数值个数的横向像素按照预定顺序组合成至少一个所述预定数值的位数,并将所述预定数值的位数加载到预设的寄存器;运算模块,用于对加载到所述预设的寄存器中的所述预定数值的位数左右偏移扩散后进行膨胀和/或腐蚀运算;修正模块,用于对完成所述膨胀和/或腐蚀运算的所述预定数值的位数进行修正;输出模块,用于将修正后的所述预定数值的位数中的行向量的数据转换成实际大小的图像矩阵数据,并输出与所述图像矩阵数据对应的二值图像,所述加载模块包括:转换子模块,用于将二值图像每64个横向像素的像素值中的255或0分别转化为1或0表示;组合子模块,用于将转换后的所述每64个横向像素按顺序由高位到低位组合成至少一个64位数;加载子模块,用于将至少一个所述64位数加载到64位或128位的寄存器;所述运算模块包括:偏移子模块,用于对加载到所述寄存器中的所述64位数中除第一行和最后一行的所有行的数据分别进行左右偏移;膨胀运算子模块,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相或运算,获得所述64位数的膨胀运算的结果数据;和/或腐蚀运算子模块,用于将除第一行和最后一行的所有行的当前行数据及其相邻的上一行数据、下一行数据、以及左右偏移后的上一行左移、上一行右移、当前行左移、当前行右移、下一行左移、下一行右移的9个向量值均进行相与运算,获得所述64位数的腐蚀运算的结果数据。
5.根据权利要求4所述的系统,其特征在于,所述修正模块包括:标记子模块,用于将所述结果数据的每个所述64位数的最高位和最低位所在的8位数分别标记为所述64位数的头部和尾部;第一运算子模块,用于将所述64位数的头部和尾部加载到所述寄存器,并分别与预先设定的头部掩膜和尾部掩膜进行相与运算;第二运算子模块,用于对每个所述64位数的头部和相邻的与掩膜相与后的尾部进行相或运算获得边界头部,每个所述64位数的尾部和相邻的与掩膜相与后的头部进行相或运算获得边界尾部;替换子模块,用于将所述边界头部和边界尾部分别替换所述64位数的所述头部和尾部,获得修正后的所述膨胀和/或腐蚀运算的结果数据。
6.根据权利要求5所述的系统,其特征在于,所述加载子模块在所述64位数包括多个,并且所述寄存器为128位的寄存器时,每次将两个所述64位数加载到所述128位的寄存器至所有多个所述64位数加载完成;所述预先设定的头部掩膜为:每一行中最左边界64位数上的头部掩膜为0x00,其余的头部掩膜为0x80;所述预先设定的尾部掩膜为:每一行中最右边界64位数上的尾部掩膜为0x00,其余的尾部掩膜为0x01。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710305455.8A CN108805846B (zh) | 2017-05-03 | 2017-05-03 | 二值图像处理优化的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710305455.8A CN108805846B (zh) | 2017-05-03 | 2017-05-03 | 二值图像处理优化的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108805846A CN108805846A (zh) | 2018-11-13 |
CN108805846B true CN108805846B (zh) | 2021-12-14 |
Family
ID=64054100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710305455.8A Active CN108805846B (zh) | 2017-05-03 | 2017-05-03 | 二值图像处理优化的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108805846B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109740733B (zh) * | 2018-12-27 | 2021-07-06 | 深圳云天励飞技术有限公司 | 深度学习网络模型优化方法、装置及相关设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567971A (zh) * | 2012-01-04 | 2012-07-11 | 上海理工大学 | 一种多级误差扩散半色调的修正方法 |
CN106204475A (zh) * | 2016-07-04 | 2016-12-07 | 西安交通大学 | 基于field map对fMRI中的几何畸变伪影进行校正的方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63104185A (ja) * | 1986-10-22 | 1988-05-09 | Seiko Instr & Electronics Ltd | 画像の膨張・縮小変換回路 |
CN1070500A (zh) * | 1992-09-24 | 1993-03-31 | 清华大学 | 二值图象处理技术 |
CN102446342B (zh) * | 2011-08-30 | 2013-04-17 | 西安交通大学 | 可重构二值运算器、可重构二值图像处理系统及其实现基本形态学算法的方法 |
CN103035010A (zh) * | 2012-12-24 | 2013-04-10 | 厦门大学 | 一种数字图像轮廓提取方法 |
US20160292877A1 (en) * | 2013-03-29 | 2016-10-06 | Hao Yuan | Simd algorithm for image dilation and erosion processing |
CN104240240B (zh) * | 2014-09-04 | 2017-03-15 | 南京理工大学 | 一种基于fpga的红外小目标检测方法及系统 |
CN204331828U (zh) * | 2015-01-19 | 2015-05-13 | 廖锦松 | 硬件二值化图像处理电路结构及采用该电路结构的图像处理模块 |
CN106558033A (zh) * | 2016-10-19 | 2017-04-05 | 安徽中科华澄智能科技股份有限公司 | 基于形态学膨胀腐蚀算法的二值图像处理方法 |
-
2017
- 2017-05-03 CN CN201710305455.8A patent/CN108805846B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567971A (zh) * | 2012-01-04 | 2012-07-11 | 上海理工大学 | 一种多级误差扩散半色调的修正方法 |
CN106204475A (zh) * | 2016-07-04 | 2016-12-07 | 西安交通大学 | 基于field map对fMRI中的几何畸变伪影进行校正的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108805846A (zh) | 2018-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11068776B2 (en) | Convolutional neural network based data processing apparatus, method for controlling the same, and storage medium storing program | |
JP6700712B2 (ja) | 畳み込み演算装置 | |
US9020296B2 (en) | Image conversion apparatus, method, and storage medium | |
US10719295B2 (en) | Circuit to perform dual input value absolute value and sum operation | |
WO2022110386A1 (zh) | 数据处理方法及人工智能处理器 | |
JP6532334B2 (ja) | 並列演算装置、画像処理装置及び並列演算方法 | |
JP4317624B2 (ja) | 画像処理装置 | |
JP2017191572A (ja) | 画像処理装置及びその方法、プログラム | |
CN108805846B (zh) | 二值图像处理优化的方法及其系统 | |
CN106296614B (zh) | 图像处理装置及图像处理方法 | |
US8902474B2 (en) | Image processing apparatus, control method of the same, and program | |
CN116109481A (zh) | 缩放方法、芯片、存储介质及电子设备 | |
JPH05233795A (ja) | 画像拡大縮小装置 | |
JP2006201914A (ja) | 画像フィルタ装置、方法およびコンピュータプログラム | |
JPH05242238A (ja) | 所与の拡大率によって画像を拡大する方法及び装置 | |
CN114693919A (zh) | 一种目标检测方法、终端设备及存储介质 | |
JP2009146190A (ja) | 画像処理装置 | |
US20130003870A1 (en) | Apparatus and method for video data processing | |
US6741294B2 (en) | Digital signal processor and digital signal processing method | |
CN111127323A (zh) | 一种基于fpga的图像缩小方法 | |
JP2010130460A (ja) | フィルタ係数計算方法及びフィルタ係数計算装置 | |
CN117956300B (zh) | 图像处理架构、图像处理方法及图像处理芯片 | |
CN110555802B (zh) | 为图像并行运算电路提供数据的多像素拼接方法和系统 | |
JP2658346B2 (ja) | 並列画像処理装置 | |
JP4170173B2 (ja) | ブロックマッチング演算装置 |
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 |