图像识别算法surf源码(图像分类最新算法)
本文目录一览:
- 1、matlab中mesh和surf有什么区别
- 2、opencv 用python 使用surf算法计算出了最后的结果,绘出了图像,之后怎么找出目标位置
- 3、基于opencv-算法设计
- 4、surf算法C语言编写,要做嵌入式开发,不要C++和基于OPENCV的
- 5、求助SURF算法的源代码
- 6、Surf的SURF算法
matlab中mesh和surf有什么区别
一、用处不同
mesh()用于绘制不是特别精细的三维曲面网格图,同一层面的线条用相同的颜色表示。surf()用于绘制比较光滑的三维曲面网格图,各线条之间的补面用颜色填充。
二、曲面着色风格不同
例如:
[X,Y] = meshgrid(-2:.2:2, -4:.4:4);
Z = X .* exp(-X.^2 - Y.^2);
figure(1)
surf(X,Y,Z)
figure(2)
mesh(X,Y,Z)
surf 黑色线,彩色面
mesh 彩色线,白色面
三、属性不同
命令获取两个函数所创建surface对象的属性:
get(mesh(peaks))
get(surf(peaks))
稍加对比就可以知道,二者的差别只有EdgeColor、FaceColor、FaceLighting、EdgeLighting这四个属性。对于普通的绘图(不加光线),其实只有前两个属性(Edge和Face的颜色)不同。
opencv 用python 使用surf算法计算出了最后的结果,绘出了图像,之后怎么找出目标位置
这个用不着SURF。只需要聚色彩就可以了。芬达主要由橙色与黑色组成。只需要按橙色与黑色设计两个向量指标,立刻就可以看出来,只有芬达同时符合这两个峰值。
你显然没有做过数据处理的经验。这个东西。甚至用不着opencv的核心功能。只需要用它的图像采集然后处理一下图像就可以了。
当然芬达是一个对象。你还需要将对象与背景分享出来。这个时候,可以使用一些类似人脸识别的算法。
但是换作是我自己。显然不会这样做。我只需要计算颜色距离相似度。把相似的颜色自动分成区域。然后计算区域的重心与离散度。就可以轻松分离出哪些区域是背景,哪些是对象。
基于opencv-算法设计
opencv里面是没有那种算法的图像识别算法surf源码,它只是提供一些常用的计算函数。具体的算法图像识别算法surf源码,由于图像识别算法surf源码你的需求比较特殊,相信应该没有现成的瑕疵检测算法,好在你的需求难度应该不大,通过常用的图像识别算法,比如纹理算法(Gabor算法)、SURF算法就可以找到白纸上瑕疵,这些瑕疵都是相当于一张白纸的特征点嘛!基本思想就是借用图像识别、匹配过程的思想——找图像上的特征点。白纸一般是提取不出特征点的,要是提取出来图像识别算法surf源码了,那就说明白纸上有东西(洞、褶皱或者异物)。
surf算法C语言编写,要做嵌入式开发,不要C++和基于OPENCV的
surf借鉴了sift中简化近似的思想,将DOH中的高斯二阶微分模板进行了近似简化,使得模板对图像的滤波只需要进行几个简单的加减法运算,并且,这种运算与滤波模板的尺寸有关。实验证明surf算法较sift算法在运算速度上要快3倍左右。
1 积分图像
surf算法中要用到积分图像的概念。借助积分图像,图像与高斯二阶微分模板的滤波转化为对积分图像的加减运算。积分图像(Integral Image)的概念是由viola和Jones提出来的,而将类似积分图像用于盒子滤波是由Simard等人提出。
积分图像中任意一点(i,j)的值为ii(i,j)为原图像左上角到任意点(i,j)相应的对角线区域灰度值的总和即:
公式中,I(x`,y`)表示原图像中点(i`,j`)的灰度值,ii(x,y)可以由下面两公式迭代计算得到:
公式中,S(x,y)表示一列的积分,且S(i,-1)=0,ii(-1,j)=0.求积分图像,只需对原图像的所有像素素进行一遍扫描。下面的代码为c++语言的实现
pOutImage[0][0] = pInImage[0][0];
for(int x = 1, x nWidth; i++)
{
pOutImage[x][0] = pInImage[x-1][0] + pInImage[x][0];
}
for(int y=1; y nHeight ;y++)
{
int nSum = 0;
for(int x=0; x nWidth;x++)
{
nSum = pInImage[x][y];
pOutImage[x][y]= pInImage[x][y-1]+nSum;
}
}
如图表示,在求取窗口w内的像元灰度和时,不管窗口W的大小如何,均可利用积分图像的4个对应点(i1,j1)(i2,j2)(i3,j3)(i4,j4)的值计算的到。也就是说,求取窗口W内的像元灰度和与窗口的尺寸是无关的。窗口W内的像元的灰度和为
Sum(W)= ii(i4,j4) -ii(i2,j2) - ii(i3,j3) + ii(i1,j1)
下面看以截图,相信都可以看懂
关于矩形区域内像素点的求和应该是一种简单重复性运算,采用这种思路总体上提高了效率。为什么这么说呢?假设一幅图片共有n个像素点,则计算n个位置的积分图总共的加法运算有n-1次(注意:可不是次哦,要充分利用递推思想),将这些结果保存在一个跟原图对应的矩阵M中。当需要计算图像中某个矩形区域内的所有像素之和是直接像查表一样,调出A,B,C,D四点的积分图值,简单的加减法(注意只需要三次哦)即可得到结果。反之,如果采用naive的方式直接在原图像中的某个矩形区域内求和,你想想,总共可能的矩形组合有多少? !!且对于一幅图像n那是相当大啊,所以2^n
那可是天文数字,而且这里面绝大部分的矩形有重叠,重叠意味着什么?在算求和的时候有重复性的工作,其实我们是可以有效的利用已经计算过的信息的。这就是积分图法的内在思想:它实际上是先计算n个互不重叠(专业点说是不相交)的矩形区域内的像素点求和,充分利用这些值(已有值)计算未知值,有点类似递推的味道...这就完全避免了重复求和运算。
这样就可以进行2种运算:
(1)任意矩形区域内像素积分。由图像的积分图可方便快速地计算图像中任意矩形内所有像素灰度积分。如下图2.3所示,点1的积分图像ii1的值为(其中Sum为求和) :
ii1=Sum(A)
同理,点2、点3、点4的积分图像分别为:
ii2=Sum(A)+Sum(B); ii3=Sum(A)+Sum(C); ii4=Sum(A)+Sum(B)+Sum(C)+Sum(D);
矩形区域D内的所有像素灰度积分可由矩形端点的积分图像值得到:
Sum(D)=ii1+ii4-(ii2+ii3) (1)
(2) 特征值计算
矩形特征的特征值是两个不同的矩形区域像素和之差,由(1)式可以计算任意矩形特征的特征值,下面以图2.1中特征原型A为例说明特征值的计算。
如图2.4 所示,该特征原型的特征值定义为:
Sum(A)-Sum(B)
根据(1)式则有:Sum(A)=ii4+ii1-(ii2+ii3); Sum(B)=ii6+ii3-(ii4+ii5);
所以此类特征原型的特征值为:
(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5)
另示:运用积分图可以快速计算给定的矩形之所有象素值之和Sum(r)。假设r=(x,y,w,h),那么此矩形内部所有元素之和等价于下面积分图中下面这个式子:
Sum(r) = ii(x+w,y+h)+ii(x-1,y-1)-ii(x+w,y-1)-ii(x-1,y+h)
由此可见,矩形特征特征值计算只与此特征端点的积分图有关,而与图像坐标值无关。对于同一类型的矩形特征,不管特征的尺度和位置如何,特征值的计算所耗费的时间都是常量,而且都只是简单的加减运算。其它类型的特征值计算方法类似。
求助SURF算法的源代码
如果说SIFT算法中使用DOG对LOG进行了简化,提高了搜索特征点的速度,那么SURF算法则是对DoH的简化与近似。
虽然SIFT算法已经被认为是最有效的,也是最常用的特征点提取的算法,但如果不借助于硬件的加速和专用图像处理器的配合,SIFT算法以现有的计算机仍然很难达到实时的程度。
Surf的SURF算法
加速稳健特征(Speeded Up Robust Features, SURF)是一个稳健的图像识别和描述算法,首先于2006年发表在欧洲计算机视觉国际会议(Europeon Conference on Computer Vision,ECCV)。该算法可被用于计算机视觉任务,如物件识别和3D重构。他部分的灵感来自于SIFT算法。SURF标准的版本比SIFT要快数倍,并且其作者声称在不同图像变换方面比SIFT更加稳健。SURF 基于近似的2D 离散小波变换响应和并且有效地利用了积分图。
该算法由Herbert Bay于2006年首次发表于ECCV,2008年正式发表在Computer vision and image understanding期刊上,论文被引9000余次。 Hessian矩阵是SURF算法的核心,为了方便运算,假设函数f(x,y),Hessian矩阵H是由函数的二阶偏导数组成: