一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种二值序列滤波、二值图像形态学运算的加速计算方法与流程

2022-06-01 00:08:28 来源:中国专利 TAG:


1.本发明涉及cpu计算技术领域,具体为一种二值序列滤波、二值图像形态学运算的加速计算方法。


背景技术:

2.在对二值序列或二值图像的运算处理过程中,经常会对序列或图像进行局部统计以达到滤波或形态学操作等目的。如二值图像的腐蚀操作,统计局部的腐蚀核内的像素为均为1时,该像素坐标点的腐蚀核运算输出1。在某个状态量的二值序列中,如果有不稳定的跳变或干扰,则需对二值序列进行滤波,此时也将对二值序列进行
‘0’

‘1’
的数量统计。
3.在mcu或cpu中,对二值序列或二值图像的
‘0’

‘1’
统计,一般是将二值局部核窗口内的二值数据求和,假设统计窗口的长度为n,则核窗口进行一次滤波的加法次数是n-1。如果二值序列的长度为l,则核窗口进行滤波的次数是l-n 1次,执行的加法次数是(n-1)*(l-n 1)。加法操作严重降低了二值序列的滤波处理速度,故需对加法操作进行化简加速。
4.在二值图像的腐蚀和膨胀中,普通的腐蚀和膨胀,只需统计核窗口内是否全为
‘1’
或至少有一个
‘1’
。这样通过改变核的大小和腐蚀、膨胀的次数,可以调整腐蚀、膨胀的程度,从而断开图像中不同连接程度的物体或不同程度地连接物体。但这样的缺陷有:如果腐蚀想断开连接程度高,连接交际边界长的物体,需增大腐蚀核窗口或增加腐蚀次数,这都会使物体体积缩小的程度加深。如果对二值图像的腐蚀核窗口内求和,增加对核窗口内
‘1’
数量的判断,来决定是否腐蚀,则通过改变对核窗口内
‘1’
判决的数量,来改变腐蚀的倾向。在核窗口内
‘1’
的数量大于核窗口面积一半的情况下,降低腐蚀核窗口内对
‘1’
数量判决的阈值,则可以使
‘1’
数量偏多的位置更不容易被腐蚀,腐蚀更多作用在物体突出物附近,使物体以更光滑的方式进行腐蚀。此时统计核窗口内
‘1’
的数量也需用到加法进行求和,如果核窗口面积较大或整体图像像素较多,则执行加法操作次数将会至少达千万次,需要对加法求和计算进行化简。


技术实现要素:

5.本发明的目的在于提供一种二值序列滤波、二值图像形态学运算的加速计算方法,以解决上述背景技术中提出的问题。
6.为实现上述目的,本发明提供如下技术方案:一种二值序列滤波、二值图像形态学运算的加速计算方法,该方法包括有二值序列滤波和二值图像的特制形态学运算由简化和加速两个部分组成。
7.优选的,所述二值序列滤波特制形态学运算简化过程包括以下步骤:
8.步骤1:滤波窗口内的位列作为正向位列,其合并连接所成的二进制值称其为正向位列值;
9.步骤2:该正向位列的倒序称其为反向位列,其合并连接所成的二进制值称其为反向位列值;
10.步骤3:滤波窗口内的正向序列和其反向序列之和,大于或等于滤波判决输出为“1”最小镜像和,即可让滤波输出为
‘1’

11.优选的,所述二值图像的特制形态学运算简化包括以下步骤:
12.步骤1:如果通过腐蚀的核窗口的条件是核窗口全为
‘1’
,则该像素位置点可以通过腐蚀核;
13.步骤2:如果通过腐蚀核的条件是核窗口内
‘1’
的数量大于m,转换为对该长序列内
‘1’
的数量是否大于m的判断。
14.优选的,所述二值序列滤波和二值图像的特制形态学运算由加速过程,将二值图像的形态学运算中的
‘1’
值数量统计,化简为序列值与其反向序列值相加得镜像和,并通过判断该镜像和是否超过预定的阈值而确定
‘1’
值数量是否达到腐蚀核输出
‘1’
的条件。
15.与现有技术相比,本发明的有益效果是:经过化简的二值序列滤波,只需将滤波窗口内的位列值与其反向位列值相加,再判断相加的和与某特定值的大小,即可决定滤波的输出值,一次滤波的计算只执行了一次加法,与(n-1)次相比已大大优化节省了很多处理时间(n为滤波窗口长度)。
16.本发明的加速计算,将二值图像的形态学运算中的
‘1’
值数量统计,化简为序列值与其反向序列值相加得镜像和,并通过判断该镜像和是否超过预定的阈值而确定
‘1’
值数量是否达到腐蚀核输出
‘1’
的条件。省去了对腐蚀核内逐个像素二值的累加或判断。
附图说明
17.图1为二值序列滤波加速图;
18.图2为二值图像腐蚀图。
具体实施方式
19.下面为了加深对本发明的理解和认识,将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述和介绍,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,并非对本实施例进行任何形式上的限制。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
20.请参阅图1-2,本发明提供一种技术方案:正向位列值,该正向位列的倒序(即位列的最高位倒序为位列的最低位,以此类推)称其为反向位列,其合并连接所成的二进制值称其为反向位列值。
21.假设滤波窗口长度为5,且设定为窗口内
‘1’
的个数超过一半则滤波输出
‘1’
,则二进制数,滤波判决结果为
‘1’
且位列中
‘0’
最多的位列有:“11100”、“11001”、“10011”、“00111”、“01110”、“11010”、“10101”、“01011”、“10110”、“01101”,可以看出这些位列可以互为正反位列,正反位列相加称为镜像和。以n表示位列长度5,在这些位列中,如果让其中一个位列的第x位的“1”上升一位(最低位为第0位),则会使该位列数值增加2^x;如果让其第x位的“1”下降一位,则会使该位列数值减少2^(x-1)。可得当一个位列的第x位“1”上升一位时,其反向位列的第(n-x-1)位“1”会下降,反向位列数值减少了2^(n-x-2)。从而可以得出,当一个位列的第x位“1”上升一位时,其与其反向位列之和的增量为:
22.△
=2^x-2^(n-x-2)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
23.求

为负时,即位“1”上升导致位列与其反向位列之和减少时,x的范围:
24.2^x-2^(n-x-2)《0
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
25.化简得:
26.x《n/2-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
27.将n=5代入公式(3),可得x《1.5。故当正向位列中位序号x=0、1时,位于该位的“1”上升将会导致位列与其反向位列的和的减少,此时对应的反向位列中该位的序号xc=3、4(由xc=n-x-1,可得公式x《n/2-1可以转换为n-xc-1《n/2-1,化简得xc》n/2。)。比如位列“11001”,其第0位“1”上升一位或两位,都会使其与其反向位列的和的减少。进而可以得出,位列“11100”与其反向位列“00111”的和,为上述所列的十个位列中最小的镜像和。又由于上述所列的位列,为滤波判决输出为
‘1’
的位列中镜像和最小的十个位列,且由于正向位列和反向位列均能出现在二值序列中,反向位列也可以作为正向位列,故可以得出,位列“11100”与“00111”之和,为滤波判决输出为“1”的最小镜像和。当正向位列值为s,其反向位列值为sc,滤波判决输出为“1”(或高电平)公式为:
28.s sc≥2^((n-1)/2) 2^n-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
29.(滤波窗口内的正向序列和其反向序列之和,大于或等于滤波判决输出为“1”最小镜像和,即可让滤波输出为
‘1’
)
30.在图1中滤波窗口为5,
‘1’
个数阈值设为3,则镜像和阈值s sc=“11100” “00111”=“100011”,
31.镜像和:“10011” “11001”=“101100”≥“100011”32.大于或等于镜像和阈值则输出
‘1’
,否则滤波输出
‘0’

33.当公式(4)满足时,说明滤波窗口内位列中
‘1’
的个数至少大于n/2。当位列长度n为偶数时,位列正中的两个位n/2-1与n/2均不在x《n/2-1、xc》n/2的范围之内,此时
‘1’
在这两个位之间移动都没有公式(3)的规律,故只有增加
‘1’
的个数,让
‘1’
沿着x《n/2-1、xc》n/2则镜像和偏大的规律,移至x《n/2-1、xc》n/2范围之外从而减小镜像和,填满第n/2-1和n/2位。此时偶数位列中
‘1’
的个数需要达到至少(n/2 1)个
‘1’
才能填满第n/2-1和n/2位,达到公式(3)能使用的条件。同理可得奇数位列所需的
‘1’
的个数为至少n/2个,才能达到公式(3)能使用的条件。
34.如果将滤波设定为滤波窗口长度为5,且窗口内
‘1’
的个数超过四个则滤波才输出
‘1’
,则根据上述推导,位列“11110”与其反向位列“01111”之和为滤波判决输出
‘1’
的最小镜像和。
35.经过化简的二值序列滤波,只需将滤波窗口内的位列值与其反向位列值相加,再判断相加的和与某特定值的大小,即可决定滤波的输出值,一次滤波的计算只执行了一次加法,与(n-1)次相比已大大优化节省了很多处理时间(n为滤波窗口长度)。
36.对于二值图像,以腐蚀为例:如果通过腐蚀的核窗口的条件是核窗口全为
‘1’
,则可以对核窗口内每行的序列进行统一一次判断是否是全为一的序列“111
……
111”,当核窗口内每行的序列都是“111
……
111”时,则该像素位置点可以通过腐蚀核。这样省去了在核窗口内每行中逐列判断二值是否为
‘1’
的步骤。
37.将二值序列的化简加速原理拓展应用至二值图像,如果通过腐蚀核的条件是核窗
口内
‘1’
的数量大于m,则将核窗口内所有行的序列l1、l2、
……
ln合并为一个长序列l1l2
……
ln,转换为对该长序列内
‘1’
的数量是否大于m的判断。根据二值序列的化简加速公式可得,当该长序列的二进制值与其反向序列之和大于“111
……
000”(有m个
‘1’
在高位)与“000
……
111”(有m个
‘1’
在低位)之和时,等价于长序列中
‘1’
的个数超过m,即腐蚀核窗口内的
‘1’
的个数超过的设定的判决值m,此时腐蚀核的输出为
‘1’
(如果长序列长度lm为偶数,则m必须大于或等于(lm/2 1),如果长序列长度lm为奇数,则m必须大于lm/2)。
38.假设腐蚀或膨胀核窗口滤波函数的定义为:至少有m个
‘1’
,则输出图像中核窗口中心位置值为
‘1’
。当m比核窗口总像素的一半大时,核函数为腐蚀核函数,腐蚀的程度随m增大而增大;当m比核窗口总像素的一半小时,核函数为膨胀核函数,膨胀程度随m减小而增大。
39.一般腐蚀核的大小不会超过8*8=64,故在上述化简加速中,整个腐蚀核的合并序列长度一般不会超过长整型ulong的长度64位。在一些高级编程语言,比如python中,整型的长度没有限制,完全取决于内存的剩余空间,故此时化简加速中的腐蚀核的大小没有限制。
40.本发明的加速计算,将二值图像的形态学运算中的
‘1’
值数量统计,化简为序列值与其反向序列值相加得镜像和,并通过判断该镜像和是否超过预定的阈值而确定
‘1’
值数量是否达到腐蚀核输出
‘1’
的条件。省去了对腐蚀核内逐个像素二值的累加或判断。
41.本发明加速处理的过程:
42.将二值图像的每一行都打包为无符号整型八位数组中的位,此数组作为正向数组0,反向打包二值图像的每一行为反向数组0。如果腐蚀核窗口的大小为8*8,则将二值图像的左边第一列数据移出图像,再将该图像打包得正向数组1,反向打包得反向数组1,正向数组1为正向数组0左移一列位的数组,以此类推得正向数组2、3、4、5、6和反向数组2、3、4、5、6。
43.假设腐蚀核窗口设定为核窗口内
‘1’
的个数大于等于33时,腐蚀核窗口输出结果才为
‘1’
,则镜像和阈值s sc=“111
……
000”(64位,33个
‘1’
在高位) “000
……
111”(64位,33个
‘1’
在低位)=18446744080152002559(十进制)。
44.将腐蚀核窗口的第一次处理的数据(正向数组0的第一列8位整数的前八行,反向数组0的第一列8位整数的前八行)把正向的八个无符号整型数连接为一个64位长序列:
45.lp=l0 l1*8 l2*(8^2) l3*(8^3) l4*(8^4)
……
l7*(8^7)(可使用点乘实现),和反向的八个无符号整型数连接的长序列ln相加得镜像和,与镜像和阈值对比,如果lp ln大于或等于镜像和阈值,则腐蚀核窗口输出结果为
‘1’
,否则为0。
46.在图2中序列长度为9的,
‘1’
个数阈值设为5,
47.则镜像和阈值s sc=“111110000” “000011111”=“1000001111”48.镜像和:
[0049]“100011011” “110110001”=“1011001100”≥“1000001111”[0050]
大于或等于镜像和阈值,输出图像中当前腐蚀核中心位置的二值为
‘1’
,否则为
‘0’

[0051]
此时即完成了腐蚀核的第一次处理,输出了结果图像的第一个像素二值。接着使用正向数组1和反向数组1完成该段上述的连接、相加、大小判断的操作,即相当于腐蚀核窗
口往右移了一格,腐蚀核输出的结果即为结果图像的该行第二列二值数据。以此类推按顺序处理正向、反向数组2、3、4、5、6的第一列前八行数据,腐蚀核窗口按顺序输出了该行第3、4、5、6、7列二值数据。之后用同样的操作顺序处理正向、反向数组0、1、2、3、4、5、6的第二列前八行数据,得到该行第8、9、10、11、12、13、14、15列的二值数据。如此轮循地将整个正向、反向数组0、1、2、3、4、5、6处理完,即完成了整个二值图像的腐蚀处理。
[0052]
其他二值图像形态学操作的处理方式,与上述的加速处理方式接近。
[0053]
尽管已经示出和描述了本发明的实施例,但需要强调的是:以上描述仅是本发明实施例的使用方式的介绍和描述,并非对本发明作任何形式上的限制。对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献