本发明属于图像处理及计算机视觉中的一种应用技术。在从基元图至图像的符号表示这一过程中,线条或边界的角点提取是非常重要的。 角点提取技术很早就得到了研究。为了实现立体视觉及运动检测等研究,需利用图像上的特征点,如角点等。Kitchen和Resonfeld利用了微分算子提取了灰度图上的角点,而Zuniga和Haralick则利用三次多项式的拟合来求取角点。从灰度图上提取角点不仅计算量大,并易受噪声影响,把一些孤立噪声点当作角点提取出来。
从原始图像抽取线条或团块后再提取角点进行景物的描述,这是目前目标识别、景物理解工作的常用方法。为提取二值图上的角点,Rosenfeld最早提出用k-曲率的方法。但它过于简单,效果不好。以后Asada在求曲率时采用了高斯平滑,同时还在曲线上找出其他一些反映曲率的特征点。Langricle用三次多项式来拟合曲线,并由此检测曲线上的不连续性,等等。这些工作都未考虑检测速度,只是把研究重点放在检测效果上。
快速以至实时提取角点同样是研究者们所关心的。Medioni提出用B-样条来拟合曲线。其算法比以前地方法简单,效果也较好。他取5个考察点,需要大约20多次的乘法和加法,1次除法。该方法是目前所见到的最简单、快速,同时检测效果也不错的方法。该方法若用硬件实现其代价是昂贵的,软件实现则不可能达到很高的处理速度。同时,仅用5个考察点对取得好的处理结果来说也是不够的,而增多考察点处理速度将更慢。
本发明的目的是提出一种采用查表技术提取角点的方法。这方法解决了角点提取算法的处理速度与检测质量之间的矛盾。使得处理速度既快,处理效果又好。根据这方法制作的角点提取处理器能以实时的速率来处理512×512分辨率的实际二值图象。
本发明的基本构思是:首先建立一个反映曲线形状与角点/非角点之间对应关系的查找表。查找表以4-连通边界链码为基础构成。在实施角点提取之前预先填充查找表,检测时只要直接查表就得到角点/非角点的结果,实现了处理速度快,效果又好。
可以选择任何一种高质量的算法来填充这个查找表。另外,根据人的知识(Human Knowledge)来填充查找表可取得很好的处理效果,这时采用一种分层的填表方式以提高知识采集的效率。
根据该方法设计的实时角点提取处理器包括两个部分:跟踪和角点提取。其中跟踪部分由存储器,有限状态自动机,两个加减计数器,串并转换寄存器,标记计数器构成。角点提取部分由边界码移位寄存器和角点查找表构成。
图象名testroadairport运行时间0.011s0.022s0.061s角点数目77342555边界码长度78914294285
本发明在386/33M上用Turbo C编制的程序进行实施,对几幅图像(分辨率为256×256)进行了角点提取。所用的时间及得到的角点数如上表所示:
该方法用硬件实施可以对512×512分辨率的实际二值图象达到电视速率(每秒25帧)的处理速度。
以下结合附图对本发明作进一步说明。
图1是链码不同但形状相同的8种情况。
图2是曲线编码方式。
图3是参考点的链码表示。
图4是实时角点提取处理器的硬件结构。
用查表技术进行角点提取,关键问题是怎么设置表的大小,即应取多少考察点较合适。毫无疑问,多取一些点可得到更好的处理效果。但是点多了将带来两个严重的问题:1).使表的大小超过实际的可能。2).使知识的采集工作非常困难。
以往基于曲率计算的方法一般采用5-7个点进行考察,主要是顾及计算量和角点提取的精度。它们虽然在某些情况下不能取得期望的效果,但大体上是可用的。以这一事实作为参考,可以取9-13个点作为考察点。这样可取得比以往方法更好的处理效果,同时又保证提取角点的速度很快。以后的分析和实践表明这里要求的存储器大小和知识采集工作量均是现实的。
还可以通过一些方法来减少查找表的存储量。在边界码移位寄存器6和角点查找表9间可以设置一个地址变换器7,其功能是缩短地址的长度,如图4所示。其原理说明如下:
对于轴对称,镜对称,中心对称等情况,曲线的链码表示不同,但所表示的形状是一样的。如以3个考察点为例,图1所示的8种情况(○表示候选点,□表示候选点以外的考察点),其链码不一样,但曲线的形状却完全一样,因而角点也是一样的。由于这个原因,存储量还可以减小8倍。
下面我们讨论地址映照的一些细节。
设曲线链码的4-连通编码方式如图2所示:
于是13个参考点的12节链码将排列如图3所示(为说明方便以后称之为CCS):
分析表明以下四种操作作用于链码串不会改变曲线的形状:
1.将奇位链码全部取反。
2.将偶位链码全部取反。
3.对链码为01或10的取反。
4.对链码为00或11的取反。
由这四种操作可形成相同形状,但有不同链码的8种曲线。可以取其中之一作为代表。确切地说,取其中链码表示最小的,称它为代表链码。
则任意链码转换为代表链码的方式叙述如下(n为考察点的数目):
1).IF位2n-1是1,THEN奇位取反。
2).IF位2n-2是1,THEN偶位取反。
3).IF位2n-3是1,THEN链码的两位异号者取反。
若经过1).2).后位2n-3和位2n-4异号,则经过1)、2)、3)后可以使位2n-1,2n-2,2n-3为0。事实上,经1),2)后CCS不能为0011xxxxxxxxxxxxxxxxxxx。因为00和11表示相反的方向,线条上的链码不可能向前走后又立即退回原位。
就目前所能得到的高速存储器芯片来说,256K或更大一些的芯片是不成问题的。但如此大的知识量,知识的获取是一个问题。可以选择任何一种高质量的算法来填充这个查找表,如Asada的高斯平滑方法,Langricle的多项式拟合方法等。另外,根据人的知识(Human Knowledge)来填充查找表可以取得很好的处理效果。22n-5种情况如一一判别对人来说是非常困难的。这时采用一种分层的填表方式可以提高知识采集的效率。
先从n=3开始,这里○表示候选点,□表示候选点以外的考察点,有2种情况:
其中(A)不会是角点,而(B)有待进一步考察。
然后取n=5。由于(A)已确定不是角点,所以只有从(B)延伸出的下列9种情况要进一步考察:
其中(1)和(8),(3)和(5),(4)和(9)形状是一样的。图中“×”表示不会是角点,“√”表示是角点,而“?”表示有待更多的考察点来确定,“*”表示这个形状与其他某个形状相同。
对于n=7,n=9,n=11,n=13时的情况可依此类推。
从知识获取的方法中还可以得到启发,查表能分级进行。可以先取9个考察点,这时只要查一个大小为8K存储单元的表,对于其中不确定的4种情况,则需取更多的考察点来分析,如取13个点,则可以在角点查找表9之后设置一个辅助查找表8,它同时也需要取用边界码移位寄存器6的结果,如图4所示。辅助查找表8的大小是4×22×(13-9)=1K存储单元。显然,采用这种分级查表的技术以后,参考点的数目可以大大的扩展,这对提高角点提取的质量是很有利的,而对总体速度影响很小。采取这种分级查表技术以后,1bit的表是不够的。可以采用8bit作为表的一个单元,这可以存放更多的信息。如曲线上有的点不是角点,但可用来作为表征曲线的代表点等。
根据该构思设计的角点提取处理器如图4所示。图象进入存储器1以后就可以进行跟踪和角点提取。跟踪部分的主要工作在于有限状态自动机3对加减计数器2的控制。从存储器1逐个读出的图象数据在串并转换寄存器4转变为并行的形式,通过有限状态自动机3去控制跟踪,写标记等。标记计数器5用于区分标记。用于对不同连通区进行区别。从有限状态自动机3得到的边界码通过边界码移位寄存器6,地址变换器7,然后查表得到当前点是否为角点的信息。