发明内容
本发明提供一种图像的角点检测方法及装置,以至少解决现有技术中存在的以上技术问题。
本发明一方面提供一种图像的角点检测方法,包括:
获得第一灰度图片,所述第一灰度图片是由图片经过图像处理后获得的;
在所述第一灰度图片中选取任意一像素点,以该像素点为中心创建第一窗口,根据所述第一窗口获得第一灰度值;
将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,根据所述第二窗口获得第二灰度值;
根据所述第一灰度值和所述第二灰度值计算出第一特征值和第二特征值;
分别计算所述第一特征值与所述第二特征值的乘积得到第一特征结果,计算所述第一特征值的平方得到第二特征结果,计算所述第二特征值的平方得到第三特征结果;
将所述第一特征结果与第一参数值相乘得到第一分数值,所述第二特征结果与第二参数值相乘得到第二分数值,所述第三特征结果与第三参数值相乘得到第三分数值,所述第一、第二和第三参数值为预先确定的参数值;
将所述第一、第二和第三分数值相加,得到像素点分数值;
若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一灰度图片的角点。
其中,所述在所述第一灰度图片中选取任意一像素点,该方法包括:
所述第一灰度图像有N排M列,有N*M个像素点;
选取所述第一灰度图片第一排左边第一个像素点为第一像素点,第一排左边第二个像素点为第二像素点,第一排最后一个像素点为第M像素点;
选取所述第一灰度图片第二排左边第一个像素点为第M+1像素点;第二排最后一个像素点为第2*M像素点;
重复上述步骤直到选取所述第一灰度图片第N排最后一个像素点为第N*M像素点。
其中,所述将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,该方法包括:
将所述第一窗口在所述第一灰度图片中向右移动u像素,向下移动v像素,得到第二窗口。
其中,所述若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一灰度图片的角点,该方法包括:
若所述像素点分数值大于15000,则将该像素点确定为所述第一灰度图片的角点。
其中,所述将所述第一、第二和第三分数值相加,得到像素点分数值后,该方法还包括:
若所述像素点分数值小于-15000,则将该像素点确定为所述第一灰度图片的边缘。
其中,所述将所述第一、第二和第三分数值相加,得到像素点分数值后,该方法还包括:
若所述像素点分数值的绝对值小于15000,则将该像素点确定为所述第一灰度图片的平坦区。
本发明另一方面提供一种图像的角点检测装置,包括:
采集模块,用于获得第一灰度图片,所述第一灰度图片是由图片经过图像处理后获得的;
窗口处理模块,用于在所述第一灰度图片中选取任意一像素点,以该像素点为中心创建第一窗口,根据所述第一窗口获得第一灰度值;
所述窗口处理模块,还用于将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,根据所述第二窗口获得第二灰度值;
计算模块,用于根据所述第一灰度值和所述第二灰度值计算出第一特征值和第二特征值;
所述计算模块,还用于分别计算所述第一特征值与所述第二特征值的乘积得到第一特征结果,计算所述第一特征值的平方得到第二特征结果,计算所述第二特征值的平方得到第三特征结果;
所述计算模块,还用于将所述第一特征结果与第一参数值相乘得到第一分数值,所述第二特征结果与第二参数值相乘得到第二分数值,所述第三特征结果与第三参数值相乘得到第三分数值,所述第一、第二和第三参数值为预先确定的参数值;
所述计算模块,还用于将所述第一、第二和第三分数值相加,得到像素点分数值;
判断模块,用于若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一灰度图片的角点。
其中,该装置还包括:
所述窗口处理模块,还用于所述第一灰度图像有N排M列,有N*M个像素点;
所述窗口处理模块,还用于选取所述第一灰度图片第一排左边第一个像素点为第一像素点,第一排左边第二个像素点为第二像素点,第一排最后一个像素点为第M像素点;
所述窗口处理模块,还用于选取所述第一灰度图片第二排左边第一个像素点为第M+1像素点;第二排最后一个像素点为第2*M像素点;
所述窗口处理模块,还用于重复上述步骤直到选取所述第一灰度图片第N排最后一个像素点为第N*M像素点。
其中,该装置还包括:
所述窗口处理模块,还用于将所述第一窗口在所述第一灰度图片中向右移动u像素,向下移动v像素,得到第二窗口。
其中,该装置还包括:
所述判断模块,还用于若所述像素点分数值大于15000,则将该像素点确定为所述第一灰度图片的角点。
其中,该装置还包括:
所述判断模块,还用于若所述像素点分数值小于-15000,则将该像素点确定为所述第一灰度图片的边缘;
所述判断模块,还用于若所述像素点分数值的绝对值小于15000,则将该像素点确定为所述第一灰度图片的平坦区。
上述方案中,通过第一灰度图片获得第一特征值和第二特征值,再根据第一特征值和第二特征值计算出之前选取的像素点的分数值,再判断该像素点的分数值是否超过15000,若超过则将该像素点确定为第一灰度图片中的角点,大大的提高了检测时的稳定性,设置的第一、第二和第三参数值是通过预先确定的,第一、第二和第三参数值用来调整最后结果,在调整过程中确定了当这三个参数值均为0.5的时候最后结果符合预期,大大的提高了检测雅马哈英文字的角点时的速度和准确率。
具体实施方式
为使本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了提高对雅马哈英文字进行角点检测时的速度与稳定性,如图1所示,本发明实施例提供了一种图像的角点检测方法,该方法包括:
步骤101,获得第一灰度图片,所述第一灰度图片是由图片经过图像处理后获得的。
获取第一灰度图片,第一灰度图片是由图片经过图像处理后获得的,图片是一种包含有雅马哈英文字的图片,图像处理就是将原来彩色的图片中的所有像素经过变换得到灰度值,将对应的灰度值替换掉原先像素点上的颜色,例如:
方式一:获取图片中每个像素点的RGB颜色色值,按照灰度值=R*0.3+G*0.59+B*0.11进行转换,转换后将对应的灰度值替换掉原先像素点上的颜色即为灰度图片;
方式二:获取图片中每个像素点的RGB颜色色值,按照灰度值=(R+G+B)/3进行转换,转换后将对应的灰度值替换掉原先像素点上的颜色即为灰度图片。
步骤102,在所述第一灰度图片中选取任意一像素点,以该像素点为中心创建第一窗口,根据所述第一窗口获得第一灰度值。
在第一灰度图片中选取任意一个像素点,以该像素点为中心创建第一窗口,计算第一窗口中各像素点的灰度值,将这些灰度值相加获得第一灰度值。
步骤103,将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,根据所述第二窗口获得第二灰度值。
将第一窗口在第一灰度图片中移动后得到第二窗口,计算第二窗口中各像素点的灰度值,将这些灰度值相加获得第二灰度值。
步骤104,根据所述第一灰度值和所述第二灰度值计算出第一特征值和第二特征值。
例如:以第一灰度图片左上角为原点,创建一个直角坐标系,之前选择的像素点的坐标为(x,y),再以点(x,y)为中心点创建一个3*3像素大小的窗口,计算该位置的像素灰度值为I(x,y),使该窗口向右滑动u像素,再向下滑动v像素,则移动后的窗口的中心点为点(x+u,y+v),计算移动后的该位置的像素灰度值为I(x+u,y+v),则[I(x+u,y+v)-I(x,y)]就是窗口移动引起的灰度值的变化值,设w(x,y)为位置(x,y)处的窗口函数,表示窗口内各像素的权重,最简单的就是把窗口内所有像素的权重都设为1,有时也会把w(x,y)设定为以窗口中心为原点的高斯分布(二元正态分布),如果窗口中心点像素是角点,那么窗口移动前后,中心点的灰度值变化非常强烈,所以该点权重系数应该设大一点,表示该点对灰度变化的贡献较大;而离窗口中心(角点)较远的点,这些点的灰度变化比较小,于是将权重系数设小一点,表示该点对灰度变化的贡献较小,则窗口移动所造成的像素灰度值的变化量公式为
对于一个角点来说,E(u,v)会非常大。因此,我们可以最大化上面这个函数来得到图像中的角点。用上面的函数计算E(u,v)会非常慢。因此,我们使用泰勒展开式(只有一阶)来得到这个公式的近似形式。对于二维的泰勒展开式公式为:T(x,y)≈f(u,v)+(x u)f
x(u,v)+(y v)f
y(u,v)+...,将I(x+u,y+v)套用上面的公式,可以得到:I(x+u,y+v)≈I(x,y)+uI
x+vI
y,其中I
x和I
y是I的偏微分,接下来继续推导:
把u和v拿出来,得到最终的形式:
其中矩阵M为:
最后是把实对称矩阵对角化处理后的结果,可以把R看成旋转因子,其不影响两个正交方向的变化分量,经对角化处理后,将两个正交方向的变化分量提取出来,就是第一特征值λ1和第二特征值λ2。
步骤105,分别计算所述第一特征值与所述第二特征值的乘积得到第一特征结果,计算所述第一特征值的平方得到第二特征结果,计算所述第二特征值的平方得到第三特征结果。
将第一特征值λ1和第二特征值λ2相乘,得到第一特征结果,也就是λ1*λ2,计算第一特征值的平方,得到第二特征结果,也就是λ12,计算第二特征值的平方,得到第三特征结果,也就是λ22。
步骤106,将所述第一特征结果与第一参数值相乘得到第一分数值,所述第二特征结果与第二参数值相乘得到第二分数值,所述第三特征结果与第三参数值相乘得到第三分数值,所述第一、第二和第三参数值为预先确定的参数值。
将第一特征结果与第一参数值相乘得到第一分数值,也就是k1*(λ1*λ2),将第二特征结果与第二参数值相乘得到第二分数值,也就是k2*λ12,第三特征结果与第三参数值相乘得到第三分数值,也就是k3*λ22,,本实施例预先确定了第一、第二和第三参数值用来调整最后结果,在调整过程中确定了当这三个参数值均为0.5的时候,最后结果符合预期。
步骤107,将所述第一、第二和第三分数值相加,得到像素点分数值。
将第一、第二和第三分数值相加,得到像素点分数值R,也就是R=k1*(λ1*λ2)+k2*λ12+k3*λ22。
步骤108,若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一灰度图片的角点。
判断像素点分数值R是否大于第一预定阈值,则将该像素点确定为第一灰度图片的角点,角点是以该像素点为中心的窗口移动后在水平方向和垂直方向都产生了明显的灰度变化的像素点。
在步骤102中,所述在所述第一灰度图片中选取任意一像素点,该方法包括:
步骤201,所述第一灰度图像有N排M列,有N*M个像素点。
步骤202,选取所述第一灰度图片第一排左边第一个像素点为第一像素点,第一排左边第二个像素点为第二像素点,第一排最后一个像素点为第M像素点。
步骤203,选取所述第一灰度图片第二排左边第一个像素点为第M+1像素点;第二排最后一个像素点为第2*M像素点;
步骤204,重复上述步骤直到选取所述第一灰度图片第N排最后一个像素点为第N*M像素点。
在步骤103中,所述将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,该方法包括:
步骤301,将所述第一窗口在所述第一灰度图片中向右移动u像素,向下移动v像素,得到第二窗口。
将第一窗口在第一灰度图片中向右移动u像素,向下移动v像素,得到第二窗口,例如以第一灰度图片左上角为原点创建直角坐标系,第一窗口的中心点在第一灰度图片中的坐标为(x,y),则移动后第二窗口的中心点在第一灰度图片中的坐标为(x+u,y+v)。
在步骤108中,所述若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一灰度图片的角点,该方法包括:
步骤401,若所述像素点分数值大于15000,则将该像素点确定为所述第一灰度图片的角点。
第一预定阈值在本实施例中为15000,若该像素点分数值R大于15000,则将该像素点确定为第一灰度图片的角点。
在步骤107中,所述将所述第一、第二和第三分数值相加,得到像素点分数值后,该方法还包括:
步骤501,若所述像素点分数值小于-15000,则将该像素点确定为所述第一灰度图片的边缘;
判断像素点分数值R是否小于第二预定阈值,第二预定阈值在本实施例中为-15000,若该像素点分数值R小于-15000,则将该像素点确定为第一灰度图片的边缘,边缘是以该像素点为中心的窗口移动后在水平方向和垂直方向中的单个方向产生了明显的灰度变化的像素点。
在步骤107中,所述将所述第一、第二和第三分数值相加,得到像素点分数值后,该方法还包括:
步骤601,若所述像素点分数值的绝对值小于15000,则将该像素点确定为所述第一灰度图片的平坦区。
判断像素点分数值R的绝对值是否小于第一预定阈值,第一预定阈值在本实施例中为15000,若该像素点分数值R的绝对值小于15000,则将该像素点确定为第一灰度图片的平坦区,平坦区是以该像素点为中心的窗口移动后在水平方向和垂直方向都没有产生明显的灰度变化的像素点。
在本实施例中通过第一灰度图片获得第一特征值和第二特征值,再根据第一特征值和第二特征值计算出之前选取的像素点的分数值,再判断该像素点的分数值是否超过15000,若超过则将该像素点确定为第一灰度图片中的角点,大大的提高了检测时的稳定性,设置的第一、第二和第三参数值是通过预先确定的,第一、第二和第三参数值用来调整最后结果,在调整过程中确定了当这三个参数值均为0.5的时候最后结果符合预期,大大的提高了检测雅马哈英文字的角点时的速度和准确率。
本发明实施例还提供了一种图像的角点检测装置,该装置包括:
采集模块10,用于获得第一灰度图片,所述第一灰度图片是由图片经过图像处理后获得的;
窗口处理模块20,用于在所述第一灰度图片中选取任意一像素点,以该像素点为中心创建第一窗口,根据所述第一窗口获得第一灰度值;
所述窗口处理模块20,还用于将所述第一窗口在所述第一灰度图片中移动后得到第二窗口,根据所述第二窗口获得第二灰度值;
计算模块30,用于根据所述第一灰度值和所述第二灰度值计算出第一特征值和第二特征值;
所述计算模块30,还用于分别计算所述第一特征值与所述第二特征值的乘积得到第一特征结果,计算所述第一特征值的平方得到第二特征结果,计算所述第二特征值的平方得到第三特征结果;
所述计算模块30,还用于将所述第一特征结果与第一参数值相乘得到第一分数值,所述第二特征结果与第二参数值相乘得到第二分数值,所述第三特征结果与第三参数值相乘得到第三分数值,所述第一、第二和第三参数值为预先确定的参数值;
所述计算模块30,还用于将所述第一、第二和第三分数值相加,得到像素点分数值;
判断模块40,用于若所述像素点分数值大于第一预定阈值,则将该像素点确定为所述第一图片的角点。
其中,该装置还包括:
所述窗口处理模块20,还用于所述第一灰度图像有N排M列,有N*M个像素点;
所述窗口处理模块20,还用于选取所述第一灰度图片第一排左边第一个像素点为第一像素点,第一排左边第二个像素点为第二像素点,第一排最后一个像素点为第M像素点;
所述窗口处理模块20,还用于选取所述第一灰度图片第二排左边第一个像素点为第M+1像素点;第二排最后一个像素点为第2*M像素点;
所述窗口处理模块20,还用于重复上述步骤直到选取所述第一灰度图片第N排最后一个像素点为第N*M像素点。
其中,该装置还包括:
所述窗口处理模块20,还用于将所述第一窗口在所述第一灰度图片中向右移动u像素,向下移动v像素,得到第二窗口。
其中,该装置还包括:
所述判断模块40,还用于若所述像素点分数值大于15000,则将该像素点确定为所述第一图片的角点。
其中,该装置还包括:
所述判断模块40,还用于若所述像素点分数值小于-15000,则将该像素点确定为所述第一图片的边缘;
所述判断模块40,还用于若所述像素点分数值的绝对值小于15000,则将该像素点确定为所述第一图片的平坦区。
除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。