shape context matlab,形状上下文(shape context)算法完全解读

形状上下文(Shape Context)算法完全解读

前言

一. 轮廓提取(Canny Edge Detection)和轮廓点采样(Jitendra's Sampling)

二. 形状上下文(Shape Context)直方图矩阵的构建及其相似度度量方法

三. 局部外观(Local Appearance)描述矩阵的构建及其相似度度量方法

四. 匈牙利匹配(Hungarian)策略

五. 伪点匹配

六. 薄板样条插值(Thin Plate Spline)进行轮廓点拟合

七. 损失函数计算和k-NN分类器进行分类

八. 总结

九. 一些改进

前言

一般来说,在计算机视觉任务中,形状匹配可以分为

基于特征(Feature-based): 基于傅里叶变化、特征点的、骨架的等等。

基于亮度 (brightness-based): 更偏向于使用像素的灰度值来进行形状匹配。

形状上下文作为一种基于特征的描述子,根据两幅图片轮廓采样点之间的相互关系(如距离、梯度),提供了一种较为鲁棒的形状匹配策略。

下面我们一步一步来探讨形状上下文算法。

一. 轮廓提取(Canny Edge Detection)和轮廓点采样(Jitendra’s Sampling)

轮廓提取

对于轮廓的提取,我们采用canny算子,主要步骤分为

高斯平滑

sobel提取梯度幅值和方向

非极大抑制

双阈值检测以及连接(滞后门限处理)

这里不再细说,下面带大家看一看轮廓采样这一步骤。

轮廓采样

对于一般图像,如果采样给定个数的像素点,我们可以使用均匀采样、随机采样、等间隔采样等方式。但是对于二维轮廓点集来说,因为它的分布并不是均匀的,所以这些方法并不适用。

图1、图2是使用canny算子提取的轮廓,图3、图4是随机采样100个点得到的采样结果,可以看到采样过后轮廓信息出现了一定的丢失。如果我们想得到图5、图6这样的采样结果,该如何去做呢?

d77dc52a0febe47168b1ce348bc7a21c.png

一种朴素的想法就是:我们是否可以将轮廓点对之间的欧式距离考虑到采样步骤中,得到一个 相对均匀(或者说是,点对间足够分散) 的的轮廓采样结果呢?比如说,每次剔除最短距离点对中的任意一个点,并解除它与其他点之间的距离关系,依次重复,直至点对只剩下所需数目的点集。

这个就是Jitendra’s sampling的思路,下面附上Jitendra采样的流程:

b1a40d089635771752728348944ef4e5.png

一些Tips:

第一步需要对轮廓点进行随机重排,这样子可以保证删除点对的随机性,避免删除时产生连锁反应(lab>lbc>lcd>lde,如果每次删除最小点对右值,则删除步骤可能变成了e→d→c→b→a)。

其中阈值(k = 3)主要是针对于轮廓点过多而预设的一个倍数关系。如果轮廓点(I)>3×采样点(N),直接对轮廓点集随机采样,取前3N个就行。

可以先对点对距离进行排序,然后逐一删除符合条件(点对中的每个点都没有被删除)的右值(左值均可,规则统一就行)。

下面附上论文样例中这部分的Matlab源码:

function [xi,yi,ti]=get_samples_1(x,y,t,nsamp);

% [xi,yi,ti]=get_samples_1(x,y,t,nsamp);

%

% uses Jitendra's sampling method

N=length(x);

k=3;

Nstart=min(k*nsamp,N);

ind0=randperm(N);

ind0=ind0(1:Nstart);

xi=x(ind0);

yi=y(ind0);

ti=t(ind0);

xi=xi(:);

yi=yi(:);

ti=ti(:);

d2=dist2([xi yi],[xi yi]);

d2=d2+diag(Inf*ones(Nstart,1));

s=1;

while s

% find closest pair

[a,b]=min(d2);

[c,d]=min(a);

I=b(d);

J=d;

% remove one of the points

xi(J)=[];

yi(J)=[];

ti(J)=[];

d2(:,J)=[];

d2(J,:)=[];

if size(d2,1)==nsamp

s=0;

end

end

二. 形状上下文(Shape Context)直方图矩阵的构建及其相似度度量方法

对于轮廓中的点对,哪些信息对于形状匹配起到贡献呢?

距离,

角度,

等…

那么对于每个轮廓点,我们可以构建以其为中心的极对数坐标系 log-polar coordinates(包括12个角度区域和5个距离区域,如下图c),再将它周围的轮廓点映射到每个区域内,然后统计落在每个区域的轮廓点数,最后进行归一化处理(即除以落在所有区域中的轮廓点数)。这样子我们就生成了形状上下文直方图矩阵。如下图所示,我们可以直观的看到,相似度d-e > 相似度d-f。

7a0764b07f9fc92421fc07a0b97406ae.png

一些Tips:

采用极对数坐标的好处:主要使得描述子对邻近采样点更敏感,强化局部特性。

首先求出点对的距

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值