发明内容
有鉴于此,本申请的目的在于提供一种直线检测方法及装置,以提高直线检测的准确率。
第一方面,本申请实施例提供了一种直线检测方法,包括:
获取待检测图像;
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值;
将各个像素点的位置坐标映射到极坐标系中得到各个像素点对应的映射直线,并确定所述极坐标系中至少两条映射直线相交的特征点;
根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线。
结合第一方面,本申请实施例提供了第一方面的第一种可能的实施方式,其中,根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线,包括:
计算经过每个特征点的每条映射直线对应的像素点的梯度值之间的梯度总和;
将梯度总和满足预设条件的特征点,确定为目标特征点;
将经过所述目标特征点的每条映射直线对应的像素点所组成的直线,确定为所述待检测图像中的直线。
结合第一方面的第一种可能的实施方式,本申请实施例提供了第一方面的第二种可能的实施方式,其中,将梯度总和满足预设条件的特征点,确定为目标特征点,包括:
将梯度总和大于预设阈值的特征点,确定为目标特征点;或者,
将每个特征点对应的梯度总和由大到小排列,将排列在前N位的特征点,确定为目标特征点,N为正整数。
结合第一方面,本申请实施例提供了第一方面的第三种可能的实施方式,其中,所述根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值,包括:
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点分别对应的原始梯度值;
在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整后,得到各个像素点分别对应的梯度值。
结合第一方面的第三种可能的实施方式,本申请实施例提供了第一方面的第四种可能的实施方式,其中,所述对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整,包括:
针对所述原始梯度值小于所述预设梯度范围的最小值的第一类像素点,将各个所述第一类像素点分别对应的原始梯度值调整为所述预设梯度范围的最小值;
针对所述原始梯度值大于所述预设梯度范围的最大值的第二类像素点,将各个所述第二类像素点分别对应的原始梯度值调整为所述预设梯度范围的最大值。
第二方面,本申请实施例还提供一种直线检测装置,包括:
获取模块,用于获取待检测图像;
第一确定模块,用于根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值;
映射模块,用于将各个像素点的位置坐标映射到极坐标系中得到各个像素点对应的映射直线,并确定所述极坐标系中至少两条映射直线相交的特征点;
第二确定模块,用于根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线。
结合第二方面,本申请实施例提供了第二方面的第一种可能的实施方式,其中,所述第二确定模块,在根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线时,具体用于:
计算经过每个特征点的每条映射直线对应的像素点的梯度值之间的梯度总和;
将梯度总和满足预设条件的特征点,确定为目标特征点;
将经过所述目标特征点的每条映射直线对应的像素点所组成的直线,确定为所述待检测图像中的直线。
结合第二方面的第一种可能的实施方式,本申请实施例提供了第二方面的第二种可能的实施方式,其中,所述第二确定模块,在将梯度总和满足预设条件的特征点,确定为目标特征点时,具体用于:
将梯度总和大于预设阈值的特征点,确定为目标特征点;或者,
将每个特征点对应的梯度总和由大到小排列,将排列在前N位的特征点,确定为目标特征点,N为正整数。
结合第二方面,本申请实施例提供了第二方面的第三种可能的实施方式,其中,所述第一确定模块,在根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值时,具体用于:
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点分别对应的原始梯度值;
在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整后,得到各个像素点分别对应的梯度值。
结合第二方面的第三种可能的实施方式,本申请实施例提供了第二方面的第四种可能的实施方式,其中,所述第一确定模块,在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整时,具体用于:
针对所述原始梯度值小于所述预设梯度范围的最小值的第一类像素点,将各个所述第一类像素点分别对应的原始梯度值调整为所述预设梯度范围的最小值;
针对所述原始梯度值大于所述预设梯度范围的最大值的第二类像素点,将各个所述第二类像素点分别对应的原始梯度值调整为所述预设梯度范围的最大值。
第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面的任一种可能的实施方式中的步骤。
第四方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面的任一种可能的实施方式中的步骤。
本申请实施例提供的直线检测方法及装置,通过对待检测图像中水平方向的水平梯度和垂直方向的垂直梯度的计算,确定每个像素点的梯度值,然后将像素点的位置坐标映射到极坐标中,并确定极坐标系中每个像素点对应的映射直线以及特征点,最后基于经过特征点的映射直线所对应的像素点的梯度值,确定待检测图像中的直线。通过上述方法,可以基于像素点的梯度值确定直线,而并不是基于像素点的个数确定直线,避免了因为直线长度导致的检测误差,提高了直线检测的准确率。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先,对本申请可适用的应用场景做出介绍。本申请所提供的方法可以适用于在图像中检测直线的场景中。传统的直线检测方法主要是通过霍夫变换检测直线,而霍夫变换检测直线的方法中,主要是将像素点对应转换到极坐标系中,确定出一条经过最多个像素点的线为直线,这种方式可能会因为线条长度的影响,导致直线检测产生误差。
如图1所示的两条线,若通过霍夫变换的方法进行检测,则分别将第1条线和第2条线的每个像素点对应转换到极坐标系中以后,得到每个像素点对应的映射直线,第1条线经过同一点的直线个数大于第2条线经过同一点的直线的个数,因此会将第1条线确定为直线,因此这种确定直线的方法会受到线条长度的影响。
本申请提供的方法,通过计算待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值,然后将像素点的位置坐标映射到极坐标系中,得到各个像素点对应的映射直线,并确定极坐标系中的特征点,最后根据经过特征点的每条映射直线对应的像素点的梯度值,确定待检测图像中的直线。与传统方法相比,本申请所提供的方法是基于像素点的梯度值确定直线,而并不是基于像素点的个数确定直线,避免了因为直线长度导致的检测误差,提高了直线检测的准确率。
为便于对本实施例进行理解,首先对本申请实施例所公开的一种直线检测方法进行详细介绍。
实施例一
参见图2所示,为本申请实施例提供的一种直线检测方法的流程示意图,包括以下步骤:
S201、获取待检测图像。
S202、根据待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值。
具体实施中,可以按照如图3所示的方法,确定各个像素点的梯度值,包括以下步骤:
S301、根据待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点分别对应的原始梯度值。
以待检测图像中第m行第n列的像素点P为例,设Xm,n表示待检测图像中第m行第n列的像素点的像素值,则在计算像素点P的水平方向的水平梯度时,可以按照下列公式进行计算:
Px=Xm,n+1-Xm,n-1
其中,Xm,n-1表示第m行第n-1列的像素点的像素值,Xm,n+1表示第m行第n+1列的像素点的像素值,Px表示像素点P在水平方向上的水平梯度。
在计算像素点P的垂直方向的垂直梯度时,可以按照下列公式进行计算:
Py=Xm+1,n-Xm-1,n
其中,Xm+1,n表示第m+1行第n列的像素点的像素值,Xm-1,n表示第m-1行第n列的像素点的像素值,Py表示像素点P在水平方向上的水平梯度。
进一步地,在根据像素点P的水平方向的水平梯度和垂直方向的垂直梯度,确定像素点P分别对应的原始梯度值时,可以按照以下公式进行计算:
其中,Px,y表示像素点P的原始梯度值。
S302、在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整后,得到各个像素点分别对应的梯度值。
在一种可能的应用场景中,待检测图像中可能存在噪声,因为噪声的影响可能会导致部分像素点的梯度值过大或者过小,为了防止因为噪声导致的像素点的梯度值过大或过小影响直线检测的准确率,可以对像素点的原始梯度值不在预设梯度范围的像素点的原始梯度值进行调整,将原始梯度值不在预设梯度范围内的像素点的原始梯度值调整到预设梯度值范围内。
具体的,可以按照下述方式对原始梯度值不在预设梯度范围的像素点的原始梯度值进行调整,以第x个像素点为例,设预设梯度范围为[a,b],包括以下步骤:
判断第x个像素点的原始梯度值是否小于预设梯度范围的最小值a;
若第x个像素点的原始梯度值小于预设梯度范围的最小值a,则将第x个像素点的原始梯度值调整为预设梯度范围的最小值a,并确定第x个像素点的梯度值为a;
若第x个像素点的原始梯度值不小于预设梯度范围的最小值a,则判断第x个像素点的原始梯度值是否大于预设梯度范围的最大值b;
若第x个像素点的原始梯度值大于预设梯度范围的最大值b,则将第x个像素点的原始梯度值调整为预设梯度范围的最大值b,并确定第x个像素点的梯度值为b;
若第x个像素点的原始梯度值不大于预设梯度范围的最大值b,则不调整第x个像素点的原始梯度值,并将第x个像素点的原始梯度值确定为第x个像素点的梯度值。
具体实施中,也可以先判断第x个像素点的原始梯度值是否大于预设梯度范围的最大值,再判断第x个像素点的原始梯度值是否小于预设梯度范围的最小值。
一种可能的实施方式中,预设梯度范围可以为[-127,127],也可以根据具体情况设定预设梯度梯度范围,本申请对此并不限定。
S203、将各个像素点的位置坐标映射到极坐标系中得到各个像素点对应的映射直线,并确定极坐标系中至少两条映射直线相交的特征点。
在待检测图像中确定的像素点的位置坐标为二维直角坐标,将二维直角坐标中的点映射到极坐标系中得到一条对应的映射直线,具体映射过程如图4所示,二维直角坐标系中点A的坐标为(i,j),将点A映射到极坐标系中得到直线OS,其中OS的长度为OS与极轴OR的夹角为/>
将待检测图像中每个像素点的位置坐标映射到极坐标系中,每个像素点对应一条映射直线,则在极坐标系中映射直线的交点可能对应二维直角坐标系中的直线。
S204、根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定待检测图像中的直线。
在一种可能的实施方式中,可以计算经过每个特征点的每条映射直线对应的像素点的梯度值之间的梯度总和,然后将梯度总和满足预设条件的特征点,确定为目标特征点,再将经过目标特征点的每条映射直线对应的像素点所组成的直线,确定为待检测图像中的直线。
例如,对于极坐标系中的特征点H来说,若有标号分别为1、2、3、4的直线经过特征点H,则可以将标号为1的直线所对应的像素点的梯度值、标号为2的直线所对应的像素点的梯度值、标号为3的直线所对应的像素点的梯度值、以及标号为4的直线所对应的像素点的梯度值进行求和运算,得到梯度总和,并判断梯度总和是否满足预设条件,若满足预设条件则将特征点H作为目标特征点,然后将标号为1、2、3、4的直线分别对应的像素点所组成的直线确定为待检测图像中的直线。
具体实施中,在将梯度总和满足预设条件的特征点确定为目标特征点时,可按照以下两种方法中的任意一种:
方法一、将梯度总和大于预设阈值的特征点确定为目标特征点。
具体实施中,预设阈值的大小可以根据应用场景的不同由用户手动设置,本申请对此并不限制。
方式二、将每个特征点对应的梯度总和由大到小排列,将排列在前N为的特征点,确定为目标特征点,N为正整数。
本申请一示例中,若经过上述两种方式中的任意一种方式选择出的目标特征点的个数大于一个,则可以输出选择出的目标特征点对应的梯度总和,并在待检测图像中对每个目标特征点的对应的直线进行标注,例如可以将不同目标特征点对应的直线设置为不同的颜色,用户可以根据待检测对图像中标注的直线,以及每条直线所对应的梯度总和,确定所需要的直线。
本申请实施例提供的直线检测方法,通过对待检测图像中水平方向的水平梯度和垂直方向的垂直梯度的计算,确定每个像素点的梯度值,然后将像素点的位置坐标映射到极坐标中,并确定极坐标系中每个像素点对应的映射直线以及特征点,最后基于经过特征点的映射直线所对应的像素点的梯度值,确定待检测图像中的直线。上述方法,可以基于像素点的梯度值确定直线,而并不是基于像素点的个数确定直线,避免了因为直线长度导致的检测误差,提高了直线检测的准确率。
实施例二
本申请实施例提供了一种直线检测装置,参见图5所示,为本申请实施例提供的直线检测装置500的架构示意图,该装置500包括:获取模块501、第一确定模块502、映射模块503、以及第二确定模块504,具体的:
获取模块501,用于获取待检测图像;
第一确定模块502,用于根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值;
映射模块503,用于将各个像素点的位置坐标映射到极坐标系中得到各个像素点对应的映射直线,并确定所述极坐标系中至少两条映射直线相交的特征点;
第二确定模块504,用于根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线。
在一种可能的实施方式中,所述第二确定模块504,在根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线时,具体用于:
计算经过每个特征点的每条映射直线对应的像素点的梯度值之间的梯度总和;
将梯度总和满足预设条件的特征点,确定为目标特征点;
将经过所述目标特征点的每条映射直线对应的像素点所组成的直线,确定为所述待检测图像中的直线。
在一种可能的实施方式中,所述第二确定模块504,在将梯度总和满足预设条件的特征点,确定为目标特征点时,具体用于:
将梯度总和大于预设阈值的特征点,确定为目标特征点;或者,
将每个特征点对应的梯度总和由大到小排列,将排列在前N位的特征点,确定为目标特征点,N为正整数。
在一种可能的实施方式中,所述第一确定模块502,在根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值时,具体用于:
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点分别对应的原始梯度值;
在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整后,得到各个像素点分别对应的梯度值。
在一种可能的实施方式中,所述第一确定模块502,在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整时,具体用于:
针对所述原始梯度值小于所述预设梯度范围的最小值的第一类像素点,将各个所述第一类像素点分别对应的原始梯度值调整为所述预设梯度范围的最小值;
针对所述原始梯度值大于所述预设梯度范围的最大值的第二类像素点,将各个所述第二类像素点分别对应的原始梯度值调整为所述预设梯度范围的最大值。
本实施例提供的装置,可以基于像素点的梯度值确定直线,而并不是基于像素点的个数确定直线,避免了因为直线长度导致的检测误差,提高了直线检测的准确率。
实施例三
基于同一技术构思,本申请实施例还提供了一种电子设备。参照图6所示,为本申请实施例提供的电子设备600的结构示意图,包括处理器601、存储器602、和总线603。其中,存储器602用于存储执行指令,包括内存6021和外部存储器6022;这里的内存6021也称内存储器,用于暂时存放处理器601中的运算数据,以及与硬盘等外部存储器6022交换的数据,处理器601通过内存6021与外部存储器6022进行数据交换,当电子设备600运行时,处理器601与存储器602之间通过总线603通信,使得处理器601在执行以下指令:
获取待检测图像;
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值;
将各个像素点的位置坐标映射到极坐标系中得到各个像素点对应的映射直线,并确定所述极坐标系中至少两条映射直线相交的特征点;
根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线。
一种可能的设计中,根据经过每个特征点的每条映射直线对应的像素点的梯度值,确定所述待检测图像中的直线,包括:
计算经过每个特征点的每条映射直线对应的像素点的梯度值之间的梯度总和;
将梯度总和满足预设条件的特征点,确定为目标特征点;
将经过所述目标特征点的每条映射直线对应的像素点所组成的直线,确定为所述待检测图像中的直线。
一种可能的设计中,将梯度总和满足预设条件的特征点,确定为目标特征点,包括:
将梯度总和大于预设阈值的特征点,确定为目标特征点;或者,
将每个特征点对应的梯度总和由大到小排列,将排列在前N位的特征点,确定为目标特征点,N为正整数。
一种可能的设计中,所述根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点的梯度值,包括:
根据所述待检测图像中各个像素点的水平方向的水平梯度和垂直方向的垂直梯度,确定各个像素点分别对应的原始梯度值;
在对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整后,得到各个像素点分别对应的梯度值。
一种可能的设计中,所述对各个像素点中原始梯度值不在预设梯度范围内的像素点的原始梯度值进行调整,包括:
针对所述原始梯度值小于所述预设梯度范围的最小值的第一类像素点,将各个所述第一类像素点分别对应的原始梯度值调整为所述预设梯度范围的最小值;
针对所述原始梯度值大于所述预设梯度范围的最大值的第二类像素点,将各个所述第二类像素点分别对应的原始梯度值调整为所述预设梯度范围的最大值。
实施例四
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述任一实施例中所述的直线检测方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述直线检测方法的步骤,从而提高直线检测的准确率。
本申请实施例所提供的进行直线检测方法的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。