2015-03-09 09:18:07 qq_25352981 阅读数 8004

本文实验为自己原创,转载请注明出处。

本人为研究生,最近的研究方向是物体识别。所以就将常用的几种特征提取方式做了一个简要的实验和分析。这些实验都是借助于openCV在vs2010下完成的。基本上都是使用的openCV中内置的一些功能函数。

1. SIFT算法

尺度不变特征转换(Scale-invariant feature transform或SIFT)算法是一种特征提取的方法。它在尺度空间中寻找极值点,并提取出其位置、尺度、旋转不变量,并以此作为特征点并利用特征点的邻域产生特征向量。
SIFT算法对于光线、噪声、和微小视角改变的容忍度相当高,且对于部分遮挡的物体也有较高的识别相率。
2. 实验过程

利用SIFT算法进行特征提取,然后进行物体识别,以下是实验的相关结果。(红色圆圈表示匹配成功的特征点,圆圈的大小代表匹配程度的多少,圆圈半径越大,代表匹配程度越高,绿色的方框为识别出的物体。)






以上几个实验中,基本上可以正确的识别出罐子,玩偶,蜘蛛侠,鞋子和玩具车。但是,对于苹果的识别实验,则未能达到理想的要求。实验结果如下。


由实验结果可以看出,特征点的匹配大部分都是错误的,且未能正确识别出图片中的苹果。对苹果使用SIFT算法进行特征提取,结果如下图(红色箭头表示特征点,箭头的起始位置为特征点位置,箭头的方向为特征点最大梯度方向,箭头的长度代表该特征点的权重)。


通过上图还可以发现,苹果的边界特征点都仅仅有很小的权重(箭头很短),于是尝试设置一个阈值将这些特征点去除,则剩下的大部分都为准确的特征点。选取阈值为1.7,将权值小于1.7的特征点剔除,实验结果如下:


从上图可以发现,特征点的提取已经比较准确,且基本没有边界特征点带来的干扰。但是,特征点的数量太少,这种解决方法,依旧无法完成苹果的识别。

3.实验结果分析

经过查阅SIFT算法作者的文章,发现文章中提出,SIFT算法适合于识别旋转度达60度的平面形状,或是旋转度达到20度的三维物体。

经过查询其他文章,发现很多人总结的经验表明,SIFT算法对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力

4.尝试其他解决方法

以下尝试几种openCV中常用的特征提取算法。

FAST

FAST特征点检测是公认的比较快速的特征点检测方法,只利用周围像素比较的信息就可以得到特征点,简单,有效。该方法多用于角点检测。

FAST特征检测算法来源于corner的定义,这个定义基于特征点周围的图像灰度值,检测候选特征点周围一圈的像素值,如果候选点周围邻域内有足够多的像素点与该候选点的灰度值差别够大,则认为该候选点为一个特征点。

以下是利用FAST算法对鞋子和苹果进行特征提取(黑色圆圈为提取得到的特征点)。



由苹果和鞋子的特征点提取对比试验可以发现,该算法对于鞋子可以提取众多特征点,但是对于苹果仅仅能提取很少量的特征点,可见该方法依旧不适合用于苹果特征点的提取。

分析原因可以发现,苹果表面颜色和灰度是光滑过渡,所以该算法无法有效的提取特征点。

MSER

最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测。该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念。

MSER的基本原理是对一幅灰度图像(灰度值为0~255)取阈值进行二值化处理,阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会被淹没,如果从天空往下看,则大地分为陆地和水域两个部分,这类似于二值图像。在得到的所有二值图像中,图像中的某些连通区域变化很小,甚至没有变化,则该区域就被称为最大稳定极值区域。这类似于当水面持续上升的时候,有些被水淹没的地方的面积没有变化。

利用此算法,同样对苹果和鞋子两个物体进行检测,结果如下




通过对比试验发现,苹果的特征区域依旧非常少。可见该算法依旧不适合于苹果的特征提取。

分析原因可以发现,苹果的表面的灰度为比较光滑的过渡,当阈值不断增大时,陆地和水面的边界也在平缓的变化,所以很难得到一个最大稳定的极值区域。

STAR

利用STAR特征提取算法,实验结果如下:




由实验结果可以看出,该方法依旧无法提取出苹果的特征点。

5.总结分析

由上面的几个试验可知,以这些方法,都无法对苹果进行有效的特征提取。原因基本上都是因为苹果表面颜色过渡比较光滑,其表面大多数点和周围的点颜色差别太小,不宜作为特征点。

通过这几个实验还可以发现,无论是哪种特征点提取的方法,提取的特征点都位于苹果的上边部分和苹果的右边部分,即不同的特征提取算法提取的特征点的位置还是极为相似的,由此也可以看出不同的特征提取算法虽然方法不同,但是也存在着一定的相似性。


本人刚刚开始从事物体识别和特征提取的研究不久,还算是个初学者,为了提高自己,也为了和大家多多的交流并互相学习,将最近的一些实验发布出来,欢迎各位批评指正。也非常欢迎和我交流。


2015年3月9日   西安交通大学


2018-03-26 12:46:11 tony2278 阅读数 446

MSER提取过程点击打开链接

1.使用一系列灰度阈值对图像进行二值化处理
2.对于每个阈值得到的二值图像,得到相应的黑色区域与白色区域
3.在比较宽的灰度阈值范围内保持形状稳定的区域就是MSER,判断标准为dA/dt

David Nister等人于2008年在论文“Linera Time Maximally Stable Extermal Regions”对J.Matas提出的MSER算法进行了改进,使其在时间复杂度方面比原算法要小得多,OpenCV中提供的MSER模块算法就是利用该算法实现的。

David Nister等人提出的算法思路如下:

1 像素点排序→2 极值区域生成→3 稳定区域判定→4 区域拟合→5 区域归一化

利用MSER算法提取车牌区域的OpenCV代码

代码先使用MSER算法提取出图像的区域,然后对这些区域进行形态学闭操作,使其成较为完整的区域,再对这些区域求外接矩形,根据外接矩形的参数去判断是否是车牌区域。


opencv2中MSER区域提取  code




2015-10-31 15:35:02 robin1987z 阅读数 1921

最大稳定极值区域(MSER)常用来提取图像二值化后稳定的联通区域,特别在OCR项目中的文字提取运用广泛。

MSER的基本思想就是,在灰度空间(0-255)内取一段连续阈值分别对图像进行二值化处理,接着在分别求取二值化后图像的灰度连通区域,并找出随阈值变化连通区域不发生显著变化的连通域。

阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会被淹没,如果从天空往下看,则大地分为陆地和水域两个部分,这类似于二值图像。在得到的所有二值图像中,图像中的某些连通区域变化很小,甚至没有变化,则该区域就被称为最大稳定极值区域。这类似于当水面持续上升的时候,有些被水淹没的地方的面积没有变化。它的数学定义为:

q(i)=|Qi+△-Qi-△|/|Qi|            (1)

其中,Qi表示阈值为i时的某一连通区域,△为灰度阈值的微小变化量,q(i)为阈值是i时的区域Qi的变化率。当q(i)为局部极小值时,则Qi为最大稳定极值区域。

显然,实现MSER最直接的方式是以不同阈值对图像进行二值化,求取各个阈值下二值化图像的联通域,同一块位置的连通域在一段阈值区域内公式1的值为局部最小值即为MSERs。但是这样的计算方式过程繁复、计算量大,OpenCV里的MSER实现是采用了组件树的方法,采用的也不是公式1,而是以下公式:

q(i)=|Qi-Qi-|/|Qi-|            (2)

Component Tree原理
当前元素和所有周围邻近当前区域的元素并且小于当前元素的区域都属于该区域
从最小值Xi像素开始建立一个region,如果Xi的邻域亮度值等于该像素的亮度值,则将Xi合并进邻域像素所在的region(且父节点是邻域像素父节点),如果Xi邻域的像素值小于Xi的像素值,则将邻域像素归入当前region,并将当前region作为邻域像素region的根节点(且邻域像素父节点指向当前像素的父节点),直到遍历完所有像素为止。


具体OPENCV的实现方式可以参考以下博文,非常详细:

http://blog.csdn.net/zhaocj/article/details/40742191




2019-10-21 15:19:41 Shomlin 阅读数 98

1、VLFeat:使用C语言编写提供C语言和Matlab两种接口,可以实现大量计算机视觉算法,其中包括:

(1)常用图像处理功能,包括颜色空间变换、几何变换(作为Matlab的补充,一般可用于数据集的扩充),常用的机器学习的算法,包括GMM、SVM、KMeans等,常用的图像处理plot工具。

(2)特征提取,包括Covariant、detectors、HOG、SIFT、MSER等。VLFeat提供了一个vl_covdet()函数作为框架,可以方便的统一所谓“co-variant feature detectors”,包括了DoG, Harris-Affine, Harris-Laplace并且可以提取SIFT或raw patches描述子。

(3)超像素(Superpixel)分割,包括常用的Quick shift, SLIC算法等

(4)高级聚类算法,比如整数KMeans:Integer k-means (IKM)、hierarchical version of integer k-means (HIKM),基于互信息自动判定聚类类数的算法Agglomerative Information Bottleneck (AIB) algorithm等

(5)高维特曾匹配算法,随机KD树Randomized kd-trees

点击链接可以查看VLFeat完整功能列表:、http://www.vlfeat.org/matlab/matlab.html

2、MexOpenCV:让Matlab支持调用的OpenCV

由石溪大学Kota Yamaguchi教授提出,最近已经合并到了OpenCV

最近(大概是9、10月)已经merge到了OpenCV主包,是的OpenCV的功能越来越强大。具体功能不详细介绍。

3、Peter Kovesi工具箱

这个Matlab的工具箱是由一位叫Peter的人所写,其中包括很多.m的文件,全部Matlab实现,无需编译安装,支持Octave(如果没有Matlab的话,有了这个工具箱也可以在Octave下进行图像处理了)。这个工具箱主要以图像处理算法为主,附带一些三维视觉的基本算法,列一些包括的功能:

(1)Feature Detection via Phase Congruency

(2)Spatial Feature Detection,Harris、Canny之类的特征算法

(3)Edge Linking and Line Segment Fitting,边缘特征和线特征的各种操作

(4)Image Denoising,图像降噪

(5)Surface Normals to Surfaces,从法向量积分出表面

(6)Scalogram Calculation

(7)Anisotropic diffusion,著名的保边缘平滑算法

(8)Frequency Domain Transformations,傅立叶变换

(9)Functions Supporting Projective Geometry,透视几何、三维视觉的一些算法

(10)Feature Matching、特征匹配

(11)Model Fitting and Robust Estimation、RANSAC

(12)Fingerprint Enhancement,指纹图像增强

(13)Interesting Synthetic Images,一些好玩儿的图像生成算法

(14)Image Blending,图像融合

(15)Colourmaps and colour conversions,颜色空间算法

可以在网站上http://www.csse.uwa.edu.au/~pk/research/matlabfns/看到全部功能的介绍和下载,非常推荐试一下,也可以学到不少算法。

MSER

阅读数 901

没有更多推荐了,返回首页