surf算法
⑴ 基于fpga的surf算法可能实现吗
好的,,我给你做.
⑵ opencv 中对于surf 算法有个函数cvExtractSURF 对于sift有同样的函数能得到 kepoint关键点,和 descriptors
和 descriptors
⑶ surf算法可以实现立体图像匹配吗
opencv里面是没有那种算法的,它只是提供一些常用的计算函数。具体的算法,由于你的需求比较特殊,相信应该没有现成的瑕疵检测算法,好在你的需求难度应该不大,通过常用的图像识别算法,比如纹理算法(Gabor算法)、SURF算法就可以找到白纸上瑕疵,这些瑕疵都是相当于一张白纸的特征点嘛!基本思想就是借用图像识别、匹配过程的思想——找图像上的特征点。白纸一般是提取不出特征点的,要是提取出来了,那就说明白纸上有东西(洞、褶皱或者异物)。
⑷ 你好!我想咨询一下关于图像配准的问题。关于BBF算法,怎么能把这个算法和surf算法结合起来谢谢!
原surf算法用的是kdtree吧,不是挺好的吗。
⑸ 求助:surf算法的matlab程序,谢谢!
http://www.ilovematlab.cn/thread-104578-1-1.html
这里可以下载,但是要先注册,这是个学matlab的好网站,相信对你会很有用的。
⑹ surf算法如何C++程序实现
这些特征检测算法 都有很成熟的实现了,推荐opencv,LZ可以看别人的源码来决定要不要自己实现
⑺ 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是由函数的二阶偏导数组成:
⑻ SURF算法和RANSAC算法怎么联合使用
就是首先随机抽取观测数据子集,我们假设视为这子集就是“内点”(局内点或者局内数据)。然后用这子集进行相关的拟合来计算模型参数(或者估计函数)。找到这模型(或者函数)以后,利用观测点(数据)进行是否正确,如果求出来的模型能够满足足够多的数据,我们视为很正确的数据。最后我们采纳。但是,如果不适合,也就是说求出来的模型(或者函数,也可以是模型参数)满足的数据点很少,我们就放弃,从新随机抽取观测数据子集,再进行上述的操作。这样的运算进行N次,然后进行比较,如果第M(M<N)次运算求出来的模型满足的观测数据足够多的话,我们视为最终正确的模型(或者称之为正确地拟合函数)。可见,所谓的随机抽样一致性算法很适合对包含很多局外点(噪声,干扰等)的观测数据的拟合以及模型参数估计。当然最小二乘法也是不错的算法,但是,最小二乘法虽然功能强大,不过,它所适合的范围没有RANSAC那么广。
⑼ 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)
由此可见,矩形特征特征值计算只与此特征端点的积分图有关,而与图像坐标值无关。对于同一类型的矩形特征,不管特征的尺度和位置如何,特征值的计算所耗费的时间都是常量,而且都只是简单的加减运算。其它类型的特征值计算方法类似。