本发明涉及图像处理领域,具体地,涉及一种机器视觉系统中起止编码加速点云形态学运算系统及方法。
背景技术:
1、绝大多数行程编码算法是针对二值图像的,适用于点云数据的算法极少。与其他专利相比,本专利首要区别在于其接受的数据格式为点云而非图像。
2、申请号为cn201611262646.2的发明专利,公开了“基于行程编码的快速区域膨胀算法及装置”,申请号为cn201611018601.0的发明专利,公开了“基于行程编码的任意结构元的快速区域膨胀算法及装置”。前述专利中区域膨胀算法与本案部分相似,均为分为两步骤,步骤一修改行程起止编码实现行列内膨胀,步骤二为行列间逻辑“或”运算实现行列间膨胀。然而前述专利仅公开了以起止编码加速步骤一的内容,不包含以起止编码加速步骤二的内容,而步骤二对算法复杂度的影响也同样重要。在前述专利文中承认,不进行起止编码加速,对m×n个像素点逐点运算的复杂度为o(mn),而只有通过起止编码加速后运算复杂度才会降低至o(3rarb),仅仅根据前述专利公开的内容不解决步骤二的加速问题,是无法实现其宣称的运算加速效果的。本专利公开内容中包含了起止编码加速步骤二的方法,既包括通过起止编码比较实现两个行程的逻辑“或”运算内容(参见行程“或”运算子模块),也包括通过遍历行列内全部行程起止编码加速实现两行或两列逻辑“或”运算的内容(参见行列“或”运算子模块),弥补了前述专利在此方面的空缺。
3、申请号为cn201611264813.7的发明专利,公开了“基于行程编码的快速区域腐蚀算法及装置”,申请号为cn201611033311.3的发明专利,公开了“基于行程编码的任意结构元的快速区域腐蚀算法及装置”。前述专利中区域腐蚀算法与本案部分相似,均为分为两步骤,步骤一修改行程起止编码实现行列内腐蚀,步骤二为行列间逻辑“与”运算实现行列间腐蚀。然而前述专利仅公开了以起止编码加速步骤一的内容,不包含以起止编码加速步骤二的内容,而步骤二对算法复杂度的影响也同样重要。在前述专利文中承认,不进行起止编码加速,对m×n个像素点逐点运算的复杂度为o(mn),而只有通过起止编码加速后运算复杂度才会降低至o(3rarb),仅仅根据前述专利公开的内容不解决步骤二的加速问题,是无法实现其宣称的运算加速效果的。本专利公开内容中包含了起止编码加速步骤二的方法,既包括通过起止编码比较实现两个行程的逻辑“与”运算内容(参见行程“与”运算子模块),也包括通过遍历行列内全部行程起止编码加速实现两行或两列逻辑“与”运算的内容(参见行列“与”运算子模块),弥补了前述专利在此方面的空缺。
技术实现思路
1、针对现有技术中的缺陷,本发明的目的是提供一种机器视觉系统中起止编码加速点云形态学运算系统及方法。
2、根据本发明提供的一种机器视觉系统中起止编码加速点云形态学运算系统,包括:
3、点云投影模块:接收点云数据,转化为二值图像输出至行程编码模块,接受二值图像的像素坐标,按照像素坐标对点云进行分组输出;
4、起止编码模块:接收来自点云投影模块的二值图像,进行遍历,还原二值图像中对应的像素行列坐标;
5、行程运算模块:接收行程的起止编码,输出运算结果;
6、行列运算模块:接受接收起止编码格式的行或列,计算并输出行列逻辑;
7、图像形态学运算模块:接收起止编码模块输出的二值图像的起止编码数据,通过调用行程运算模块和行列运算模块,完成图像形态学运算。
8、优选地,在所述点云投影模块中:
9、包括点云输入接口和坐标输入接口,所述点云输入接口接收视觉传感器采样获得点云数据,根据设定的分辨率构造由矩形单元组成的网格,将点云数据投影至网格中,并记录每个矩形单元的对应点,根据设定的阈值,将对应点数量大于阈值的矩形单元作为黑像素,对应点数量小于阈值的矩形单元作为白像素,将网格转化为二值图像输出至行程编码模块;坐标输入接口接受二值图像的像素坐标,查找网格内矩形单元的对应点,按照像素坐标对点云进行分组输出;
10、在所述起止编码模块中:
11、起止编码模块,包括起止编码接口和逆编码接口,所述起止编码接口接收来自点云投影模块的二值图像,根据选择按行或按列遍历,将一行或一列内连续的黑像素作为一个行程,记录每个行程的起点位置s和终点位置e,逐行或逐列将二值图像转化为由s和e组成的数据对输出,所述逆编码接口接收行起止编码数据对,还原为二值图像中对应的像素行列坐标。
12、优选地,在所述行程运算模块中:
13、行程运算模块,接收行程的起止编码,输出运算结果,包括膨胀运算、腐蚀运算、4邻接校验运算、8邻接校验运算、逻辑或运算和逻辑与运算;
14、行程膨胀子模块接受行程起止编码数据对s、e与宽度值w,将s-w作为起点位置,e+w作为终点位置,输出膨胀后的行程起止编码;
15、行程腐蚀子模块接受行程起止编码数据对s、e与宽度值w,比较s+w和e-w的数值,当s+w不大于e-w时输出以s+w作为起点,e-w作为终点的行程起止编码,否则输出空行程;
16、4邻接校验子模块接受两个行程的起止编码,以是或否输出两个行程的像素是否为4邻接相邻,将行程一的起止编码记为s1、e1,行程二的起止编码记为s2、e2,执行下述伪代码流程完成判断:
17、步骤x1:比较s1和s2,若s1>=s2执行步骤x2,否则执行步骤x3;
18、步骤x2:比较s1和e2,若s1<=e2,结果为是并结束流程,否则结果为否并结束流程;
19、步骤x3:比较e1和s2,若e1>=s2,结果为是并结束流程,否则结果为否并结束流程;
20、8邻接校验子模块接受两个行程的起止编码,以是或否输出两个行程的像素是否为8邻接相邻,将行程一的起止编码记为s1、e1,行程二的起止编码记为s2、e2,执行下述伪代码流程完成判断:
21、步骤y1:比较s1和s2-1,若s1>=s2-1执行步骤y2,否则执行步骤y3;
22、步骤y2:比较s1和e2+1,若s1<=e2+1,结果为是并结束流程,否则结果为否并结束流程;
23、步骤y3:比较e1+1和s2,若e1+1>=s2,结果为是并结束流程,否则结果为否并结束流程。
24、行程与运算子模块接收两个行程的起止编码,输出两个行程并集结果,调用4邻接校验子模块,如通过4邻接校验,则输出由较大的起点编号与较小的终点编码组成的新起止编码,否则抛出错误警告;
25、行程或运算子模块接收两个行程的起止编码,输出两个行程交集结果,调用8邻接校验子模块,如通过8邻接校验,则输出由较小的起点编号与较大的终点编码组成的新起止编码,否则抛出错误警告。
26、优选地,在所述行列运算模块中:
27、行列运算模块,接受接收起止编码格式的行或列,计算并输出行列逻辑或运算、行列逻辑与运算、行列逻辑非运算、行列膨胀和行列腐蚀;
28、行列或运算子模块的输入为起止编码格式的两行或两列,输出起止编码格式的行列并集结果;分别将两行或两列所包含的起止编码进行升序排列,记为a1和a2,设定三个布尔标识位boola1、boola2和boola3,并置初值为否,设定用于记录行程起点编号的整数变量sa并置初值为0,准备一个起止编码的空集a3用于存储运算结果,按照下述伪代码流程完成运算:
29、步骤z1:比较a1和a2的当前值,若a1当前值较小则执行步骤z2,若a2当前值较小则执行步骤z8;
30、步骤z2:boola1置反,并计算boola1逻辑或boola2结果,为是执行步骤z3,为否执行步骤z5;
31、步骤z3:若boola3为否,则令sa等于a1当前值;
32、步骤z4:boola3置为是,执行步骤z7;
33、步骤z5:若boola3为是,则向a3中添加以sa为起点,a1当前值为终点的行程;
34、步骤z6:boola3置为否;
35、步骤z7:若a1迭代至末尾,执行步骤z14,否则a1取下一个数值并返回步骤z1;
36、步骤z8:boola2置反,并计算boola1逻辑或boola2结果,为是执行步骤z9,为否执行步骤z11;
37、步骤z9:若boola3为否,则令sa等于a2当前值;
38、步骤z10:boola3置为是,执行步骤z13;
39、步骤z11:若boola3为是,则向a3中添加以sa为起点,a2当前值为终点的行程;
40、步骤z12:boola3置为否;
41、步骤z13:若a2迭代至末尾,执行步骤z14,否则a2取下一个数值并返回步骤z1;
42、步骤z14:将a1或a2中的剩余起止编码添加至a3中;
43、步骤z15:将a3所包含的行程做为行列逻辑或运算结果输出;
44、行列与运算子模块的输入为起止编码格式的两行或两列,输出起止编码格式的行列交集结果,分别将两行或两列所包含的起止编码进行升序排列,记为b1和b2,设定三个布尔标识位boolb1、boolb2和boolb3,并置初值为否,设定用于记录行程起点编号的整数变量sb并置初值为0,准备一个起止编码的空集b3用于存储运算结果,按照下述伪代码流程完成运算:
45、步骤f1:比较b1和b2的当前值,若b1当前值较小则执行步骤f2,若b2当前值较小则执行步骤f8;
46、步骤f2:boolb1置反,并计算boolb1逻辑与boolb2结果,为是执行步骤f3,为否执行步骤f5;
47、步骤f3:若boolb3为否,则令sb等于b1当前值;
48、步骤f4:boolb3置为是,执行步骤f7;
49、步骤f5:若boolb3为是,则向b3中添加以sb为起点,b1当前值为终点的行程;
50、步骤f6:boolb3置为否;
51、步骤f7:若b1迭代至末尾,执行步骤f14,否则b1取下一个数值并返回步骤f1;
52、步骤f8:boolb2置反,并计算boolb1逻辑与boolb2结果,为是执行步骤f9,为否执行步骤f11;
53、步骤f9:若boolb3为否,则令sb等于b2当前值;
54、步骤f10:boolb3置为是,执行步骤f13;
55、步骤f11:若boolb3为是,则向b3中添加以sb为起点,b2当前值为终点的行程;
56、步骤f12:boolb3置为否;
57、步骤f13:若b2迭代至末尾,执行步骤f14,否则b2取下一个数值并返回步骤f1;
58、步骤f14:将b1或b2中的剩余起止编码添加至b3中;
59、步骤f15:将b3所包含的行程做为行列逻辑与运算结果输出;
60、行列非运算子模块接收起止编码格式的行或列,输出起止编码格式的行列补集结果,准备一个起止编码的空集c1,将行或列所包含的起止编码进行升序排列c2,检查c2的首个数值是否为0,若为0则从c2的第二个数值开始遍历,否则在c2的首位插入数值0并开始遍历,每次遍历从c2中取出两个数值,第一个记为sc,为前一个行程的终点位置,第二个记为ec,为后一个行程的起点位置,向c1中添加以sc为起点,ec为终点的行程,直至c2遍历完毕,将c1所包含的成员作为逻辑非运算结果输出;
61、行列膨胀子模块接收起止编码格式的行或列,以及宽度值w,计算膨胀运算后的结果,并按起止编码格式输出,逐个遍历行或列所包含的行程,调用行程膨胀子模块逐个膨胀后保存至暂存集合d1,按照升序或降序遍历d1行程,调用8邻接校验子模块对前一行程与后一行程进行8邻接校验,无邻接的行程直接保存至结果集合d2,相互为8邻接的行程执行或运算后保存至d2,将d2所包含的成员作为行列膨胀计算结果输出;
62、行列腐蚀子模块接收起止编码格式的行或列,以及宽度值w,计算腐蚀运算后的结果,并按起止编码格式输出,逐个遍历行或列所包含的行程,调用行程腐蚀子模块逐个腐蚀后保存至暂存集合e,遍历e检查行程长度,长度为负的行程舍去,将e所包含的成员作为行列腐蚀计算结果输出。
63、优选地,在所述图像形态学运算模块中:
64、图像形态学运算模块,接收起止编码模块输出的二值图像的起止编码数据,通过调用行程运算模块和行列运算模块,完成图像形态学运算并输出起止编码格式结果,图像形态学运算模块和点云投影模块、起止编码模块配合使用,实现点云的形态学运算效果;
65、图像膨胀子模块接受起止编码格式的二值图像和宽度值w,按照如下伪代码所述流程实现图像膨胀的加速算法:
66、起止编码格式的二值图像f,由n行或n列组成,第i行或第i列的数据记作fi;
67、遍历fi,调用行列膨胀子模块对fi进行宽度为w的膨胀操作,膨胀结果记为gi,存入集合g中;
68、遍历gi,调用行列或运算子模块,计算从gi到gi+w的逻辑或运算结果,记为hi,存入集合h中;
69、集合h作为起止编码格式的膨胀后图像输出;
70、图像腐蚀子模块接受起止编码格式的二值图像和宽度值w,按照如下伪代码所述流程实现图像腐蚀的加速算法:
71、起止编码格式的二值图像i,由n行或n列组成,第i行或第i列的数据记作ii;
72、遍历ii,调用行列腐蚀子模块对ii进行宽度为w的腐蚀操作,腐蚀结果记为ji,存入集合j中;
73、遍历ji,调用行列与运算子模块,计算从ji到ji+w的逻辑与运算结果,记为ki,存入集合k中;
74、集合k作为起止编码格式的腐蚀后图像输出;
75、图像开运算子模块接受起止编码格式的二值图像l和宽度值w,按照如下伪代码所述流程实现图像开运算:
76、将l和w输入图像腐蚀子模块获得结果m;
77、将m和w输入图像膨胀子模块获得结果n,输出n;
78、用户通过调用图像开运算子模块,剔除点云中的离群点、光滑毛刺,实现光滑去噪的效果;
79、图像闭运算子模块接受起止编码格式的二值图像o和宽度值w,按照如下伪代码所述流程实现图像闭运算:
80、将o和w输入图像膨胀子模块获得结果p;
81、将p和w输入图像腐蚀子模块获得结果q,输出q;
82、用户通过调用图像闭运算子模块,消除点云中的空洞,实现缺陷平滑修复的效果;
83、图像顶帽子模块接受起止编码格式的二值图像r和宽度值w,按照下述伪代码流程完成运算:
84、起止编码格式的二值图像r,由n行或n列组成,第i行或第i列的数据记作ri;
85、将r和w输入图像开运算子模块,获得行或列组成的结果s,第i行或第i列的数据记作si;
86、遍历si,输入行列非运算子模块,结果为ti,存入集合t中;
87、遍历ri和ti,输入行列与运算子模块,结果为ui,存入集合u中;
88、集合u作为起止编码格式的顶帽运算图像输出;
89、用户通过调用图像顶帽子模块,筛选点云中的细小突起,实现细小目标与大块背景分离的效果;
90、图像黑帽子模块接受起止编码格式的二值图像v和宽度值w,按照下述伪代码流程完成运算:
91、起止编码格式的二值图像v,由n行或n列组成,第i行或第i列的数据记作vi;
92、将v和w输入图像闭运算子模块,获得行或列组成的结果w,第i行或第i列的数据记作wi;
93、遍历vi,输入行列非运算子模块,结果为xi,存入集合x中;
94、遍历wi和xi,输入行列“与”运算子模块,结果为yi,存入集合y中;
95、集合y作为起止编码格式的黑帽运算图像输出;
96、用户通过调用图像黑帽子模块,筛选点云中的细小空洞,实现螺孔、缝隙等孔隙特征的抓取。
97、根据本发明提供的一种机器视觉系统中起止编码加速点云形态学运算方法,包括:
98、步骤m1:点云投影模块接收点云数据,转化为二值图像输出至行程编码模块,接受二值图像的像素坐标,按照像素坐标对点云进行分组输出;
99、步骤m2:起止编码模块接收来自点云投影模块的二值图像,进行遍历,还原二值图像中对应的像素行列坐标;
100、步骤m3:行程运算模块接收行程的起止编码,输出运算结果;
101、步骤m4:行列运算模块接受接收起止编码格式的行或列,计算并输出行列逻辑;
102、步骤m5:图像形态学运算模块接收起止编码模块输出的二值图像的起止编码数据,通过调用行程运算模块和行列运算模块,完成图像形态学运算。
103、优选地,在所述点云投影模块中:
104、包括点云输入接口和坐标输入接口,所述点云输入接口接收视觉传感器采样获得点云数据,根据设定的分辨率构造由矩形单元组成的网格,将点云数据投影至网格中,并记录每个矩形单元的对应点,根据设定的阈值,将对应点数量大于阈值的矩形单元作为黑像素,对应点数量小于阈值的矩形单元作为白像素,将网格转化为二值图像输出至行程编码模块;坐标输入接口接受二值图像的像素坐标,查找网格内矩形单元的对应点,按照像素坐标对点云进行分组输出;
105、在所述起止编码模块中:
106、起止编码模块,包括起止编码接口和逆编码接口,所述起止编码接口接收来自点云投影模块的二值图像,根据选择按行或按列遍历,将一行或一列内连续的黑像素作为一个行程,记录每个行程的起点位置s和终点位置e,逐行或逐列将二值图像转化为由s和e组成的数据对输出,所述逆编码接口接收行起止编码数据对,还原为二值图像中对应的像素行列坐标。
107、优选地,在所述行程运算模块中:
108、行程运算模块,接收行程的起止编码,输出运算结果,包括膨胀运算、腐蚀运算、4邻接校验运算、8邻接校验运算、逻辑或运算和逻辑与运算;
109、行程膨胀子模块接受行程起止编码数据对s、e与宽度值w,将s-w作为起点位置,e+w作为终点位置,输出膨胀后的行程起止编码;
110、行程腐蚀子模块接受行程起止编码数据对s、e与宽度值w,比较s+w和e-w的数值,当s+w不大于e-w时输出以s+w作为起点,e-w作为终点的行程起止编码,否则输出空行程;
111、4邻接校验子模块接受两个行程的起止编码,以是或否输出两个行程的像素是否为4邻接相邻,将行程一的起止编码记为s1、e1,行程二的起止编码记为s2、e2,执行下述伪代码流程完成判断:
112、步骤x1:比较s1和s2,若s1>=s2执行步骤x2,否则执行步骤x3;
113、步骤x2:比较s1和e2,若s1<=e2,结果为是并结束流程,否则结果为否并结束流程;
114、步骤x3:比较e1和s2,若e1>=s2,结果为是并结束流程,否则结果为否并结束流程;
115、8邻接校验子模块接受两个行程的起止编码,以是或否输出两个行程的像素是否为8邻接相邻,将行程一的起止编码记为s1、e1,行程二的起止编码记为s2、e2,执行下述伪代码流程完成判断:
116、步骤y1:比较s1和s2-1,若s1>=s2-1执行步骤y2,否则执行步骤y3;
117、步骤y2:比较s1和e2+1,若s1<=e2+1,结果为是并结束流程,否则结果为否并结束流程;
118、步骤y3:比较e1+1和s2,若e1+1>=s2,结果为是并结束流程,否则结果为否并结束流程。
119、行程与运算子模块接收两个行程的起止编码,输出两个行程并集结果,调用4邻接校验子模块,如通过4邻接校验,则输出由较大的起点编号与较小的终点编码组成的新起止编码,否则抛出错误警告;
120、行程或运算子模块接收两个行程的起止编码,输出两个行程交集结果,调用8邻接校验子模块,如通过8邻接校验,则输出由较小的起点编号与较大的终点编码组成的新起止编码,否则抛出错误警告。
121、优选地,在所述行列运算模块中:
122、行列运算模块,接受接收起止编码格式的行或列,计算并输出行列逻辑或运算、行列逻辑与运算、行列逻辑非运算、行列膨胀和行列腐蚀;
123、行列或运算子模块的输入为起止编码格式的两行或两列,输出起止编码格式的行列并集结果;分别将两行或两列所包含的起止编码进行升序排列,记为a1和a2,设定三个布尔标识位boola1、boola2和boola3,并置初值为否,设定用于记录行程起点编号的整数变量sa并置初值为0,准备一个起止编码的空集a3用于存储运算结果,按照下述伪代码流程完成运算:
124、步骤z1:比较a1和a2的当前值,若a1当前值较小则执行步骤z2,若a2当前值较小则执行步骤z8;
125、步骤z2:boola1置反,并计算boola1逻辑或boola2结果,为是执行步骤z3,为否执行步骤z5;
126、步骤z3:若boola3为否,则令sa等于a1当前值;
127、步骤z4:boola3置为是,执行步骤z7;
128、步骤z5:若boola3为是,则向a3中添加以sa为起点,a1当前值为终点的行程;
129、步骤z6:boola3置为否;
130、步骤z7:若a1迭代至末尾,执行步骤z14,否则a1取下一个数值并返回步骤z1;
131、步骤z8:boola2置反,并计算boola1逻辑或boola2结果,为是执行步骤z9,为否执行步骤z11;
132、步骤z9:若boola3为否,则令sa等于a2当前值;
133、步骤z10:boola3置为是,执行步骤z13;
134、步骤z11:若boola3为是,则向a3中添加以sa为起点,a2当前值为终点的行程;
135、步骤z12:boola3置为否;
136、步骤z13:若a2迭代至末尾,执行步骤z14,否则a2取下一个数值并返回步骤z1;
137、步骤z14:将a1或a2中的剩余起止编码添加至a3中;
138、步骤z15:将a3所包含的行程做为行列逻辑或运算结果输出;
139、行列与运算子模块的输入为起止编码格式的两行或两列,输出起止编码格式的行列交集结果,分别将两行或两列所包含的起止编码进行升序排列,记为b1和b2,设定三个布尔标识位boolb1、boolb2和boolb3,并置初值为否,设定用于记录行程起点编号的整数变量sb并置初值为0,准备一个起止编码的空集b3用于存储运算结果,按照下述伪代码流程完成运算:
140、步骤f1:比较b1和b2的当前值,若b1当前值较小则执行步骤f2,若b2当前值较小则执行步骤f8;
141、步骤f2:boolb1置反,并计算boolb1逻辑与boolb2结果,为是执行步骤f3,为否执行步骤f5;
142、步骤f3:若boolb3为否,则令sb等于b1当前值;
143、步骤f4:boolb3置为是,执行步骤f7;
144、步骤f5:若boolb3为是,则向b3中添加以sb为起点,b1当前值为终点的行程;
145、步骤f6:boolb3置为否;
146、步骤f7:若b1迭代至末尾,执行步骤f14,否则b1取下一个数值并返回步骤f1;
147、步骤f8:boolb2置反,并计算boolb1逻辑与boolb2结果,为是执行步骤f9,为否执行步骤f11;
148、步骤f9:若boolb3为否,则令sb等于b2当前值;
149、步骤f10:boolb3置为是,执行步骤f13;
150、步骤f11:若boolb3为是,则向b3中添加以sb为起点,b2当前值为终点的行程;
151、步骤f12:boolb3置为否;
152、步骤f13:若b2迭代至末尾,执行步骤f14,否则b2取下一个数值并返回步骤f1;
153、步骤f14:将b1或b2中的剩余起止编码添加至b3中;
154、步骤f15:将b3所包含的行程做为行列逻辑与运算结果输出;
155、行列非运算子模块接收起止编码格式的行或列,输出起止编码格式的行列补集结果,准备一个起止编码的空集c1,将行或列所包含的起止编码进行升序排列c2,检查c2的首个数值是否为0,若为0则从c2的第二个数值开始遍历,否则在c2的首位插入数值0并开始遍历,每次遍历从c2中取出两个数值,第一个记为sc,为前一个行程的终点位置,第二个记为ec,为后一个行程的起点位置,向c1中添加以sc为起点,ec为终点的行程,直至c2遍历完毕,将c1所包含的成员作为逻辑非运算结果输出;
156、行列膨胀子模块接收起止编码格式的行或列,以及宽度值w,计算膨胀运算后的结果,并按起止编码格式输出,逐个遍历行或列所包含的行程,调用行程膨胀子模块逐个膨胀后保存至暂存集合d1,按照升序或降序遍历d1行程,调用8邻接校验子模块对前一行程与后一行程进行8邻接校验,无邻接的行程直接保存至结果集合d2,相互为8邻接的行程执行或运算后保存至d2,将d2所包含的成员作为行列膨胀计算结果输出;
157、行列腐蚀子模块接收起止编码格式的行或列,以及宽度值w,计算腐蚀运算后的结果,并按起止编码格式输出,逐个遍历行或列所包含的行程,调用行程腐蚀子模块逐个腐蚀后保存至暂存集合e,遍历e检查行程长度,长度为负的行程舍去,将e所包含的成员作为行列腐蚀计算结果输出。
158、优选地,在所述图像形态学运算模块中:
159、图像形态学运算模块,接收起止编码模块输出的二值图像的起止编码数据,通过调用行程运算模块和行列运算模块,完成图像形态学运算并输出起止编码格式结果,图像形态学运算模块和点云投影模块、起止编码模块配合使用,实现点云的形态学运算效果;
160、图像膨胀子模块接受起止编码格式的二值图像和宽度值w,按照如下伪代码所述流程实现图像膨胀的加速算法:
161、起止编码格式的二值图像f,由n行或n列组成,第i行或第i列的数据记作fi;
162、遍历fi,调用行列膨胀子模块对fi进行宽度为w的膨胀操作,膨胀结果记为gi,存入集合g中;
163、遍历gi,调用行列或运算子模块,计算从gi到gi+w的逻辑或运算结果,记为hi,存入集合h中;
164、集合h作为起止编码格式的膨胀后图像输出;
165、图像腐蚀子模块接受起止编码格式的二值图像和宽度值w,按照如下伪代码所述流程实现图像腐蚀的加速算法:
166、起止编码格式的二值图像i,由n行或n列组成,第i行或第i列的数据记作ii;
167、遍历ii,调用行列腐蚀子模块对ii进行宽度为w的腐蚀操作,腐蚀结果记为ji,存入集合j中;
168、遍历ji,调用行列与运算子模块,计算从ji到ji+w的逻辑与运算结果,记为ki,存入集合k中;
169、集合k作为起止编码格式的腐蚀后图像输出;
170、图像开运算子模块接受起止编码格式的二值图像l和宽度值w,按照如下伪代码所述流程实现图像开运算:
171、将l和w输入图像腐蚀子模块获得结果m;
172、将m和w输入图像膨胀子模块获得结果n,输出n;
173、用户通过调用图像开运算子模块,剔除点云中的离群点、光滑毛刺,实现光滑去噪的效果;
174、图像闭运算子模块接受起止编码格式的二值图像o和宽度值w,按照如下伪代码所述流程实现图像闭运算:
175、将o和w输入图像膨胀子模块获得结果p;
176、将p和w输入图像腐蚀子模块获得结果q,输出q;
177、用户通过调用图像闭运算子模块,消除点云中的空洞,实现缺陷平滑修复的效果;
178、图像顶帽子模块接受起止编码格式的二值图像r和宽度值w,按照下述伪代码流程完成运算:
179、起止编码格式的二值图像r,由n行或n列组成,第i行或第i列的数据记作ri;
180、将r和w输入图像开运算子模块,获得行或列组成的结果s,第i行或第i列的数据记作si;
181、遍历si,输入行列非运算子模块,结果为ti,存入集合t中;
182、遍历ri和ti,输入行列与运算子模块,结果为ui,存入集合u中;
183、集合u作为起止编码格式的顶帽运算图像输出;
184、用户通过调用图像顶帽子模块,筛选点云中的细小突起,实现细小目标与大块背景分离的效果;
185、图像黑帽子模块接受起止编码格式的二值图像v和宽度值w,按照下述伪代码流程完成运算:
186、起止编码格式的二值图像v,由n行或n列组成,第i行或第i列的数据记作vi;
187、将v和w输入图像闭运算子模块,获得行或列组成的结果w,第i行或第i列的数据记作wi;
188、遍历vi,输入行列非运算子模块,结果为xi,存入集合x中;
189、遍历wi和xi,输入行列“与”运算子模块,结果为yi,存入集合y中;
190、集合y作为起止编码格式的黑帽运算图像输出;
191、用户通过调用图像黑帽子模块,筛选点云中的细小空洞,实现螺孔、缝隙等孔隙特征的抓取。
192、与现有技术相比,本发明具有如下的有益效果:
193、1、本发明通过将点云投影至矩形单元组成的网格,解决了点云数据无法进行图形运算的问题,并且可以根据像素坐标对点云进行分组。
194、2、本发明通过行程编码方法,将行列内的连续像素转化为起止编码格式,极大压缩了图像存储的数据量,行程运算模块解决了起止编码格式的六种基本形态学运算问题,规避了逐像素运算的问题,达到了提升计算效率的效果。
195、3、本发明行列运算模块解决了起止编码格式的整行或整列形态学运算问题,省去了其他方法中形态学运算涉及行列间行程的4邻接或8邻接判定计算,进一步提升了起止编码格式的计算效率。
196、4、本发明图像形态学模块配合点云投影模块、起止编码模块,解决了无序点云的形态学运算的问题,可以实现点云光滑去噪、缺陷平滑修复、细小目标与大块背景分离、孔隙特征的抓取的效果。