一种基于内存配置的霍夫变换控制方法、芯片及机器人与流程

文档序号:28326517发布日期:2022-01-05 01:01阅读:97来源:国知局
一种基于内存配置的霍夫变换控制方法、芯片及机器人与流程

1.本发明涉及计算内存管理的技术领域,具体涉及一种基于内存配置的霍夫变换控制方法、芯片及机器人。


背景技术:

2.直线的霍夫变换,是一项广泛应用于在二值图的基础上寻找直线的技术,但没有过多的考虑内存的存取方式,配置在计算机内存中的霍夫空间矩阵,将横坐标表示的意义设置为点线距,将纵坐标表示的意义设置为旋转角度。这样,基于霍夫变换中的三角函数关系式,一个点线距作为三角函数的结果时,反三角函数获得的角度中存在多个不同旋转角度,引起cpu在霍夫空间矩阵对应的内存中索引的纵轴坐标信息出现较大的内存地址变化,比如相邻两次索引出的内存地址需要跨越多行的内存段(内存区域),此时,一个索引步长所占用的地址量已经超过一般的嵌入式设备和移动式设备的缓存空间的承载量。
3.因此,霍夫空间转换过程中经常出现cpu读取/缓存失效的情况,虽然霍夫变换实际的运算量不大,但是由于频繁的缓存失效,仍导致整体计算速度非常缓慢,降低霍夫变换算法的性能。


技术实现要素:

4.为解决上述问题,本发明旨在合理布局用于直线变换的霍夫空间的内存空间,使得cpu或类似的主控单元能够多次命中缓存的数据,以减少cpu在缓存失败后从低速的内存中重复读取连续地址段处的数据的次数。本发明的具体技术方案如下:
5.一种基于内存配置的霍夫变换控制方法,该霍夫变换控制方法包括以下步骤:每当对预先获得的二值图的有效点执行预设迭代次数的角度迭代扫描,允许对应的点线距在预设参数映射空间内的纵坐标变化一次,以使得cpu依据所述预设参数映射空间的坐标信息来连续读取内存地址内的图像信息;其中,使用预设参数映射空间的横坐标表示直线的旋转角度,并将预设参数映射空间的横坐标配置为列地址;使用预设参数映射空间的纵坐标表示直线的点线距,并将预设参数映射空间的纵坐标配置为行地址;其中,预设参数映射空间是属于霍夫空间内的矩阵空间;霍夫空间是设置为一种内存空间。
6.与现有技术相比,该技术方案在将预设参数映射空间设计为横轴表示旋转角度、纵轴表示点线距的霍夫空间存储方式的基础上,在霍夫变换中依据一定的迭代步长对直线进行预设迭代次数的角度迭代扫描,以使得直线在对应连续变化的旋转角度所对应计算出的点线距的数值变化不大,减少出现cpu读取由旋转角度和点线距组成的地址处的图像信息时出现跨大内存段(比如跨多行地址段)的现象,使得cpu或类似的主控单元能够多次命中从连续的内存中缓存出的图像数据,提升二值图的霍夫变换的工作效率。
7.进一步地,所述每当对预先获得的二值图的有效点执行预设迭代次数的角度迭代扫描后,允许对应的点线距在预设参数映射空间内的纵坐标变化一次的方法,包括:步骤a、从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长去扫描一个有效点的旋转
角度;每当扫描同一个有效点的一个旋转角度的同时,计算经过该有效点的当前扫描到的旋转角度的直线的点线距,再按照预设点线距精度将该点线距处理为截距坐标,以确定为对该有效点执行一次角度迭代扫描,其中,截距坐标是对应点线距在预设参数映射空间内的纵坐标;步骤b、每当对同一个有效点执行角度迭代扫描的次数为所述预设迭代次数时,将最新迭代扫描到的旋转角度更新为初始旋转角度,再重复步骤a,以使得下一次执行的步骤a所获得的截距坐标相对于当前获得的截距坐标是不同的。
8.与现有技术相比,以所述预设单位迭代角度为步长迭代量,每进行所述预设迭代次数的角度迭代扫描的过程中,将顺序获得的每个点线距都转换为预设参数映射空间内相等的截距坐标,从而获得能够描述连续地址的索引坐标(旋转角度,截距坐标),以使得cpu依据所述预设参数映射空间的坐标值来读取连续的内存段内的图像信息至缓存空间中,避免每次迭代都引起霍夫空间中对应的纵坐标改变,cpu每次读取内存时都需要跳一个大的内存段(偏移多个整行的内存地址)。进而提升了高精度的直线霍夫空间中的命中概率,从而成倍的提升了直线霍夫变换结果的查找速度。
9.进一步地,在所述步骤a中,以所述预设单位迭代角度为迭代步长去扫描一个有效点的旋转角度的方法包括:在执行一个有效点的当前一次角度迭代扫描的过程中,将所述预设单位迭代角度加上上一次角度迭代扫描所扫描到的旋转角度,获得当前迭代扫描到的旋转角度;其中,在执行同一个有效点的下一次角度迭代扫描之前,先将当前一次角度迭代扫描所扫描到的旋转角度更新为上一次角度迭代扫描所扫描到的旋转角度。本技术方案使用旋转角度迭代转动的方式控制前述的角度迭代扫描,控制原始图像内的每个有效点能够在360度范围内迭代扫描对应旋转角度上的直线,较为全面地原始图像内待霍夫变换的直线。
10.进一步地,每个有效点执行角度迭代扫描的最大次数为360度与所述预设单位迭代角度的比值,用于设置为对应一个有效点在360度的旋转角度范围内允许执行所述角度迭代扫描的次数;所述霍夫变换控制方法还包括:步骤c、每当对同一个有效点执行角度迭代扫描的次数达到360度与所述预设单位迭代角度的比值时,开始对新的有效点重复执行所述步骤a至所述步骤b,直至完成所述二值图内的每个有效点在360度的旋转角度范围内的角度迭代扫描。
11.进一步地,所述预设参数映射空间内排列的坐标元素的行数是旋转角度相同但点线距不同的极坐标点的数目;所述预设参数映射空间内排列的坐标元素的列数是点线距相同但旋转角度不同的极坐标点的数目;经过二值图中的有效点的所有直线都支持被霍夫变换为霍夫空间内的极坐标点,其中,不同的极坐标点代表不同的直线,一个极坐标点上代表经过有效点的至少一条直线;其中,极坐标点包括旋转角度和点线距,旋转角度是极坐标点所代表的直线的法线与所属二值图的坐标系的横轴正方向所成的夹角,点线距是二值图的坐标系的原点到极坐标点所代表的直线的几何垂直距离。
12.在该技术方案的教导下,将一个有效点执行角度迭代扫描的次数与所述预设迭代次数的比值是设置为该有效点所需的霍夫空间内排列的坐标元素的最大行数,并将所述预设迭代次数设置为该有效点所需的霍夫空间内排列的坐标元素的最大列数,进而将前述的列数与前述的行数的乘积设置为允许cpu能够读取的有效地址的数量。
13.进一步地,所述按照预设点线距精度将该点线距处理为截距坐标的方法包括:按
照所述预设点线距精度限定的数量级,将一轮截距精度迭代扫描操作过程中所扫描到的每个旋转角度对应的点线距都换算为同一个截距坐标,以转换为所述预设参数映射空间内的同一数值的纵坐标,其中,所述截距坐标的数量级等于所述预设点线距精度限定的数量级;其中,从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长,每当计数到对同一个有效点执行角度迭代扫描的次数为所述预设迭代次数,则记为对同一个有效点执行一轮截距精度迭代扫描操作;其中,所述预设点线距精度配置为:每一轮截距精度迭代扫描操作对应计算出的点线距都处于对应的截距范围内,该截距范围的精度满足所述预设点线距精度;相邻两轮所述截距精度迭代扫描操作对应计算出数值不同的两种截距坐标。
14.该技术方案将符合同一个精度下的点线距都设置为同一截距坐标,从而在此基础上设定每改变一个截距坐标所需经过的迭代次数,即设置出所述预设迭代次数,建立起霍夫变换中的多个旋转角度与一个点线距的对应关系。该技术方案在应用到二值图的直线霍夫变换中,提高霍夫空间内存储的数据被cpu缓存的成功率,因为让cpu减少跨行读取的频率,所以对于缓存的需求较低,提高霍夫变换算法运行的效率。
15.进一步地,所述计算经过该有效点的当前扫描到的旋转角度的直线的点线距的方法包括:将当前一次角度迭代扫描所扫描到的旋转角度的余弦函数取值与参与当前一次角度迭代扫描的有效点的横坐标相乘,获得第一变换值;将当前一次角度迭代扫描所扫描到的旋转角度的正弦函数取值与参与当前一次角度迭代扫描的有效点的纵坐标相乘,获得第二变换值;然后将第一变换值与第二变换值相加,获得经过该有效点的当前扫描到的旋转角度上的直线的点线距;其中,当前一次角度迭代扫描所扫描到的旋转角度的余弦函数取值及正弦函数取值都是从预先配置的索引表中获得,索引表用于存储按照所述预设单位迭代角度所允许扫描的旋转角度对应的三角函数值。本技术方案采用查表的方式代替每次角度迭代扫描时的计算三角函数,提高获得截距坐标的速度,进一步提升直线转换霍夫空间的速度。
16.进一步地,所述霍夫变换控制方法还包括:将最新设置出的截距坐标及其对应的旋转角度配置为相应直线的图像信息的读地址,以使得二值图的图像信息被配置为由cpu按照所述预设参数映射空间内的坐标信息逐行地从相应的内存地址中读取出来;其中,读地址是属于霍夫空间的内存地址,在先后执行角度迭代扫描所设置出的读地址是连续的,以组成地址连续的内存空间;其中,所述预设参数映射空间内的坐标信息包括截距坐标及其对应的旋转角度。保证霍夫空间内建立的地址是连续地存储二值图按行存放的直线特征,以便于cpu在缓存图像信息时是从所述预设参数映射空间内连续读取得到,而不需跨地址段读取,减轻缓存的压力。
17.进一步地,所述霍夫变换控制方法还包括:将预设参数映射空间划分为多个分块矩阵空间,其中,划分出的相邻两个分块矩阵空间的内存地址是连续的;每个分块矩阵空间的坐标信息被配置为覆盖预设局部次数的所述角度迭代扫描所获得的截距坐标及其对应的旋转角度,以使得cpu至少索引到截距坐标不同的两组连续的读地址,其中,每一组连续的读地址是每计数到对同一个有效点执行所述预设迭代次数的所述角度迭代扫描而配置出的,相邻两组的读地址是连续的;所述预设局部次数是大于或等于所述预设迭代次数的两倍。
18.在前述技术方案的基础上,本技术方案采取分块存取的方式,控制发生变化的截
距坐标保留在同一个分块矩阵空间内,并配置同一个分块矩阵空间是支持存储连续的内存数据,相邻的两个分块矩阵空间之间是支持连续存储的,本技术方案设置的一个分块矩阵空间的内存大小满足cpu缓存下至少两组由所述预设迭代次数的角度迭代扫描而获得霍夫空间的坐标信息对应的连续内存区域存储的数据,显著减少cpu跨大内存存取的频率。
19.进一步地,cpu被配置为支持并行计算经过有效点的被先后扫描到的预设并行数量的旋转角度的直线的点线距;其中,cpu的内部设置有预设并行数量的计算单元,每一个计算单元用于计算经过有效点的被扫描到的旋转角度的直线的点线距。该技术方案把计算霍夫空间坐标的速度提升预设并行数量倍,平衡cpu从内存(霍夫空间内构建的内存空间)中缓存数据的时间,提升整体的变换速度。
20.一种芯片,该芯片用于存储所述霍夫变换控制方法对应的程序代码。该程序代码用于控制芯片执行所述霍夫变换控制方法,使得该芯片作为内存控制芯片配合cpu访问内存空间,以减少cpu缓存所述预设参数映射空间的数据失败的概率,并有效的解决了嵌入式平台处理速度缓慢、内存资源有限的局限性问题,为机器人的图像识别定位提供解决方案。
21.一种机器人,该机器人装配所述的芯片。所述机器人还安装激光传感器或视觉传感器,用于从采集的图像中获取有效点,再利用霍夫变换提取出经过有效点的直线的特征。本技术方案一方面降低了算法对主控内存的需求,提高了算法效率;另一方面改进了算法对实时采集的图像中的直线检测的效率。
附图说明
22.图1为本发明一种实施例公开一种基于内存配置的霍夫变换控制方法的流程图。
23.图2为本发明另一种实施例公开一种基于内存配置的霍夫变换控制方法的流程图。
24.图3为本发明又一种实施例公开一种基于内存配置的霍夫变换控制方法的流程图。
具体实施方式
25.为了使本技术的目的、技术方案及优点更加清楚明白,一下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
26.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中,在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其他实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地或隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
27.霍夫变换,可以作为一项在二值图的基础上搜寻(检测)直线的技术,待搜寻的直线在霍夫空间内使用数学上的直线方程的极坐标表示,将可能经过有效点的所有直线的一般直线方程转换为含有极坐标的点线距(极坐标参数)和旋转角度(极坐标参数)的极坐标式(直线表示型式),再根据点线距和旋转角度对应的位置存到使用极坐标表示的霍夫空间
中。需要说明的是,直线方程形式有截距式、斜截式、一般式、点斜式等,但是这些形式都有“奇异”情况,其中一个截距为0,斜率为0;另外某些形式的参数空间不是闭的,比如斜截式的斜率k,取值范围从0到无穷大。
28.值的注意的是,霍夫变换之所以能处理任意形状的图形并不是找到了可以表示任意图形的方程,而是使用表的形式描述一种图形,把图形边缘点坐标保存在一张表中,那么该图形就确定下来了,所以其实无论是直线(其实是线段)、圆、椭圆还是其他形状的几何图形,都可以使用同一方法处理。
29.作为一种实施例,公开一种基于内存配置的霍夫变换控制方法,该霍夫变换控制方法适用于将经过图像中的像素点(一个像素坐标)的直线霍夫变换到本实施例设定的霍夫空间并存储起来,以便于cpu从霍夫空间内获取该直线的图像信息;如图1所示,该霍夫变换控制方法包括以下步骤:
30.步骤s1、使用预设参数映射空间的横坐标表示直线的旋转角度,并将预设参数映射空间的横坐标配置为列地址;同时,使用预设参数映射空间的纵坐标表示直线的点线距,并将预设参数映射空间的纵坐标配置为行地址;在本实施例中,预设参数映射空间是属于霍夫空间内的矩阵空间;霍夫空间是设置为一种内存空间,因而预设参数映射空间的横坐标配置为相应内存空间的列地址,可以用于表示相应列序号的地址段;预设参数映射空间的纵坐标配置为相应内存空间的行地址,可以用于表示相应行序号的地址段;直线的旋转角度θ及点线距ρ组成一个具体的内存地址,该内存地址具体是预设参数映射空间的第ρ行的第θ列的位置。优选地,预设参数映射空间是从霍夫空间内分割出具备预设行数和预设的矩阵空间,能够配置出经过二值图的有效点的所有直线霍夫变换出的极坐标点,以加快cpu读取经过有效点的直线的效率。
31.需要说明的是,用霍夫空间表示的是所有经过有效点的直线的极坐标式中的点线距(极坐标参数)和旋转角度(极坐标参数)转换到矩阵空间中的极坐标点,而点线距和旋转角度对应的原二值图的坐标位置处的图像信息存到使用极坐标表示的霍夫空间中,因此霍夫空间中的每一个非零点代表着一种直线,该直线会经过原二值图的有效点。
32.本实施例预先使用图像卷积模板(包括但不限于低通滤波器、高通滤波器、匹配滤波边缘检测、边缘检测、梯度方向边缘检测、以及平移和差分边缘检测)对当前采集的图像进行处理后,获得二值图,假设该二值图中存在多个有效点,若需要检测经过其中一个有效点的一条特定直线,则要找到具体的旋转角度θ和点线距ρ。在本实施例的霍夫变换中采用含极坐标参数的直线表示型式简称极坐标式表示如下:xcosθ+ysinθ=ρ,其中,x为前述有效点的横坐标,y为前述有效点的纵坐标,旋转角度θ指转换的直线的法线与x轴正方向形成的夹角,点线距ρ为图像坐标系的原点到转换的直线的几何垂直距离,形成直线的霍夫变换的两个参数,这两个参数通过所述极坐标式相关联。若旋转角度θ和点线距ρ都是常量时,直线上的任意点都可以使用前述极坐标式表示。
33.在现有技术中,比如目前常用的图像处理公开库opencv中,每个有效点可以通过无数条直线,每一条直线与一对参数(ρ,θ)相关联,这对参数(ρ,θ)所在的二维平面被定义为霍夫空间,用于表示二维直线的存储空间,霍夫空间内设置有横坐标轴(简称为横轴)和纵坐标轴(简称为纵轴),即该图像处理公开库设计的霍夫空间中,使用横坐标表示点线距ρ,并使用纵坐标表示旋转角度θ,因此,霍夫变换可以检测并获取直线的输出矢量,每一条
直线由具有两个元素的极坐标(ρ,θ)表示,同一个极坐标(ρ,θ)可以表示多条重合的直线。此时,若控制横坐标按照一定的迭代步长(预先设定的)迭代变化(保持递增或递减)时,基于反三角函数关系式,每次按照一定的迭代步长(无论大小)迭代变化总是得到多个角度差较大的旋转角度作为霍夫空间内的纵坐标,在一些实施例中该角度差是360度的倍数,并表现为霍夫空间的纵轴方向的变化,在此基础上,若霍夫空间的待读取的矩阵空间的横轴的最大地址长度为c,则横坐标每次按照一定的迭代步长(无论大小)迭代变化后,cpu最新读取的目标地址为上一次读地址与一个地址长度为c之和,此时cpu最新读取的目标地址(p+c)往往超出缓存(介于内存和cpu之间,由cpu控制其内容)所容纳的地址范围,尤其是缓存比较少的嵌入式设备和移动式设备中,容易让cpu缓存失败。若cpu最新读取的目标地址(p+c)存在于所述缓存当中,则每次迭代变化出的纵坐标都会出现较大变化且同一横坐标对应多个纵坐标,又由于矩阵空间是按行存储数据的,所以cpu依次读取霍夫空间的最新迭代出的多个内存地址时都要跳过一个大的内存段,具体表现为cpu需多次跨行地址段读取,加大cpu缓存失败的概率,且每次迭代变化后被cpu读取的效率低下,降低二值图像进行霍夫变换的整体转换效率。
34.为了克服上述的技术缺陷,在步骤s1的基础上,公开步骤s2,步骤s2包括:每当对预先获得的二值图的有效点执行预设迭代次数的角度迭代扫描后,允许对应的点线距在预设参数映射空间内的纵坐标变化一次,即调整对应旋转角度的点线距在预设参数映射空间内换算出的纵坐标变化一次,以使得cpu依据所述预设参数映射空间的坐标信息来连续读取内存地址内的图像信息。其中,预设迭代次数是经过仿真实验获得的结果,用于表示:极坐标式xcosθ+ysinθ=ρ在(x,y)固定不变的前提下,当旋转角度θ按照一定的角度步长(预先设定的,比如0.4度或1度)迭代变化(保持连续预设迭代次数的递增或保持连续预设迭代次数的递减,视为迭代转动)的同时,cpu在对应旋转角度上计算出的一个点线距ρ也随之变化,但在较小的旋转角度变化范围内,比如0.1度至1度的角度范围内,每一个旋转角度对应计算出的点线距之间产生的变化数值不大,本实施例则利要这一数值连续变化特征,将预设迭代次数的角度迭代扫描内对应计算出的点线距设置为在预设参数映射空间内的同一数值的纵坐标,即在预设迭代次数的角度迭代扫描的同时,将极坐标式原本换算出的点线距(每一个点线距对应一个参与角度迭代扫描的旋转角度)换算为与特定的点线距精度相适应的同一纵坐标,但进入下一轮迭代操作所包括的预设迭代次数的角度迭代扫描时,对应换算出的与特定的点线距精度相适应的纵坐标则不同于当前一轮的预设迭代次数的角度迭代扫描内的。这样,当对预先获得的二值图的有效点执行预设迭代次数的角度迭代扫描,则在以旋转角度为所述设参数映射空间的横坐标、以点线距为所述设参数映射空间的纵坐标的内存空间内,按行配置连续的地址段以便于cpu按照相应周期内(预设迭代次数的角度迭代扫描内)配置的连续的地址段依次获取图像信息。综上,在霍夫变换中依据一定的迭代步长对直线进行预设迭代次数的角度迭代扫描,以使得直线在对应连续变化的旋转角度所对应计算出的点线距的数值变化不大,减少出现cpu读取由旋转角度和点线距组成的地址处的图像信息时出现跨大内存段(比如跨多行地址段)的现象,使得cpu或类似的主控单元能够多次命中从连续的内存中缓存出的图像数据,提升二值图的霍夫变换的工作效率,即实现在硬件条件限制范围内提高经过有效点的直线的霍夫变换效率。
35.与现有技术相比,本实施例将预设参数映射空间设计为横轴表示旋转角度、纵轴
表示点线距的霍夫空间存储方式,以将前述现有技术的霍夫空间的横纵轴所表示的极坐标意义对调。在一些实施例中,对某一个有效点进行五次角度迭代扫描,例如从1度迭代转动至2度的过程,经过该有效点的直线的点线距往往比较类似(另外一种说法就是,有多个非常接近的直线经过该点),如果从1度到2度的迭代过程中,计算出来的直线的点线距分别为0.01、0.02、0.03、0.05、0.06,若设置相应的取值精度为0.1,则这五次角度迭代扫描对应的实际霍夫变换至所述预设参数映射空间的纵坐标都是0,确定这五个点线距在同一截距段内并满足同一取值精度,则按照所述设参数映射空间的坐标信息配置出在内存段中的地址是连续的,多个横坐标(旋转角度)对应同一截距数值的纵坐标,至少在相邻的两个内存单元处的地址被配置为连续的。相比之下,前述现有技术公开的以旋转角度为所述设参数映射空间的纵坐标、以点线距为所述设参数映射空间的横坐标的内存空间中存放相应矩阵就是按行存放,基于前述的极坐标式的包括的反三角函数的周期性,本领域技术人员易知:相同横坐标下,不同纵坐标之间在内存空间中表示的地址位置差异非常远,具体是一定会存在较大的跨内存段。因此本实施例通过执行步骤s1和步骤s2,显著提升高精度的直线霍夫空间中的命中概率,从而成倍的提升直线霍夫变换的转换速度。其中,本实施例将预设参数映射空间的每一行的所有地址单元记为一个内存段。
36.作为另一种实施例,如图2所示,所述每当对预先获得的二值图的有效点执行预设迭代次数的角度迭代扫描后,允许对应的点线距在预设参数映射空间内的纵坐标变化一次的方法,包括:
37.步骤s20、从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长去扫描一个有效点的旋转角度;每当扫描同一个有效点的一个旋转角度的同时,计算经过该有效点的当前扫描到的旋转角度的直线的点线距,再按照预设点线距精度将该点线距处理为截距坐标,以确定为对该有效点执行一次角度迭代扫描,然后进入步骤s21,其中,前述的同一个有效点可以是多次角度迭代扫描下对应的一个有效点,也可以是多次角度迭代扫描下对应的多个有效点当中的任一个,使得同一个有效点的表述不是自始至终局限于相同的一个有效点;本实施例设置出的截距坐标是对应经过该有效点的直线的点线距在预设参数映射空间内的纵坐标,即前述实施例公开的步骤s20中,允许每隔所述预设迭代次数的角度迭代扫描则变换数值一次的纵坐标,形成连续预设迭代次数的旋转角度对应一个截距坐标的计算结果,在此基础上设置出作为角度迭代步长的所述预设单位迭代角度的具体数值,使经过有效点的相应直线换算出的点线距在所述预设迭代次数的角度迭代扫描过程中变化不大,可以在一定的精度条件下配置为相等的。从而在所述设参数映射空间内配置出一行连续的地址,减少出现cpu从所述设参数映射空间内缓存图像信息时出现跨大内存段读取的问题。其中,本实施例设置出的截距坐标与直线的点线距是属于同一类纵坐标量。
38.步骤s21、判断对步骤s20所述的有效点执行角度迭代扫描的次数是否达到预设迭代次数,即计数判断对有效点执行角度迭代扫描的次数对应的增量是否达到预设迭代次数(包括但不限于从1开始增加至预设迭代次数,或者从(预设迭代次数+1)开始增加至(预设迭代次数的两倍)),是则进入步骤s22,否则返回步骤s20。可以理解的,本实施例当计数到对有效点执行角度迭代扫描的次数的增量达到预设迭代次数时,则进入步骤s22并将计数到的次数的增量清零,避免影响下一轮计数的结果,否则返回步骤s20继续以所述预设单位迭代角度为迭代步长,按照所述预设单位迭代角度迭代扫描经过同一个有效点的直线,但
不清零计数到的次数的增量,而是在此基础上继续计数所述角度迭代扫描的执行次数的情况,直至对经过该有效点的直线进行迭代扫描的次数达到所述预设迭代次数。
39.步骤s22、将最新迭代扫描到的旋转角度更新为初始旋转角度,并确定已经对应计算出与所述预设迭代次数的旋转角度相对应的点线距,可以是在扫描该有效点的所述预设迭代次数的旋转角度的过程中,由cpu并行计算出多个点线距;再返回执行步骤s20,以使得返回步骤s20所获得的截距坐标相对于当前获得的截距坐标是不同的,即实现在相邻两回执行的步骤s20所获得的截距坐标是不同的,其中,每一回的迭代过程代表所述预设迭代次数的角度迭代扫描。所以本实施例每隔所述预设迭代次数的角度迭代扫描对应的迭代过程,则改变一次步骤s20所处理出的截距坐标的数值,并继续对该有效点执行下一次角度迭代扫描,也满足按照预设点线距精度将该点线距处理为截距坐标。
40.在一些实施方式中,将初始旋转角度设置为y1,对应的点线距为x1;若在以点线距为横轴坐标、以旋转角度为纵轴坐标的霍夫空间内,以所述预设单位迭代角度为角度迭代步长,扫描经过同一个有效点的直线,对应直线的存储地址的坐标位置依次配置为(x1,y1)、(x2,y1+1)、(x3,y1+2)、(x4,y1+3)和(x5,y1+4);但是,本实施例则是在使用纵轴表示截距坐标、且使用横轴表示旋转角度的预设参数映射空间内,以所述预设单位迭代角度为角度迭代步长,扫描经过同一个有效点的直线,对应直线的存储地址的坐标位置依次配置为(y1,x1)、(y1+1,x2)、(y1+2,x3)、(y1+3,x4)和(y1+4,x5),其中,由于截距坐标是按照预设点线距精度将对点线距处理的结果,所以,x坐标在所述预设参数映射空间的存储方式是连续的y1、y1+1、y1+2、y1+3和y1+4,对应的点线距x1、x2、x3、x4和x5的坐标被处理为同一数值的截距坐标,因此,从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长,对同一个有效点执行所述预设迭代次数的角度迭代扫描,能够让cpu就会从同一行内存地址中连续存取,在局部范围内舍去部分点线距的精度来获取连续的内存空间,加快cpu索引速度和缓存成功概率。这样cpu会把连续的内存数据读到缓存中,减少从低速的内存中重复取连续段的数据的次数。
41.综上,与现有技术相比,本实施例以所述预设单位迭代角度为步长迭代量,每进行所述预设迭代次数的角度迭代扫描的过程中,将顺序获得的每个点线距都转换为预设参数映射空间内相等的截距坐标,从而获得能够描述连续地址的索引坐标(旋转角度,截距坐标),以使得cpu依据所述预设参数映射空间的坐标值来读取连续的内存段内的图像信息至缓存空间中,避免每次迭代都引起霍夫空间中对应的纵坐标改变,cpu每次读取内存时都需要跳一个大的内存段(偏移一个或多个整行的内存地址)。进而提升了高精度的直线霍夫空间中的命中概率,从而成倍的提升了直线霍夫变换结果的寻址速度。
42.优选地,在所述步骤s20中,以所述预设单位迭代角度为迭代步长去扫描一个有效点的旋转角度的方法包括:在执行一个有效点的当前一次角度迭代扫描的过程中,将所述预设单位迭代角度加上上一次角度迭代扫描所扫描到的旋转角度,获得当前迭代扫描到的旋转角度,等效于对前述的初始旋转角度的一次迭代转动,其中,在执行同一个有效点的下一次角度迭代扫描之前,先将当前一次角度迭代扫描所扫描到的旋转角度更新为上一次角度迭代扫描所扫描到的旋转角度。值得注意的是,当开始对一个新的有效点执行角度迭代扫描时,则从未更新过的所述初始旋转角度开始,按照所述迭代步长去扫描对这个新的有效点。本实施例使用旋转角度迭代转动的方式控制前述的角度迭代扫描,控制原始图像内
的每个有效点能够在360度范围内迭代扫描对应旋转角度上的直线,较为全面地原始图像内待霍夫变换的直线,这里的原始图像是所述二值图。
43.作为另一种实施例,如图3所示,具体包括以下步骤:
44.步骤s301、从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长去扫描一个有效点的旋转角度;每当扫描同一个有效点的一个旋转角度的同时,计算经过该有效点的当前扫描到的旋转角度的直线的点线距,再按照预设点线距精度将该点线距处理为截距坐标,以确定为对该有效点执行一次角度迭代扫描,然后进入步骤s302;本实施例设置出的截距坐标是对应经过该有效点的直线的点线距在预设参数映射空间内的纵坐标,形成:允许每隔所述预设迭代次数的角度迭代扫描则变换数值一次的纵坐标,从而连续预设迭代次数的旋转角度对应一个截距坐标的计算结果,在此基础上设置出作为角度迭代步长的所述预设单位迭代角度的具体数值,使经过有效点的相应直线换算出的点线距在所述预设迭代次数的角度迭代扫描过程中变化不大,可以在一定的精度条件下配置为相等的。从而在所述设参数映射空间内配置出一行连续的地址,减少出现cpu从所述设参数映射空间内缓存图像信息时出现跨大内存段读取的问题。其中,本实施例设置出的截距坐标与直线的点线距是属于霍夫空间的纵坐标量。
45.值得注意的是,前述的同一个有效点可以是多次角度迭代扫描下对应的一个有效点,也可以是多次角度迭代扫描下对应的多个有效点当中的任一个,使得同一个有效点的表述不是自始至终局限于相同的一个有效点。
46.步骤s302、判断对步骤s301所述的有效点执行角度迭代扫描的次数是否达到预设迭代次数,即在每个迭代周期内判断对有效点执行角度迭代扫描的次数对应的计数增量是否达到预设迭代次数(包括但不限于从1开始增加至预设迭代次数,或者从(预设迭代次数+1)开始增加至(预设迭代次数的两倍)),是则进入步骤s303,否则返回步骤s301。可以理解的,本实施例当计数到对有效点执行角度迭代扫描的次数的增量达到预设迭代次数时,则进入步骤s303并将计数到的次数的增量清零但记录下的次数保留下来,以便步骤s303的判断,否则返回步骤s301继续以所述预设单位迭代角度为迭代步长,按照所述预设单位迭代角度迭代扫描经过同一个有效点的直线,但不清零计数到的次数的增量,而是在此基础上继续计数所述角度迭代扫描的执行次数的情况,直至对经过该有效点的直线进行迭代扫描的次数达到所述预设迭代次数。
47.步骤s303、判断步骤s301所述有效点是否在360度范围内完成前述的角度迭代扫描,是则进入步骤s304,否则进入步骤s306。具体地,每当对同一个有效点执行角度迭代扫描的次数达到360度与所述预设单位迭代角度的比值时,需要开始对新的有效点重复执行前述步骤,直至完成所述二值图内的每个有效点在360度的旋转角度范围内的角度迭代扫描;其中,每个有效点执行角度迭代扫描的最大次数为360度与所述预设单位迭代角度的比值,用于设置为对应一个有效点在360度的旋转角度范围内允许执行所述角度迭代扫描的次数,优选地,该比值为整数。
48.步骤s304、检测是否完成二值图内的所有有效点的角度迭代扫描,是则停止执行角度迭代扫描,以等待霍夫变换经过新的一帧二值图的有效点的直线,否则执行步骤s305。使得所述预设参数映射空间描述的直线参数更加全面,在对应的图像内覆盖更多的更全面的经过有效点的直线段。
49.步骤s305、将二值图的未遍历的有效点更新为步骤s301所述的有效点,然后执行步骤s306。形成在一帧二值图内的经过有效点的所有直线的霍夫变换的迭代控制机制,这里的有效点是指当前霍夫变换的一帧二值图内所有的有效点。
50.步骤s306、将最新迭代扫描到的旋转角度更新为初始旋转角度,并确定已经对应计算出与所述预设迭代次数的旋转角度相对应的点线距,可以是在扫描相应的一个有效点的所述预设迭代次数的旋转角度的过程中,由cpu并行计算出多个点线距;然后返回步骤s301,以开始对该有效点执行新的一次角度迭代扫描。如此迭代,每次对同一个有效点扫描到的旋转角度不同,对应的直线也不同,则被安排入内存地址的图像信息也不同。值得注意的是,本实施例每隔所述预设迭代次数的角度迭代扫描对应的迭代过程,则改变一次步骤s301所处理出的截距坐标的数值,并继续对该有效点执行下一次角度迭代扫描,也满足按照预设点线距精度将该点线距处理为截距坐标。
51.在上述实施例中,所述预设参数映射空间内排列的坐标元素的行数是旋转角度相同但点线距不同的极坐标点的数目;所述预设参数映射空间内排列的坐标元素的列数是点线距相同但旋转角度不同的极坐标点的数目;在本实施例中,经过二值图中的有效点的所有直线都支持被霍夫变换为霍夫空间内的极坐标点,其中,不同的极坐标点代表不同的直线,一个极坐标点上代表经过有效点的至少一条直线;其中,极坐标点包括旋转角度和点线距,旋转角度是极坐标点所代表的直线的法线与所属二值图的坐标系的横轴正方向所成的夹角,点线距是二值图的坐标系的原点到极坐标点所代表的直线的几何垂直距离。因此,本实施例将一个有效点执行角度迭代扫描的次数与所述预设迭代次数的比值是设置为该有效点所需的霍夫空间内排列的坐标元素的最大行数,并将所述预设迭代次数设置为该有效点所需的霍夫空间内排列的坐标元素的最大列数,进而将前述的列数和前述的行数的乘积设置为允许cpu能够读取的有效地址的数量,也使得所述霍夫空间或所述预设参数映射空间的大小是在满足所述预设单位迭代角度和所述预设点线距精度的基础上对应设置的,这样cpu方便通过霍夫空间内设的横坐标和纵坐标搜寻到内存中的某段地址连续的行区域,而不将相应的坐标分开存放,需要说明的是,横坐标和纵坐标只是为了计算得到内存中对应的位置,然后在对应位置的数据上进行操作,也可视为按二维矩阵方式进行矩阵编号作为相应存储数据的地址坐标,包括行地址的坐标(纵坐标)和列地址的坐标(横坐标)。
52.作为一种实施例,所述按照预设点线距精度将该点线距处理为截距坐标的方法包括:
53.按照所述预设点线距精度限定的数量级,将一轮截距精度迭代扫描操作过程中所扫描到的每个旋转角度对应的点线距都换算为同一个截距坐标,以转换为所述预设参数映射空间内的同一数值的纵坐标,在一些实施场景中可以是先后转换为所述预设参数映射空间内的同一数值的纵坐标。其中,所述截距坐标的数量级等于所述预设点线距精度限定的数量级;其中,从一个初始旋转角度开始,以所述预设单位迭代角度为迭代步长,每当计数到对同一个有效点执行角度迭代扫描的次数为所述预设迭代次数,则记为对同一个有效点执行一轮截距精度迭代扫描操作,即每轮截距精度迭代扫描操作只有执行所述预设迭代次数的角度迭代扫描;其中,所述预设点线距精度配置为:每一轮截距精度迭代扫描操作对应计算出的点线距都处于对应的截距范围内,该截距范围的精度满足所述预设点线距精度;相邻两轮所述截距精度迭代扫描操作对应计算出数值不同的两种截距坐标。
54.在本实施例中,所述预设点线距精度是设定不变的。当某一次角度迭代扫描过程中计算得到的截距坐标是1.5,若预先设置的所述预设点线距精度设成1,那么这个1.5对应到的霍夫空间内的矩阵空间中的纵坐标(所述截距坐标)就是1,对应1的行地址位置;若预先设置的所述预设点线距精度设成0.5,那么这个1.5对应到的霍夫空间内的矩阵空间中的纵坐标(所述截距坐标)就是1.5,对应1.5的行地址位置;在一些实施方式中,若每一轮截距精度迭代扫描操作中计算截距坐标都是浮点数,则根据点线距的数量级精度(小数点的位置)自适应地调节所述预设点线距精度的小数位。其中,一轮截距精度迭代扫描操作中获得的一批点线距的整数部分都相等,在所述预设点线距精度的精度约束下等于对应的一个截距坐标的整数部分,以保证整数部分的精度。因此,本实施例将符合同一个精度下的点线距都设置为同一截距坐标,从而在此基础上设定每改变一个截距坐标所需经过的迭代次数,即设置出所述预设迭代次数,建立起霍夫变换中的多个旋转角度与一个点线距的对应关系。该实施例在应用到二值图的直线霍夫变换中,提高霍夫空间内存储的数据被cpu缓存的成功率,因为让cpu减少跨行读取的频率,所以对于缓存的需求较低,提高霍夫变换算法运行的效率。
55.具体地,所述计算经过该有效点的当前扫描到的旋转角度的直线的点线距的方法包括:将当前一次角度迭代扫描所扫描到的旋转角度的余弦函数取值与参与当前一次角度迭代扫描的有效点的横坐标相乘,获得第一变换值;同时,将当前一次角度迭代扫描所扫描到的旋转角度的正弦函数取值与参与当前一次角度迭代扫描的有效点的纵坐标相乘,获得第二变换值;然后将第一变换值与第二变换值相加,获得经过该有效点的当前扫描到的旋转角度上的直线的点线距;其中,当前一次角度迭代扫描所扫描到的旋转角度的余弦函数取值及正弦函数取值都是从预先配置的索引表中获得,索引表用于存储按照所述预设单位迭代角度所允许扫描的旋转角度对应的三角函数值。其中,该索引表中填充的三角函数值预先以期望的精度设置好,需要说明的是,所述旋转角度是极坐标点所代表的直线的法线与所属二值图的坐标系的横轴正方向所成的夹角,所述点线距是二值图的坐标系的原点到极坐标点所代表的直线的几何垂直距离。因此,相对于每次迭代时计算一次余弦函数取值和正弦函数取值,本实施例采用查表的方式代替每次角度迭代扫描时的计算三角函数,提高利用前述的计算点线距的方式获得截距坐标的速度,进一步提升直线转换霍夫空间的速度。
56.在前述实施例中,所述霍夫变换控制方法还包括:将最新设置出的截距坐标及其对应的旋转角度配置为相应直线的图像信息的读地址,以使得二值图的图像信息被配置为由cpu按照所述预设参数映射空间内的坐标信息逐行地从相应的内存地址中读取出来;其中,读地址是属于霍夫空间的内存地址,支持cpu读写操作,在先后执行角度迭代扫描所设置出的读地址是连续的,以组成地址连续的内存空间;在本实施例中,所述预设参数映射空间内的坐标信息包括截距坐标及其对应的旋转角度,其中,截距坐标是被重新配置过一次的点线距,使得同一数值的截距坐标对应被先后扫描到的数量为所述预设迭代次数的旋转角度,每次扫描到的一个旋转角度对应一个点线距,每个点线距对应一个截距坐标。保证霍夫空间内建立的地址是连续地存储二值图按行存放的直线特征,以便于cpu在缓存图像信息时是从所述预设参数映射空间内连续读取得到,而不需跨地址段读取,减轻缓存的压力。需要说明的是,所述缓存的是连接于外设内存和cpu之间,由cpu控制其访问的内容;在本实
施例中,cpu往往会把连续内存地址(由截距坐标及对应的旋转角度配置出的坐标位置)处存储的数据读到缓存中,避免从低速的内存中重复取连续段的数据。
57.在上述实施例的基础上,所述霍夫变换控制方法还包括:将预设参数映射空间划分为多个分块矩阵空间,其中,划分出的相邻两个分块矩阵空间的内存地址是连续的,并被cpu预存相邻两个分块矩阵空间之间的相邻两行地址,可以是当前一个分块矩阵空间的尾地址与下一个分块矩阵空间的首地址是相邻的,则需要计算配置出分块矩阵索引,以便于cpu按行连续读取对应地址处的数据,其中,每个分块矩阵空间都是按行存储数据的。具体地,每个分块矩阵空间的坐标信息被配置为覆盖预设局部次数的所述角度迭代扫描所获得的截距坐标及其对应的旋转角度,一个分块矩阵空间表现为一个长为k且宽为d的矩阵块,以使得cpu至少索引到截距坐标不同的两组连续的读地址,其中,每一组连续的读地址是每计数到对同一个有效点执行所述预设迭代次数的所述角度迭代扫描而配置出的,相邻两组的读地址是连续的;所述预设局部次数是大于或等于所述预设迭代次数的两倍。因此本实施例克服预设局部次数的角度迭代扫描的过程中产生的截距坐标变化而引起cpu跨整行地址段读取数据的问题。因为内存呈块分布,所以即使cpu当前要索取的纵坐标在霍夫空间内发生变化,但其配置出的读地址仍留在原来的分块矩阵空间内,因为当前块内部是连续存储的,相邻两个分块矩阵空间之间是连续存储的,当前的分块矩阵空间内存储的连续内存数据(对应一个连续内存区域)是能够被读到cpu的缓存中,那么就会显著减少跨大内存的存取;且设在上述实施例的基础上再一次减少了缓存失效的概率,进一步提升直线的霍夫变换的转换速度。综上,本实施例采取分块存取的方式,控制发生变化的截距坐标保留在同一个分块矩阵空间内,并配置同一个分块矩阵空间是支持存储连续的内存数据,相邻的两个分块矩阵空间之间是支持连续存储的,本实施例设置的一个分块矩阵空间的内存大小满足cpu缓存下至少两组由所述预设迭代次数的角度迭代扫描而获得霍夫空间的坐标信息对应的连续内存区域存储的数据,显著减少cpu跨大内存存取的频率。
58.优选地,在硬件实现前述实施例的过程中,cpu被配置为支持并行计算经过有效点的被扫描到的预设并行数量的旋转角度的直线的点线距;其中,被先后扫描到的预设并行数量的旋转角度是预先获知的,使得cpu不必等到计算出一个点线距或一个截距坐标再开始执行下一次角度迭代扫描;cpu的内部设置有预设并行数量的计算单元,每一个计算单元用于计算经过有效点的被扫描到的旋转角度的直线的点线距。需要说明的是,经过一个有效点的预设并行数量的直线的点线距分别与被先后迭代扫描到预设并行数量的旋转角度一一对应;前述的并行执行是cpu调用预设并行数量的计算单元同步执行计算操作,优选地,可以用neon并行化(neon:一种在嵌入式arm设备中的simd指令集,simd:single instruction multiple data)指令配置cpu执行并行化计算操作,并决定预设并行数量。优选地,预设并行数量等于所述预设迭代次数。本实施例该技术方案把计算霍夫空间坐标的速度提升预设并行数量倍,平衡cpu从内存(霍夫空间内构建的内存空间)中缓存数据的时间,提升整体的变换速度。
59.本发明还公开一种芯片,该芯片用于存储前述实施例所述霍夫变换控制方法对应的程序代码,该程序代码用于控制芯片执行所述霍夫变换控制方法,使得该芯片作为内存控制芯片配合控制cpu访问内存空间,以减少cpu缓存所述预设参数映射空间的数据失败的概率,并有效的解决了嵌入式平台处理速度缓慢、内存资源有限的局限性问题,为机器人的
图像识别定位提供解决方案。
60.本发明还公开一种机器人,该机器人装配所述的芯片。所述机器人还安装激光传感器或视觉传感器,用于从采集的图像中获取有效点,再利用霍夫变换提取出经过有效点的直线的特征。本技术方案一方面降低了算法对主控内存的需求,提高了算法效率;另一方面改进了算法对实时采集的图像中的直线检测的效率。
61.本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,该计算机程序可存储于一非易失性计算机可读存储介质中,该计算机程序在执行时,可包括如上述个方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其他介质的引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器rom、可编程存储器prom、电可编程存储器eprom、电可擦除可编程存储器eeprom或闪存。易失性存储器可包括随机存取存储器ram或者外部高速缓冲存储器。
62.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
63.以上各实施例仅表达了本发明的几种实施例,其描述较为具体和详细,但并不能因此而理解为发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1