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 BelongieJitendra Malik 于2002年在他们的文章“Shape matching and object recognition using shape contexts”中提出。这种特征提取方法使得计算机能够衡量形状之间的相似性,并且能够同时得出形状上的点对应关系。

      Shape Context在表示形状时,首先会在形状的轮廓上采样N个点;而对每一个点来说,会利用其周围点的信息,为其提取一个向量,来表示这个点(具体的提取方法可以参考原始的论文)。如此一来,每一个形状便由N个向量来表示了;向量之间是可以衡量距离的,在确定这种距离的衡量方式后,便可以利用匈牙利(Hungarian)算法找出两个形状之间,NN的最佳匹配关系了。当然文章的作者又进一步提出可以使用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)。

那么我们目前为止有什么?假设一个shape有100个点,对于要比较的两个shape,我们有200个直方图。直方图的相似性这里使用了卡方系数(http://blog.csdn.net/cxf7394373/article/details/6955530)

使用卡方系数得出两点的匹配值,那么接下来的事情就顺理成章了,二分图匹配,带权的,KM算法。

它里面的demo的算法我没有读透,但我自己瞎写了个KM算法,运行结果是完全吻合的。而论文里只提到了是二分匹配的问题,匈牙利解法。得到最小权的匹配,就是两个shape的matching结果了。

最后是整个算法的流程:
1 从二值图抽取点集,这个点集必须是顺时针顺序,不是按X轴或Y轴排序的
2 计算shape context,也就是算直方图
3 匹配


那么如何保证旋转不变性?就是正的A和倒着的A是同样的shape,非常简单,只要在统计点数,就是上面那个圆盘,它的0角度是从这个点的切线开始,那么不论图形如何旋转,统计的直方图还是一样。



idsc(inner-distance shape context):

inner-distance <wbr>shape <wbr>context



inner-distance <wbr>shape <wbr>context

文章的图片还是很生动的,讲起这个距离,那里算到距离了呢?上一篇的shape context里面的圆盘,你要定位一个点属于这个圆盘的哪里,两个factor,一是距离,二是角度吧,这个idsc对两方面都做了改进。

关于距离,idsc定义这个距离必须是内部的,就是你通过图形内部的点能够走的最短路径,所以接下来的事情就顺理成章了,最短路算法他用了bellman_ford,我用spfa优化,恩,快了一小点点吧,但不是主要的。

关于角度,定义如图,就是这个最短路径上第一个点与起点的连线和起点的切线夹角,同样是旋转不变性。
inner-distance <wbr>shape <wbr>context
最后一点优化就是matching算法的优化,经仔细观察,这个matching还是有点规律的嘛,比如说啊,两个序列总不能交叉匹配,你看看匈牙利算法的匹配结果
inner-distance <wbr>shape <wbr>context

于是产生顺序匹配,也就是跳过的点就跳过了,跳过的点,给予惩罚,这一个算法至今没有看懂,因为paper上没有详细描述。就这样了。

这是idsc的

inner-distance <wbr>shape <wbr>context

demo: here

paper:Shape Classification Using the Inner-Distance

最后说一句吧,这个领域优秀的论文太多,牛人太多,这么瞎搞一下根本弄不出东西来,还是脚踏实地吧。



  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值