一种基于霍夫变换的自适应直线检测方法与流程

文档序号:27977282发布日期:2021-12-15 01:06阅读:220来源:国知局
一种基于霍夫变换的自适应直线检测方法与流程

1.本发明涉及一种直线检测方法,尤其是一种基于霍夫变换的自适应直线检测方法,属于图像处理检测技术领域。


背景技术:

2.航天等领域对设备零件的尺寸要求非常严格,常规用游标卡尺等量具人工手检的方式不仅速度慢,而且易受人为因素影响,已逐渐被光学测量设备取代,并且随着计算机视觉技术的不断发展和相机镜头等硬件精度的逐渐提高,使用计算机视觉进行光学测量的技术越来越受到人们的关注。
3.与已经得到普遍应用的图像识别、图像检测相比,图像测量对图像质量的要求更高,因为图像质量越高,特征定位就越准确,测量结果的精度就越高。对于大部分零件来说,直线是进行尺寸测量时最重要的定位特征。
4.霍夫变换是一种广泛应用在图像分析、计算机视觉以及数位影像处理的特征检测变换方法,可以用来辨别找出物件中的特征(例如:线条)。但是,由于图像的边缘信息通常不够理想,在使用霍夫变换检测零件边缘的特征直线时,得到的往往不是一条直线,而是距离很近的多条直线。如何将边缘处距离很近的多余直线消除掉,只保留定位信息最准确的那条,成为保证准确测量结果的关键。


技术实现要素:

5.本发明的目的在于:提出一种可以自适应地消除直线检测时多余直线干扰、得到所期望直线的基于霍夫变换的自适应检测方法,从而为保证光学测量结果的精准奠定基础。
6.为了达到上述目的,本发明基于霍夫变换的自适应检测方法包括以下步骤:
7.第一步、通过边缘检测获取待测工件的轮廓信息,并通过霍夫变换检出轮廓信息中的直线;将检出的直线按照斜率是否存在分为第一集合和第二集合,并分别将两集合里的直线按序编号;
8.第二步、在第一集合中的每条直线上取起点和终点;
9.第三步、将所述第一集合第一序号的直线起点纵截距与第一集合中其它序号直线对应该起点纵截距的差值作为矩阵的第1行元素;并以此类推,直至最后序号的直线起点纵截距与所述第一集合中其它序号直线对应该最后序号直线纵截距的差值作为矩阵的最后行元素,形成第一偏差矩阵;
10.将所述第一集合第一序号的直线终点纵坐标与第一集合中其它序号直线对应该终点纵坐标的差值作为矩阵的第1行元素;并以此类推,直至最后序号的直线终点纵坐标与所述第一集合中其它序号直线对应该最后序号直线纵坐标的差值作为矩阵的最后行元素,形成第二偏差矩阵;
11.第四步、分别将所述第一、第二偏差矩阵中所有元素取绝对值,然后求和得到总偏
差矩阵,并将总偏差矩阵中对角线元素设为大于自适应阈值的特定数;
12.第五步、设置自适应阈值并生成一个行列数与所述总偏差矩阵相同的全0矩阵;
13.第六步、将所述总偏差矩阵中的元素分别与所述自适应阈值比较,若小于自适应阈值,则将所述全0矩阵中对应该元素的位置记为“1”;并以所述全0矩阵第一个“1”的行列号为索引值,比较分别对应行号和列号的直线所经过的边缘点个数;之后从第一集合中删掉经过的边缘点个数较少的直线;再返回第三步;直至全0矩阵中的元素均为“0”;
14.第七步、分别以斜率存在和斜率不存在的直线数量作为相应的判断阈值,统计第一偏差矩阵余留的直线数量,若该直线数量大于判断阈值,则自适应阈值加1,返回第六步;若该直线数量小于判断阈值,则自适应阈值减一,返回第六步;若该直线数量等于判断阈值,则进行下一步;
15.第八步、用第二步至第七步类同的步骤对第二集合进行基于霍夫变换的自适应检测,直至统计第二偏差矩阵余留的直线数量等于相应的判断阈值。
16.本发明的基本技术方案实际上是采用霍夫变换的原理提取直线,并通过调整阈值来控制检测到的直线数量。如当前检测到的直线数量少于期望直线,会自适应减小阈值,使得被判定为同一直线的候选直线数量减少,有更多的直线会被保留,从而增加当前检测到的直线;如果当前检测到的直线数量多于期望直线,会自适应的增大阈值,使得被判定为同一直线的候选直线数量增加,有更多的直线会被删减,从而减少当前检测到的直线;这样不仅保证了后续自适应提取的实施,而且加快了获取直线的速度,最终达到一次性检测图片中所有直线的目的。总之,本发明可以很好地获取任意方向的直线,并自适应地将期望直线全部提取出来,从而为保证光学测量结果的精准奠定基础。
17.本发明进一步的优化是,所述第二步中,所述非零之外所选点的横坐标数值取大于矩阵的列数。
18.本发明更进一步的优化是,所述特定数取大于自适应阈值。
19.本发明再进一步的优化是,所述自适应阈值取1—10之间的自然数。
20.本发明还进一步的优化是,所述自适应阈值取5。
附图说明
21.下面结合附图对本发明作进一步的说明。
22.图1为本发明通过边缘检测获取待测工件的轮廓信息示意图。
23.图2为本发明实施例一待测工件使用霍夫变换检测到的直线示意图。
24.图3为为本发明实施例一待测工件最终检测到的直线示意图。
25.图4本发明实施例一中非竖直方向的自适应直线检测逻辑框图。
26.图5为本发明实施例一种竖直方向的自适应直线检测逻辑框图。
具体实施方式
27.实施例一
28.本实施例基于霍夫变换的自适应检测方法具体步骤(参见图4),包括如下具体步骤:
29.第一步、通过图1所示主要由图像采集模块、零件匹配模块、图像测量模块、前端显
示模块组成的测量系统,检测获取待测工件的轮廓信息,通过霍夫变换检出图2剖面线所示待测工件轮廓信息中的直线共17条,图中(3)、(5)分别为肉眼难以观察出的三条和五条十分邻近的直线。
30.将检出的直线按照斜率是否存在分为第一集合a和第二集合b,并分别将两集合里的直线按序编号如表1和表2;所谓当斜率存在时,截距为纵截距,即与y轴交点的纵坐标;当斜率不存在时,截距为横截距,即与x轴交点的横坐标:
31.表1集合a包含的直线
[0032][0033][0034]
表2集合b包含的直线
[0035]
序号斜率截距0不存在24451不存在3952不存在3963不存在22304不存在10135不存在397
[0036]
第二步、在第一集合中的每条直线上取起点(0,y0)和终点(col,y1),其中y0为该直线的纵截距、col和y1分别为该直线上横坐标非零之外所选点的横坐标100(虽然理论上该所选点横坐标非零即可,但显然离0越远越好,实际上取col大于矩阵的列数即可)和纵坐标;详见表3
[0037]
表3集合a中直线对应起点、终点
[0038][0039]
第三步、将第一集合第一序号的直线起点(0,y0)纵截距y0与第一集合中其它序号直线对应该起点纵截距y0的差值作为矩阵的第1行元素;并以此类推,直至最后序号第n
exi
条的直线起点纵截距与第一集合中其它序号直线对应该最后序号直线纵截距的差值作为矩阵的最后行第n
exi
行元素,形成表4的n
exi
×
n
exi
第一偏差矩阵m0;
[0040]
将第一集合第一序号的直线终点(col,y1)纵坐标y1与第一集合中其它序号直线对应该终点纵坐标的差值作为矩阵的第1行元素;并以此类推,直至最后序号第n
exi
条的直线终点纵坐标与第一集合中其它序号直线对应该最后序号直线纵坐标的差值作为矩阵的最后行第 n
exi
行元素,形成表5的n
exi
×
n
exi
第二偏差矩阵m1,其中n
exi
=11;
[0041]
具体计算为:第1条直线对应y1与所有集合中所有直线对应y1的差值作为该矩阵的第 1行元素
[0042]
y0=[1348,579,576,1347,577,2993,444,578,575,1483,

1076];
[0043]
y1=[1348,579,576,1347,577,2893,444,578,575,1483,

976];
[0044]
m0=y0‑
y0′
;m1=y1‑
y1′
;(m1=y1‑
y1的转置;m0=y0‑
y0′
的转置)
[0045]
m0的第一行1348

1348=0;579

1348=

769;576

1348=

772;1347

1348=

1; 577

1348=

771;2993

1348=1645;444

1348=

904;578

1348=

770;575

1348=

773; 1483

1348=135;

1076

1348=2424
[0046]
m1的第一行1348

1348=0;579

1348=

769;576

1348=

772;1347

1348=

1; 577

1348=

771;2893

1348=1545;444

1348=

904;578

1348=

770;575

1348=

773; 1483

1348=135;

976

1348=2324
[0047]
表4第一偏差矩阵m0[0048]0‑
769

772
‑1‑
7711645

904

770

773135

24247690

3768

22414

135
‑1‑
4904

16557723077112417

1322

1907

1652
1

768

7710

7701646

903

769

772136

24237712

177002416

1331

2906

1653

1645

2414

2417

1646

24160

2549

2415

2418

1510

4069904135132903133254901341311039

15207701

2769

12415

1340

3905

16547734177222418

13130908

1651

135

904

907

136

9061510

1039

905

9080

255924241655165224231653406915201654165125590
[0049]
表5第二偏差矩阵m1[0050][0051][0052]
第四步、分别将第一、第二偏差矩阵中所有元素取绝对值,然后求和得到表6的总偏差矩阵m=|m0|+|m1|,并将总偏差矩阵m中对角线元素设为大于自适应阈值的特定数 row=2000;理论上,row越大越好,但实际上只要row比自适应阈值t大即可。
[0053]
表6总偏差矩阵m
[0054]
20001538154421542319018081540154627047481538200061536447282702818083210154462000154224734264421814320421536154220001540319218061538154427247461542421540200047322662418123206319047284734319247322000499847304736292079381808270264180626649982000268262207829401540241538247302682000618103208154682154444736262620001816320227018081814272181229202078181018162000501847483210320447463206793829403208320250182000
[0055]
第五步、设置自适应阈值t,并生成一个行列数与总偏差矩阵相同的n
exi
×
n
exi
全0矩阵 f;t取1—10的自然数,测试发现t取5时可以在最短时间内检测出所有直线,所以本实施例t取5。
[0056]
第六步、将总偏差矩阵m中的元素分别与自适应阈值t比较,若小于自适应阈值t则
将全0矩阵f中对应该元素的位置记为“1(true)”;并以全0矩阵f第一个“1”的行列号为索引值(i,j),比较分别对应行号和列号的直线(第i条直线和第j条直线)所经过的边缘点个数;之后从第一偏差矩阵中删掉经过的边缘点个数较少的直线对应的行列;再返回第三步;直至全0矩阵中的元素均为“0(false)”。
[0057]
第一次迭代过程如表7、表8所示。
[0058]
表7
[0059]
falsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalsefalsetruefalsefalsetruetruefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsefalsefalsefalsetruetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsetruefalsefalsefalsefalsefalsefalsefalsefalsetruefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0060]
表8
[0061]
序号斜率截距0

05791

05762

013473

05774

129935

04446

05787

05758

0148391

1076
[0062]
之后更新n
exi
=n
exi

1=10,再次计算偏差矩阵m0、偏差矩阵m1、总偏差矩阵m和f,详见表9、表10、表11、表12
[0063]
表9
[0064]0‑
3768

22414

135
‑1‑
4904

16553077112417

1322

1907

1652

768

7710

7701646

903

769

772136

24232

177002416

1331

2906

1653

2414

2417

1646

24160

2549

2415

2418

1510

4069135132903133254901341311039

1520
1

2769

12415

1340

3905

16544177222418

13130908

1651

904

907

136

9061510

1039

905

9080

25591655165224231653406915201654165125590
[0065]
表10
[0066]0‑
3768

22314

135
‑1‑
4904

15553077112317

1322

1907

1552

768

7710

7701546

903

769

772136

23232

177002316

1331

2906

1553

2314

2317

1546

23160

2449

2315

2318

1410

3869135132903133244901341311039

14201

2769

12315

1340

3905

15544177222318

13130908

1551

904

907

136

9061410

1039

905

9080

24591555155223231553386914201554155124590
[0067]
表11
[0068]
2000615364472827028180832106200015422473426442181432041536154220001540319218061538154427247464215402000473226624181232064728473431924732200049984730473629207938270264180626649982000268262207829402415382473026820006181032088215444473626262000181632021808181427218122920207818101816200050183210320447463206793829403208320250182000
[0069]
表12 f
[0070]
falsefalsefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalsetruefalsefalsetruetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsefalsefalsefalsetruetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsetruefalsefalsefalsefalsefalsefalsefalsetruefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0071]
第一个“1”的索引值(0,3),即i=0,j=3,比较发现第3条经过的边缘点个数多,将
第0条直线在a中删掉。更新后的a如表13所示。
[0072]
表13
[0073][0074][0075]
更新n
exi
=n
exi

1=9,类推前述过程详见表14

表27
[0076]
表14
[0077]
077112417

1322

1907

1652

7710

7701646

903

769

772136

2423

177002416

1331

2906

1653

2417

1646

24160

2549

2415

2418

1510

4069132903133254901341311039

1520

2769

12415

1340

3905

1654177222418

13130908

1651

907

136

9061510

1039

905

9080

2559165224231653406915201654165125590
[0078]
表15
[0079]
077112317

1322

1907

1552

7710

7701546

903

769

772136

2323

177002316

1331

2906

1553

2317

1546

23160

2449

2315

2318

1410

3869132903133244901341311039

1420

2769

12315

1340

3905

1554177222318

13130908

1551

907

136

9061410

1039

905

9080

2459155223231553386914201554155124590
[0080]
表16
[0081]
200015422473426442181432041542200015403192180615381544272474621540200047322662418123206
47343192473220004998473047362920793826418062664998200026826220782940415382473026820006181032082154444736262620001816320218142721812292020781810181620005018320447463206793829403208320250182000
[0082]
表17 f
[0083][0084][0085]
表18
[0086]
序号斜率截距0

013471

05772

129933

04444

05785

05756

0148371

1076
[0087]
表19
[0088]0‑
7701646

903

769

772136

242377002416

1331

2906

1653

1646

24160

2549

2415

2418

1510

4069903133254901341311039

1520769

12415

1340

3905

165477222418

13130908

1651

136

9061510

1039

905

9080

255924231653406915201654165125590
[0089]
表20
[0090]0‑
7701546

903

769

772136

232377002316

1331

2906

1553

1546

23160

2449

2315

2318

1410

3869903133244901341311039

1420769

12315

1340

3905

155477222318

13130908

1551

136

9061410

1039

905

9080

245923231553386914201554155124590
[0091]
表21
[0092]
20001540319218061538154427247461540200047322662418123206319247322000499847304736292079381806266499820002682622078294015382473026820006181032081544447362626200018163202272181229202078181018162000501847463206793829403208320250182000
[0093]
表22 f
[0094]
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0095]
表23
[0096]
序号斜率截距0

013471

129932

04443

05784

05755

0148361

1076
[0097]
表24
[0098]
01646

903

769

772136

2423

16460

2549

2415

2418

1510

4069903254901341311039

15207692415

1340

3905

1654
7722418

13130908

1651

1361510

1039

905

9080

25592423406915201654165125590
[0099]
表25
[0100]
01546

903

769

772136

2323

15460

2449

2315

2318

1410

3869903244901341311039

14207692315

1340

3905

15547722318

13130908

1551

1361410

1039

905

9080

24592323386914201554155124590
[0101]
表26
[0102][0103][0104]
表27 f
[0105]
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0106]
此时f中元素均为0,完成第六步6。
[0107]
第七步、观察图像,以图像左上角为坐标原点向下为y轴正方向、向左为x轴正方向,分别统计斜率存在的直线数量和斜率不存在的直线数量作为相应的判断阈值n0;统计第一偏差矩阵a余留的直线数量,若num<n0则自适应阈值减一,返回第六步;若该直线数量 num>n0,则自适应阈值加1,返回第六步,本实施例此时a中直线数量num=7,n0=6,因 num>n0,故t=t+δt=6+1=7,返回第六步后,再次迭代具体情况如表29

表34所示;
[0108]
表29 f
[0109]
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalse
falsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0110]
第一个“1”的索引值(3,4),即i=3,j=4,比较发现第4条经过的边缘点个数多,将第3条直线在temp中删掉。更新后的temp如表30所示。
[0111]
表30
[0112]
序号斜率截距0

013471

129932

04443

05754

0148351

1076
[0113]
更新n
exi
=n
exi

1=6,再次计算偏差矩阵m0、偏差矩阵m1、总偏差矩阵m和f
[0114]
表31
[0115]
01646

903

772136

2423

16460

2549

2418

1510

4069903254901311039

15207722418

1310908

1651

1361510

1039

9080

2559242340691520165125590
[0116]
表32
[0117]
01546

903

772136

2323

15460

2449

2318

1410

3869903244901311039

14207722318

1310908

1551

1361410

1039

9080

2459232338691420155124590
[0118]
表33
[0119]
20003192180615442724746319220004998473629207938180649982000262207829401544473626220001816320227229202078181620005018474679382940320250182000
[0120]
表34 f
[0121]
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0122]
此时f中元素均为0,a中直线数量num=6,即n0=6,因num=n0,故完成此步,进行下一步。
[0123]
第八步、(参见图5)用第二步至第七步类同的步骤对第二集合b进行基于霍夫变换的自适应检测,直至统计第二偏差矩阵余留的直线数量的等于相应的判断阈值;具体过程如下
[0124]
观察表2可知n
exi
=6,取row=1000,由于对于集合b中的直线都是与x轴垂直的,所以只需根据横截距即可计算总偏差矩阵m,如表35所示
[0125]
表35
[0126]
1000205020492151432204820501000118356182204911000183461712151835183410001217183314326186171217100061620482118336161000
[0127]
初始化t=5,第一次迭代时f如表36所示。
[0128]
表36 f
[0129]
falsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsetruefalsetruefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsefalsefalse
[0130]
第一个“1”的索引值(1,2),即i=1,j=2,比较发现第1条经过的边缘点个数多,将第2条直线在temp中删掉。更新后的temp如表37所示。
[0131]
表37
[0132]
序号斜率截距0不存在24451不存在3952不存在22303不存在10134不存在397
[0133]
更新n
exi
=n
exi

1=5,再次计算总偏差矩阵m和f
[0134]
表38总偏差矩阵m
[0135]
1000205021514322048
205010001835618221518351000121718331432618121710006162048218336161000
[0136]
表39 f
[0137]
falsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsefalse
[0138]
第一个“1”的索引值(1,4),即i=1,j=4,比较发现第1条经过的边缘点个数多,将第4条直线在temp中删掉。更新后的temp如表40所示。
[0139]
表40
[0140]
序号斜率截距0不存在24451不存在3952不存在22303不存在1013
[0141]
更新n
exi
=n
exi

1=4,再次计算总偏差矩阵m和f
[0142]
表41总偏差矩阵m
[0143]
100020502151432205010001835618215183510001217143261812171000
[0144]
表42 f
[0145]
falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
[0146]
此时f中元素均为0,b中直线数量num=4,n0=4,因num=n0,结束。
[0147]
经过上述基于霍夫变换的自适应检测方法处理后,通过调整阈值自适应删减直线,最终使得实际获取的直线与期望的直线数量相等,从而完成期望直线的提取,待测工件最终检测到的直线如图3所示,为与待测工件轮廓贴合的十条,从而为得到光学测量的准确结果奠定了基础。
[0148]
除上述实施例外,本发明还可以有其他实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1