人工智能浅尝
文章平均质量分 78
人工智能
工业机器视觉设计和实现
这个作者很懒,什么都没留下…
展开
-
支持向量机(SVM)入门(六,解决遗留问题)
做个记录,分享原创 2023-01-11 11:18:48 · 435 阅读 · 2 评论 -
有极值的区间里,搜索极值(0.618法,c#实现)
记录原创 2022-10-31 16:46:59 · 492 阅读 · 0 评论 -
极值存在区间搜索(c#实现)
记录原创 2022-10-31 16:22:28 · 377 阅读 · 0 评论 -
欧拉公式推导
1,将sin(x)展开为x的幂级数sin(x)=*/(2n+1)!2,将cos(x)展开为x的幂级数cos(x)=*/(2n)!3,=/n!显然,有:/n!=/(2n+1)!+/(2n)!那么,就有/n!=/(2n+1)!+/(2n)!还有/n!=/(2n+1)!+/(2n)!即=cos(x)+sin(x)...原创 2020-05-04 09:16:40 · 1799 阅读 · 0 评论 -
协方差矩阵与马氏距离
首先,应区分协方差与协方差矩阵,协方差矩阵中用到了协方差。2*2协方差矩阵定义:C=c11 c12 c21 c22c11=E(ε-Eε)^2=Dε=σ1^2;E定义为期望,D定义为方差,σ1,σ2为标准差,(ε,η)为二元变量c22=E(η-Eη)^2=Dη=σ2^2;c12=c21=E(ε-E...原创 2019-03-05 09:59:24 · 2051 阅读 · 0 评论 -
程序化函数求导c#实现
前面在牛顿法改进版博文中,函数求导并未程序化,一个未了的心愿,下面来实现它:首先是,求导的方法,可程序化的,这种方法叫做有限差分法求导,方法如下:A:函数f(xi-h)的泰勒展开等于:f(xi)+((xi-h)-xi)+(1/2)B:函数f(xi+h)的泰勒展开等于:f(xi)+((xi+h)-xi)+(1/2)A-B:f(xi-h)-f(xi+h)=0-2h*所以,=(-1)(f(xi-h)-f(xi+h))/2h,当h=1,则=(-1)(f(xi-1)-f(xi+1))/2,这个原创 2020-09-30 18:53:16 · 2885 阅读 · 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 · 3978 阅读 · 0 评论 -
高斯判别算法GDA(吴恩达机器学习c#实践,高斯模板上同心椭圆马氏距离画法,三)
先画一个水平椭圆吧!(参考计算机图形学基础)以下是画旋转椭圆的C#代码: //因为是11*11,不妥,X12,所以改为44*44*3*3,最终放大了16倍 byte[] gaos = new byte[11 * 11]; for (int j = 0; j < 11; j++) { for (int i = 0; i < 11; i = i + 1) ...原创 2020-09-29 15:48:00 · 322 阅读 · 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 · 1365 阅读 · 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 · 345 阅读 · 0 评论 -
验证拉普拉斯高斯函数和差分高斯函数的关系(证明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 · 340 阅读 · 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 · 295 阅读 · 0 评论 -
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 · 678 阅读 · 0 评论 -
surf算法中积分和(图)与盒式(box)滤波器的关系(三,证明)
二者关系证明如下:原创 2020-10-12 16:50:34 · 335 阅读 · 0 评论 -
敲开bp神经网络之门(二,mfcc中使用,c#)
写了186篇博客,刚好,家里门牌号186,所以在家里停留很久,现在又出发......看到一篇bpnet好文章,有一种代码实现的冲动,还是先捋一遍,再代码化:总误差由0.2983降到0.2910,迭代10000次后,输出o1,o2=0.0159,0.984;总误差0.000035085,说明已经收敛到【0.01,0.99】,bpnet学习结束。我们实现以上过程,进行了简化,少了一个输出,多了两个输入:为什么步长要取0.5?这个步长在机器学习中(人工智原创 2021-02-11 15:22:58 · 615 阅读 · 3 评论 -
再回顾梯度和的应用(矩形旋转,如何求梯度和,积分和)
在机器视觉入门,找线工具的设计中,我们找穿越点时,因为找线工具只有一个方向,所以我们使用了梯度和=d。而在自动对焦中,我们用使用了梯度和=|dx|+|dy|。上一篇,积分和对比梯度和,公式又变为梯度和=dx+dy。三种表达,实质是一样。我们发现梯度和可以找穿越点,可以探知清晰度的变化,还可以代替积分和。实际在前面的经历中,我们还用梯度和探索边缘,探索角点,详见博文网格工具设计。现在存在一个问题,就是矩形旋转了,矩形框梯度和怎么计算?线图像ac,在b点灰度发生了变化,梯度和5个一组原创 2020-10-13 17:58:56 · 599 阅读 · 0 评论 -
surf算法中积分和(图)与盒式(box)滤波器的关系扩展(四,梯度和及效率)
以下,我们在图像处理中默认梯度,导数,差分是一个概念。我们前面博客中关于自动对焦,使用了梯度和=|dx|+|dy|的方法解决。我们上一节证明了积分和与二阶差分(梯度)的关系,或者说积分和与盒子(box)滤波器之间的关系。显而易见,积分和能表达上面关系,那么梯度和也能表达二阶差分(梯度)的关系。因为一阶导数求导,就是二阶导数,这种关系,应该比积分和更近吧!既然,积分和的加减能表达二阶差分,也就是说,积分和的加减也能表达梯度,这就是积分和与梯度和以及盒子(box)滤波器的关系。所以,原创 2020-10-13 11:31:30 · 524 阅读 · 0 评论 -
surf算法中积分和(图)与盒式(box)滤波器的关系(二,c#实现代码)
关于矩形框(roi区域)积分和的c#实现代码://m_cutImageRoi//这个机器视觉入门(二)里边的类,博客中有,专门用来截取感兴趣区域图像的,//在这里,很简单,只是一个不用旋转的矩形框,你也可以自己搞定//glob_buffer512512 //点一的积分和//矩形的左,顶 // int w = Convert.ToInt32(textBoxpt1x.Text); int w = (int)m_cutIma...原创 2020-10-12 16:15:20 · 334 阅读 · 0 评论 -
surf算法中积分和(图)与盒式(box)滤波器的关系(一,突发奇想验证)
想到一个好主意,标定片用来验证积分图与盒式(box)滤波器最好不过。另外,有所感悟,所谓的滤波,实质是匹配。盒式(box)滤波器就是盒式(box)匹配。刚好有512*512的标定片图像,立马创建roi(感兴趣)区域,进行积分和计算,图像来的更直观,在我们前面sift代码基础上,改造一下,如图:有没有发现,红色的roi矩形框(黑色正方形),积分和是稳定的,基本都是16开头的。好,我们再改变一下:看到没?都是19开头的。那么,你会有什么想法呢?当我在这512*原创 2020-10-12 15:59:06 · 1002 阅读 · 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 · 355 阅读 · 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 · 363 阅读 · 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 · 229 阅读 · 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 · 225 阅读 · 0 评论 -
sift算法搭建(上半部,三,第二组高斯金字塔第一层图像生成,c#实现)
我们的高斯金字塔第一组图像是512*512的,一共六层,第二组高斯金字塔第一层图像生成256*256,其尺度等于第一组高斯金字塔第四层尺度(也就是6-2,第一组高斯金字塔倒数第三层),有以下关系:当我们生成了第一组高斯金字塔的第四层,我们就可以生成第二组高斯金子塔了,尺度不变,隔行隔列取第四层图像,就变成256*256第二组高斯金字塔第一层了,有了第一层,第二组其他五层图像依照上面关系就生成了。256*256第二组高斯金字塔第一层图像代码: ////////////////////////.原创 2020-10-09 09:24:46 · 335 阅读 · 0 评论 -
sift算法搭建(上半部,一,像孩子一样玩乐高积木,c#实现)
程序,像乐高积木,我没玩过,但我脑袋里边,闪过,我的孩子聚精会神的在玩积木,捏泥人的样子。可能是一辆摩托车,也可能是汽车,或许可能是坦克,也或许捏了一个士兵,驾驶着积木玩具,或许还捏了一个我,后来送给我。扯远了,返回!其实做这个sift算法上半部搭建,就想验证一下,有没有我的harris亚像素角点效果好,仅此而已!先示意一下sift上半部搭建的过程,以及中间结果(c#运行结果),后面再一步一步给出程序:第一步,加载图像第二步,截取512*512图像第三,试了一把sigma=1原创 2020-10-08 21:13:36 · 517 阅读 · 2 评论 -
局部加权回归Loess对比MFCC三角滤波(吴恩达机器学习中说,Loess算法用到了aircraft的自动驾驶中)
局部加权回归(Loess):Loess的目标是最小化, 其中的作用是使预测点的临近点在最小化目标函数中贡献大:Loess更加注重临近点的精确拟合。这个算法中最神奇的就是这个w,局部相关性w很像高斯模板中心到边缘(3*sigma+1)/2的局部相关性,也就相关性关注(起作用),其他不关注(不起作用);从这一点出发,我们可以看到MFcc三角滤波中,每一个三角形滤波器都有这种局部相关性,只不过Mfcc最求的是三角形内归一化操作,而局部加权回归是局部相关范围内的最小二乘法。我们再看一眼梅原创 2020-09-30 08:44:56 · 804 阅读 · 0 评论 -
高斯判别算法GDA(吴恩达机器学习实践总结,四)
通过前面的实践,我们已经可以通过正态分布函数生成样本点,这是什么意思呢?其实也就是说,任意图像上的样本点如果能和我们的模板重合,我们就认为,这样的样本满足了正态分布,我们已经掌握,调整参数,生成不同的同心圆或者同心椭圆来框定这些样本,这样我们就可以很好的把样本从图像中分离出来,或者说我们掌握了图像的特征,如果图像中有正负两种样本,均满足高斯正态分布,只是参数不同,那么我们就可以很好的把这两种样本分割开来,这就是高斯判别算法GDA。需要改进的是:1,椭圆(或者圆)可以在图像时用鼠标任意拖动,即改变中心原创 2020-09-29 21:26:06 · 524 阅读 · 0 评论 -
高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心椭圆马氏距离,二)
先看以下是个什么?真看不出什么,对比一下还行,还是看不出来,我们让马氏距离放大十倍等于15,高斯值放大1000倍等于4的像素加以阻挡指示出来,使用白色。同心椭圆:(为什么?0值改0.5,不是水平方向的椭圆?而是135度的椭圆?)下面是C#对这个协方差矩阵改变后的高斯模板的计算://协方差矩阵 // a*a P*a*d====3.3 0.5 // P*a*d d*d====0.5 3.3 i...原创 2020-09-29 15:17:12 · 225 阅读 · 0 评论 -
高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心圆马氏距离,一)
首先实现P(x|y)=高斯函数(正态分布),即y是正态分布,是条件,我们把它还原到图像界面I(i,j)每一个像素,是结果。这个实际就是生成高斯模板,我们前面有3*3的高斯生成算法,但是根本没有办法显示,3*3=9个像素,针尖一样,我们在这个基础上,生成11*11的高斯模板,并放大16倍,生成图像,在界面显示出来,看是否是同心圆,二维高斯像一个大钟,我们用平面平行xy平面,切割大钟很多次,感到很像核磁共振人体切片,把这些等高线,让z=0,在xy平面画出来,验证一下,发现图像的高斯离散型和高斯的连续函数还是原创 2020-09-28 17:58:59 · 515 阅读 · 0 评论 -
dijkstra赋权有向图最短路径算法(改进参考)
参考书目:游戏人工智能编程案例精粹 Mat Buckland 著作原创 2020-09-27 19:34:24 · 357 阅读 · 2 评论 -
dijkstra赋权有向图最短路径算法c#初步实现
da,da,da,da来点节奏,记住这个名字,这个伟大人物的名字。下面是c#代码初步实现,总算完成了,完成了就是好的,以后继续改进:namespace dijkstra改进{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_L...原创 2020-09-27 19:08:19 · 742 阅读 · 0 评论 -
牛顿法改进版(吴恩达机器学习c#实践)
参考书目:机械最优设计技术,孟兆明 常德功编著namespace 牛顿法改进版//求函数minF(X)=x0^2+x1^2-x0*x1-10*x0-4*x1+60{ //1,如何求偏导数? //2,如何求黑塞矩阵逆矩阵? public partial class Form1 : Form { public Form1() { InitializeComponent(); } int ...原创 2020-09-21 17:31:21 · 358 阅读 · 0 评论 -
牛顿法(吴恩达机器学习c#实践)
参考书目:机械最优设计技术,孟兆明 常德功编著namespace 牛顿法//求函数minF(X)=x0^2+x1^2-x0*x1-15*x0+75{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int 维数N = 2; double 收敛精度E = 0.01; ...原创 2020-09-21 17:13:17 · 285 阅读 · 0 评论 -
坐标轮替上升法(吴恩达机器学习c#实践)
参考书目:机械最优设计技术,孟兆明 常德功编著坐标轮替上升法与梯度下降非常相似,在梯度下降基础上以下是c#代码:namespace 坐标上升法//求函数minF(X)=x1^2+x2^2-x1*x2-15*x1+75{ public partial class Form1 : Form//求函数minF(X)=x1^2+x2^2-x1*x2-15*x1+75 { public Form1() { InitializeCompo...原创 2020-09-20 09:32:21 · 281 阅读 · 0 评论 -
梯度下降(吴恩达机器学习c#实践)//求函数minF(X)=x0^2+x1^2-x0*x1-15*x0+75
这个算法也叫盲人下山(参考了机械最优设计技术,孟兆明 常德功编著),下面是c#代码实现:namespace 梯度下降//求函数minF(X)=x0^2+x1^2-x0*x1-15*x0+75{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int 维数N = 2; doubl...原创 2020-09-19 19:50:08 · 1454 阅读 · 0 评论 -
支持向量机(SVM)入门C#代码实现smo,改进第三版(五,画出来,吴恩达机器学习实践)
在前面基础上,代码增加了通用性,样本点增加到八个,运行效果如下:c#代码如下:(对比参考前面的代码,前面运行没有show出来)namespace smo改进3{ public partial class Form1 : Form//核函数仍然保持使用简单点积,没有使用高斯核函数,202009161816改进 { public Form1() { InitializeComponent(); } ...原创 2020-09-16 19:07:50 · 991 阅读 · 0 评论 -
支持向量机(SVM)入门C#代码实现smo(四,算法编译调试成功,针对开头举例,数学推导与程序运行结果一致)
注释: 前三篇参考豆子的博客和支持向量机三重境界 int RandomSelect(int i) { int j = i; while (i == j) { Random rm = new Random(); j = rm.Next(0, 2); } return j; } ...原创 2020-09-10 11:11:21 · 519 阅读 · 0 评论 -
支持向量机(SVM)入门(三,smo算法可参考代码框架)
/* * 默认输入参数值 * C: regularization parameter * tol: numerical tolerance * max passes */ double C = 1; //对不在界内的惩罚因子 double tol = 0.01;//容忍极限值 int maxPasses = 5; //表示没有改变拉格朗日乘子的最多迭代次数 ...原创 2020-09-10 11:04:44 · 246 阅读 · 0 评论 -
支持向量机(SVM)入门(二,引入松弛变量后的软间隔,smo算法数学推导)
原创 2020-09-10 11:02:46 · 544 阅读 · 0 评论 -
支持向量机(SVM)入门(一,未引入松弛变量)
你首先要知道支持向量机的最后化简形式,未引入松弛变量前,举例如下:原创 2020-09-10 10:54:56 · 205 阅读 · 0 评论