shape context-形状上下文
形状上下文是一种很流行的形状描述子,原始论文已经被引用上千次了。自然,很多研究者进行了诸多改进,但还是不能克服shape context一些自身的缺点。
下面先简单介绍形状上下文的一个基本原理:
形状上下文是基于物体轮廓样本点进行描述的,所以,前期的预处理工作包括:边缘提取、采样(均匀采样即可),得到一个物体形状的点集合:。首先对单个点进行形状信息描述,每个点的形状信息由所有其他点与之形成的相对向量集表示,为了方便计算统计,采用直方图表示这些向量,如下图(c):
(c)图只是表示处于极坐标原点的样本点的形状信息,周围与它相邻的点(在极坐标覆盖的范围之内)落于不同的小格子(bin),就表示不同的相对向量,这些相对向量就成为这个点的形状上下文。实际情况中,会有一些点不在极坐标的覆盖范围内(范围可以根据需要改变),所以,这个在一定范围上决定了形状描述的局部性。在原论文中,极坐标基本上覆盖住点集最大距离的一半。观察图(a)和图(b)中菱形点和方块点,他们的形状上下文(d)、(e)图,基本上一致,而三角形点的形状上下文就有不同,这和我们实际的观察基本上是一致的。
剩下的工作就很好理解了,只要每个点的形状上下文出来了,那么对所有点的形状上下文组合起来就可以形成整个物体的形状上下文了。其实基本思想就是这样了,后面的工作就是调整到已有的框架(形状匹配算法等)。
对于两个形状 I , P ,计算它们之间每个样本点(如g , h )之间的差别,即形状上下文的差别
在得到每个点之间的差别以后,可以形成一个代价矩阵cost,然后运行一个最有匹配算法(如匈牙利算法等)找个一个最优匹配,使整个代价最小,最后基于这个最优匹配,得到整个形状代价,这个可以作为两个形状之间的差别衡量,代价越小,形状越相似。形状代价如下:
不过到这里还只是找到一个对应关系而已,需要进一步用一个变换 T 来衡量形状之间的转变,所以,最后的形状距离可以用估计的变换来表示,如下:
最后基于这个形状距离可以基本衡量两个物体形状之间的区别,进一步进行物体识别方面的工作。
优点:
充分利用上下文信息,在非刚性物体匹配中,具有很好的鲁棒性。
主要缺点:
1、标准的形状上下文不能很好地解决物体类内部之间的变形,后期改进的基于内部距离的形状上下文改善了一点;
2、对于有背景、噪声点过多的情况,匹配效果很不好。
参考:
http://en.wikipedia.org/wiki/Shape_context
S. Belongie, J. Malik, and J. Puzicha (April 2002). "Shape Matching and Object Recognition Using Shape Contexts"
Shape Context是一个用于形状识别的,非常经典的特征(一串便于计算机处理的数字)提取方法,它由Serge Belongie和Jitendra Malik 于2002年在他们的文章“Shape matching and object recognition using shape contexts”中提出。这种特征提取方法使得计算机能够衡量形状之间的相似性,并且能够同时得出形状上的点对应关系。
Shape Context在表示形状时,首先会在形状的轮廓上采样N个点;而对每一个点来说,会利用其周围点的信息,为其提取一个向量,来表示这个点(具体的提取方法可以参考原始的论文)。如此一来,每一个形状便由N个向量来表示了;向量之间是可以衡量距离的,在确定这种距离的衡量方式后,便可以利用匈牙利(Hungarian)算法找出两个形状之间,N对N的最佳匹配关系了。当然文章的作者又进一步提出可以使用TPS(Thin Plate Spline)变换对待匹配的形状进行不断的形变,以取得更佳的匹配结果,这里便不做介绍。
相同形状轮廓点的匹配
不同形状轮廓点的匹配
利用Shape Context进行字符识别
利用Shape Context进行字符识别的过程,便是找出与待识别形状最相似模板库图像的过程。这个过程虽然思路比较简单,不过其中也有一些需要注意的东西,这里写一下我自己的做法。
1)模板字符库的准备由于Shape Context可以在形状发生倾斜、位移、大小等平面变换时,都可以进行比较良好的匹配。所以与基于统计的模型不同,使用Shape Context特征的每一种字符只需要较少的模板就可以进行识别了。这里的实验对每一种字符仅使用一到两个模板,每一个模板都是由手工绘制的单像素轮廓图。
用于识别的字符模板库
2)形状点的采样
在使用Shape Context提取形状的特征时,首先会在形状轮廓上采样N个点。而实际输入图像的轮廓点个数一般是未知的,而根据图像大小的不同,这些点的坐标的大小也是不同的,因此需要对这些情况进行一些预处理。
当输入图像的轮廓点足够时,首先可以将图像中包含轮廓的最小区域截取出来,然后将这个区域中的轮廓采样N个点,最后将这些点的坐标保持长宽比缩放到[0-1]区间,以完成尺度归一化的目的。
对输入图像的轮廓点进行采样及归一化
而当输入图像的轮廓点个数不足时,我们可以将图像进行放大,待轮廓点个数足够时,再按上面的方法进行采样。不过需要注意的是,图像放大时候,原来的形状轮廓可能会变粗,因此还需要进行图像的细化操作,使得轮廓的宽度尽量保持单像素宽。
输入图像轮廓点个数不够时的处理
字符识别程序的演示
shapematching的算法最早可追溯到上个世纪七八十年代,其种类甚多,首先分类:contour和skeletal,skeletal的matching,白翔做最好,他那篇论文光是osb就能读上好久,而且代码极为复杂。至于contour最为广泛流传的当属shape context由Serge Belongie提出,后图像处理大牛凌海滨改进成为idsc(inner-distance shape context)。
那么如何保证旋转不变性?就是正的A和倒着的A是同样的shape,非常简单,只要在统计点数,就是上面那个圆盘,它的0角度是从这个点的切线开始,那么不论图形如何旋转,统计的直方图还是一样。
idsc(inner-distance shape context):