A. 关于SURF算法
于图像配准算法的SURF的程序
B. 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是由函数的二阶偏导数组成:
C. surf算法C语言编写,要做嵌入式开发,不要C++和基于OPENCV的
surf借鉴了sift中简化近似的思想,将DOH中的高斯二阶微分模板进行了近似简化,使得模板对图像的滤波只需要进行几个简单的加减法运算,并且,这种运算与滤波模板的尺寸有关。实验证明surf算法较sift算法在运算速度上要快3倍左右。
1积分图像
surf算法中要用到积分图像的概念。借助积分图像,图像与高斯二阶微分模板的滤波转化为对积分图像的加减运算。积分图像(IntegralImage)的概念是由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(intx=1,x<nWidth;i++)
{
pOutImage[x][0]=pInImage[x-1][0]+pInImage[x][0];
}
for(inty=1;y<nHeight;y++)
{
intnSum=0;
for(intx=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)
由此可见,矩形特征特征值计算只与此特征端点的积分图有关,而与图像坐标值无关。对于同一类型的矩形特征,不管特征的尺度和位置如何,特征值的计算所耗费的时间都是常量,而且都只是简单的加减运算。其它类型的特征值计算方法类似。
D. C++ 在写SURF算法的时候关于特征点连接不了的问题
http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html
听说回答的字数够长能够自动采纳
E. 求助SURF算法的源代码
如果说SIFT算法中使用DOG对LOG进行了简化,提高了搜索特征点的速度,那么SURF算法则是对DoH的简化与近似。
虽然SIFT算法已经被认为是最有效的,也是最常用的特征点提取的算法,但如果不借助于硬件的加速和专用图像处理器的配合,SIFT算法以现有的计算机仍然很难达到实时的程度。
F. 拓扑优化
3.5.2.1 边交换
拓扑优化方法的思想通过改变网格的拓扑结构来提高网格质量。二维时,最常用的是边交换算法。类似于Delaunay三角剖分中涉及的最小角最大化特性,应尽量使三角网格中每个三角形单元避免出现狭长的角。二维三角形网格中,针对共用一条边的一对三角形组成的凸四边形,通过改变上述三角形对的共用边(即凸四边形的对角线)进行局部重构从而提高三角形对的质量。
图3.29 二分法加密结点与单元重划分
删除点的操作主要是作为一种重定义技术。许多实例当中,通过删除一个区域的网格完成删除点的操作,然后重新选择长度比例对这个空腔进行网格重新生成。点删除技术的不同应用也可以用来改善单元的几何形状达到网格优化的目的。最常见的做法是当两点距离小于某一个阈值时,删除这两点,并加入这两点的中点,且更新通过上述两点的网格单元的拓扑。
G. 请参考 :http://tieba.baidu.com/p/2514079408 “写了一个SURF算法的C语言实现,发下代码。。”
看了下, 编译不了,
它是在linux环境弄得,而且,函数太多,
要编译首先要知道main函数, 然后,用到的头文件,包含进来,就可以编译了.
说白了,你要先知道它的代码用途, 才行
也可能他写的只是一个函数, 就像一个库函数printf之类的, 有用的人可以借用他写的...
H. matlab surf 颜色控制 单一颜色
t=0:0.01:tan(25/180*pi);
[X,Y,Z]=cylinder(t);
[M,N]=size(X);
col=ones(M,N,3);
col(:,:,1)=0/255;
col(:,:,2)=255;%蓝色
col(:,:,2)=0/255;
surf(X,Y,2*Z,col);
shadinginterp
set(gca,'DataAspectRatio',[111]);
I. 求用surf算法实现斑点特征检测的 matlab程序代码
surf分解,matlab中有现成命令,给一个矩阵就可以直接分解了。
J. sift和surf算法哪个提取的特征点多
整个项目的结构图: 编写DetectFaceDemo.java,代码如下: [java] view plainprint? package com.njupt.zhb.test; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Poi。