![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sift相关
基于形状匹配的铺垫
工业机器视觉设计和实现
这个作者很懒,什么都没留下…
展开
-
验证拉普拉斯高斯函数和差分高斯函数的关系(证明lindeberg的LOG和DOG,二)
即如何验证我们已经知道真正的LOG=(/*1/-2/)*exp(-0.5*/)他们说,sigma*真正的LOG近似等于=(G(x,y,k*sigma)-G(x,y,sigma))*1/(sigma*(k-1))他们说k=,所以第二个octave的尺度=2,即每一组开头的尺度是前一组倒数第三个的尺度。k=1.26,sigma=1;y=0,x=0,1,1.8,2//G(x,y,1.26)-G(x,y,1)*1/(1*(1.26-1))x=0,G(x,y,1.26)-G(x,y,1)=0.原创 2020-10-02 14:45:27 · 329 阅读 · 0 评论 -
寻找真的拉普拉斯高斯算子LOG(证明lindeberg的LOG和DOG,一)
教材上说二维高斯平滑函数如下:h(x,y)=-exp(-0.5*(+)/)令+=,则h(r)=-exp(-0.5*()/)上式对r求导数,=(-0.5/)*-exp(-0.5*()/)*=r/*exp(-0.5*()/)那么r的二阶导数=1/*【*exp(-0.5*()/)+r*exp(-0.5*()/)*(-0.5/)*】=1/*【1-/】exp(-0.5*()/)=-(/*1/-1/)*exp(-0.5*()/)教材上说,用最后这个公式来求拉普拉斯的值,如图a..原创 2020-10-02 08:33:03 · 330 阅读 · 0 评论 -
sift算法搭建(上半部,三,第二组高斯金字塔第一层图像生成,c#实现)
我们的高斯金字塔第一组图像是512*512的,一共六层,第二组高斯金字塔第一层图像生成256*256,其尺度等于第一组高斯金字塔第四层尺度(也就是6-2,第一组高斯金字塔倒数第三层),有以下关系:当我们生成了第一组高斯金字塔的第四层,我们就可以生成第二组高斯金子塔了,尺度不变,隔行隔列取第四层图像,就变成256*256第二组高斯金字塔第一层了,有了第一层,第二组其他五层图像依照上面关系就生成了。256*256第二组高斯金字塔第一层图像代码: ////////////////////////.原创 2020-10-09 09:24:46 · 325 阅读 · 0 评论 -
sift算法搭建(上半部,二,代替二维的一维高斯模板实现,c#实现)
曾经学习canny时,学到了大神的高斯模板生成,由于二维高斯的可分离性,形成一维的x方向和y方向的高斯模板,之所以选择一维的原因,一是,处理图像速度效率高二是,图像周边处理效果好大神的代码是c++的,我翻译成c#的呈上:double nSigma = 1.25; //定义高斯函数的标准差 int nWidowSize = (int)(1 + 2 * Math.Ceiling(3 * nSigma)...原创 2020-10-09 08:59:26 · 280 阅读 · 0 评论 -
sift高斯差分函数泰勒展开的理解(矩阵求导)
令f'(x)=f'(x0)+1/2*f''(x0)*2*x=0所以x=一f‘(x0)/f''(x0);以上是一元的,当x是三元的,怎么理解1/2*X的转置*H(X)*X对X求导后=H(X)*X?令△x=x-x0,△y=y-y0,△z=z-z0;H(X)=f''xx f''xy f''xz; X =x-x0;X的转置=(x-x0 y-y0 z-z0) ...原创 2019-03-02 10:46:28 · 3938 阅读 · 0 评论 -
sift算法搭建(上半部,一,像孩子一样玩乐高积木,c#实现)
程序,像乐高积木,我没玩过,但我脑袋里边,闪过,我的孩子聚精会神的在玩积木,捏泥人的样子。可能是一辆摩托车,也可能是汽车,或许可能是坦克,也或许捏了一个士兵,驾驶着积木玩具,或许还捏了一个我,后来送给我。扯远了,返回!其实做这个sift算法上半部搭建,就想验证一下,有没有我的harris亚像素角点效果好,仅此而已!先示意一下sift上半部搭建的过程,以及中间结果(c#运行结果),后面再一步一步给出程序:第一步,加载图像第二步,截取512*512图像第三,试了一把sigma=1原创 2020-10-08 21:13:36 · 509 阅读 · 2 评论 -
sift算法搭建(上半部,五,求二阶三阶黑塞矩阵的逆程序对比,c#实现)
先看二阶黑塞矩阵: private void 二阶黑塞矩阵的逆(ref double a,ref double c,ref double b,ref double d) {//未考虑bc-ad==0 //因为黑塞矩阵的逆*黑塞矩阵=单位矩阵 //a c*AA CC=1 0 //b d BB DD 0 1 //a*AA+c*BB=1; //b*AA+d...原创 2020-10-09 10:03:06 · 655 阅读 · 0 评论 -
sift算法搭建(上半部,六,dog金字塔中干扰的极值点排除,c#实现)
看图片,看代码: List<int[]> 第一组dog五层金字塔 = new List<int[]>(); 第一组dog五层金字塔.Add(oct1dog2layer512);//第一组dog五层金字塔[0] 第一组dog五层金字塔.Add(oct1dog3layer512);//第一组dog五层金字塔[1] 第一组dog五层金字塔.Add(oct1dog4layer512);//第一组dog五层金...原创 2020-10-09 10:17:04 · 219 阅读 · 0 评论 -
sift算法搭建(上半部,四,第一组第一层dog金字塔生成,c#实现)
我们直接上代码,这更能说明问题:int[] oct1dog1layer512 = new int[512 * 512]; int[] oct1dog2layer512 = new int[512 * 512]; int[] oct1dog3layer512 = new int[512 * 512]; int[] oct1dog4layer512 = new int[512 * 512]; int[] oct1dog5layer512 = ...原创 2020-10-09 09:36:57 · 219 阅读 · 0 评论 -
sift算法搭建(上半部,八,dog金字塔最优偏差迭代找到最优亚像素极值,c#实现)
接着“sift算法搭建,上半部,七”,先看公式,再看代码:接着前面的代码,for循环中的5,是迭代5次寻优,亚像素极值: //将找到的极值点对应成像素(整数) c += (int)Math.Round(xc); r += (int)Math.Round(xr); layer += (int)Math.Round(xi); if (layer < 1 || l...原创 2020-10-09 11:16:25 · 347 阅读 · 0 评论 -
sift算法搭建(上半部,七,dog金字塔中筛选后的极值点求最优偏差,亚像素级别,c#实现)
接“sift算法搭建上半部,六”中未完成的程序,调用函数: else { int r1 = j, c1 = i, layer = L; double contrastThreshold = 0.04; double edgeThreshold = 10.0; ...原创 2020-10-09 10:54:06 · 356 阅读 · 0 评论 -
SIFT高斯差分(DOG)函数泰勒展开求极值(矩阵求导,程序化)
上面的答案是用来求函数极值,或者说求函数最优解。比如说函数f=+的极小值是多少?我们如何用编程的方法来求函数最优解?这就要用泰勒展开,并求泰勒展开导数=0假定△x=x-x0;△y=y-y0;下面是函数的泰勒展开f(x,y)=f(x0,y0)+f'x*△x+f'y*△y+1/2*f''xx*+1/2*f''yy*+f''xy*△x*△yA:求泰勒展开针对X偏导数=0,上式中一,二阶导数都是一个确定的值,而非变量,所以0=0+f'x+0+1/2*f''xx*2*△x+0+f''xy*△y原创 2020-10-01 11:41:23 · 1330 阅读 · 0 评论