Leafsnap论文笔记

进实验室后的第一个任务是暑假独自做两个项目。花了两天时间把论文看了一下做了一些简单翻译,初步理解了整个项目的运作流程。

整个算法是下面4个步骤:分类、 分割、 提取曲率特征、比较

2.分类 Leaf/Non-Leaf Classifying

通过预先判断图片是不是有效树叶图片,提高算法正确率。

使用RBF核的SVM作为分类函数。为了保证gist values尺度不变,把图片大小调整为300×400

在具体实现上,使用libsvm来实现SVM,LEAR来实现gist

3.基于颜色的分割

使用叶子的形状作为独一无二的识别线索。因此树叶分割就显得至关重要了。

通过估计前景色和背景色,将每个像素点进行分类。

具体来说,使用Expectation-Maximization来进行分割

使用post-processed后处理来移除false positive区域 和树叶的茎

3.1使用EM算法来初步分割

使用HSV中的SV空间

介绍了高斯函数的初始化应该设置为什么值,简单的介绍了EM算法交替计算参数直到收敛为止

但是对于松叶不太适用,因为叶子所占图片的比例太小了。解决方法:调整两个高斯函数的权重,在S空间中定义矩形选定区域,在EM算法之前调整权重

使用了一些优化:

1.因为只二分类,计算一个概率之后,另一个只需相剪。

2.只使用一部分像素就可以建立高斯参数

3.2除去false positive的区域

由于不均匀的背景、阴影和干扰物体会造成false positive region(实际是错误的,但是机器认为是正确的区域)

还有一种原因就是外围背景的干扰。

先做轮廓的连接,然后保留轮廓,排除轮廓外其它的边界

3.3去茎

为了统一起见,我们在所有图像上都做了去茎操作。

1.首先,把所有叶突出上的细结构作为一个集合,具体使用顶帽变换。

That(B) = B − B ◦ s,

原图像减去开运算后的图像,开运算就是先做腐蚀运算,再做扩张运算

2.接下来我们判断哪一个候选结构最有可能是茎。

最符合下面两个条件:1.去掉之后不破坏连接部分(仍然保持封闭) 2.考虑大小,选取其中拉伸最大的

4.基于曲率的形状特征

使用多尺度曲率来表示树叶特征值。如图所示包含了两种尺度:粗尺度(大圆),细尺度(小圆)

粗尺度可以区分大体形状,而细尺度可以区分细微例如边缘平滑和有边刺

这里我们两种尺度都使用了

在计算了曲率之后,如何构建特征向量来进行分类呢?

这里我们使用了HoCS(Histograms of Curvature over Scale)

每一行是一种圆的规模,每一行中是该规模的直方图信息。

介绍了不使用IDSC的原因

4.1计算不同规划下的曲率直方图

为了提高准确率,下面举了三种优化方法:

1.要删除的形状造成的“漏洞”问题(例如,由于分割辍学),我们完全填充的轮廓得到从到曲率抽取之前的划分图像;

2.对于尺度不变性,我们从提取曲率前调整这些填充图像中的公共区域的边界;

3.为了减少histogramming artifacts,我们使用双线性插值做软装仓曲率值。

计算下一个轮廓点,利用当前圆与轮廓的交点(沿着某一个方向)

面积法没有看懂,周长法应该是每次跳r

5.使用NN算法识别树叶种类

同种树叶也会产生种间变异。有小变异,也有大变异

特征值是N = 25(圆的大小) × B = 21(柱) = 525(对于面积和周长各525)

直方图比较采用 直方图相交距离 (histogram intersection distance)

we perform leave-oneimage-out species identification, using only the field images as queries, matching

against all other images in the recognition database

6.Leafsnap系统

简单描述了iphone功能界面和后台机器配置。说这个系统很受欢迎,巴拉巴拉

7.讨论和后续方向

接下来好研究一下每一个步骤的具体算法,然后具体去实现。