资源目录
压缩包内文档预览:(预览前20页/共31页)
编号:122369782
类型:共享资源
大小:15.42MB
格式:ZIP
上传时间:2021-04-19
上传人:221589****qq.com
认证信息
个人认证
李**(实名认证)
湖南
IP属地:湖南
40
积分
- 关 键 词:
-
点胶机
控制系统
设计
说明书
CAD
- 资源描述:
-
点胶机控制系统设计【说明书+CAD】,点胶机,控制系统,设计,说明书,CAD
- 内容简介:
-
程序清单/*点胶机控制系统设计 下位机程序IDE环境:TKStudio Keil C51主控芯片:STC89C52RC 内部晶振11.0592Mhz 串口波特率9600作者:王洪旭 单位:哈尔滨理工大学荣成学院 机械电子工程12级1班*/#include #include #include sfr T2MOD = 0xC9;/设置定时器2功能寄存器sbit Xzhuan=P10;sbit Xfangxiang=P11; /X轴控制引脚sbit Yzhuan=P12;sbit Yfangxiang=P13; /Y轴控制引脚sbit Zzhuan=P14;sbit Zfangxiang=P15; /Z轴控制引脚sbit Xchuangan=P16; /x轴传感器sbit Ychuangan=P17;/y轴传感器sbit Czhuan=P23;sbit Cfangxiang=P24; /传动带控制引脚sbit xiangji=P25; /相机控制引脚bit flag=1;/标识符bit Xflag=1;/X标识符bit Yflag=1;/Y标识符bit Zflag=1;/Z标识符bit Cflag;/传输带标识符bit C_flag;/启动传输带标识符bit Rflag=0;bit Rflag_1=0;bit Rflag_2=0;bit Rflag_3=0;bit Rflag_4=0;bit Z_flag=0;bit zxflag=0;bit chuan_flag=1;unsigned char step = 0; /操作步骤unsigned char oprt = 0; /运算类型unsigned int w1,w2,w3; /X、Y、Z掉电之前的数据unsigned int xt=0;unsigned int yt=0;unsigned int zt=0;unsigned int ct=0;unsigned int cunm=0;unsigned int idata x_0=0;unsigned int idata y_0=0;unsigned int idata x_1=0;unsigned int idata y_1=0;unsigned int idata x_2=0;unsigned int idata y_2=0;unsigned int idata x_3=0;unsigned int idata y_3=0;unsigned int idata stemp;unsigned char T0RH = 0; /T0 重载值的高字节unsigned char T0RL = 0; /T0 重载值的低字节unsigned char buf13; /X存储数组unsigned char str15; /X显示数组unsigned char buf23; /Y存储数组unsigned char str25; /Y显示数组unsigned char buf33; /Z存储数组unsigned char str35; /Z显示数组unsigned char buf43; /R存储数组void ConfigTimer1(unsigned int ms);void ConfigTimer0();void Oprt4_KeyAction();void ConfigUART();void Oprt5_KeyAction();extern void KeyScan();extern void KeyDriver();extern void InitLcd1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);extern void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len);extern void LcdFullClear();extern void E2Read(unsigned char *buf, unsigned char addr, unsigned char len);extern void E2Write(unsigned char *buf, unsigned char addr, unsigned char len);void MemToStr(unsigned char *str, unsigned char *src,unsigned char tk);void main()EA = 1; /开总中断ConfigTimer1(1); /配置 T1 定时 1msConfigTimer0(); /配置 T0 定时ConfigUART(); /配置波特率为9600InitLcd1602(); /初始化液晶E2Read(buf1, 0x00, sizeof(buf1); /从 E2 中读取一段数据w1=buf10*100+buf11*10+buf12;/存到X轴MemToStr(str1, buf1, 1); /转换为十进制字符串LcdShowStr(2, 0,str1);/ 在液晶上显示字符串E2Read(buf2, 0x04, sizeof(buf2); /从 E2 中读取一段数据w2=buf20*100+buf21*10+buf22; /存到Y轴MemToStr(str2, buf2, 2); /转换为六进制字符串LcdShowStr(9, 0,str2);/ 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,E2Read(buf3, 0x08, sizeof(buf3); /从 E2 中读取一段数据w3=buf30*100+buf31*10+buf32;/存到Z轴MemToStr(str3, buf3,3); /转换为十进制字符串LcdShowStr(2, 1,str3);/ 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针LcdShowStr(9, 1,R:000);/ 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针Xzhuan=1; /X 轴不转Yzhuan=1; /Y 轴不转Zzhuan=1; /Z 轴不转Xchuangan=0;Ychuangan=1;while (1)KeyDriver(); /调用按键驱动void MemToStr(unsigned char *str, unsigned char *src, unsigned char tk)switch (tk)case 1: /X轴显示的字符str0=X;str1=:;str2=(*src+)+0;str3=(*src+)+0;str4=(*src)+0;break;case 2: /Y轴显示的字符str0=Y;str1=:;str2=(*src+)+0;str3=(*src+)+0;str4=(*src)+0;break;case 3: /Z轴显示的字符str0=Z;str1=:;str2=(*src+)+0;str3=(*src+)+0;str4=(*src)+0;break;default:break;/写入在相应的存储数组中的数,并分配相应的3个地址void E2Write_1(unsigned int tm,unsigned char kkt)switch (kkt)case 1: /写到X存储数组中if (tm=100)buf10=tm/100;buf11=tm/10%10;buf12=tm%10;else if (tm=10)buf10=0;buf11=tm/10;buf12=tm%10;else if (tm=0&tm=100)buf20=tm/100;buf21=tm/10%10;buf22=tm%10;else if (tm=10)buf20=0;buf21=tm/10;buf22=tm%10;else if (tm=0&tm=100)buf30=tm/100;buf31=tm/10%10;buf32=tm%10;else if (tm=10)buf30=0;buf31=tm/10;buf32=tm%10;else if (tm=0&tm=100)buf40=tm/100;buf41=tm/10%10;buf42=tm%10;else if (tm=10)buf40=0;buf41=tm/10;buf42=tm%10;else if (tm=0&tm 0);len += i; /i 最后的值就是有效字符的个数while (i- 0) /将数组值转换为 ASCII 码反向拷贝到接收指针上*str+ = bufi + 0;*str = 0; /添加字符串结束符return len; /返回字符串长度void NumKeyAction(unsigned char n)unsigned int num1;unsigned int num2;unsigned int num3;unsigned int num4;unsigned char len;unsigned char str3;if (step = 0) /输入第一操作数 X轴if (flag)num1=0;LcdAreaClear(4, 0, 3); /清除X数据flag=0;num1 = num1*10 + n; /输入数值累加到原操作数上len = LongToString(str, num1,1); /新数值转换为字符串LcdShowStr(4, 0, str); /显示到液晶上else if (step=1) /输入第二操作数if (flag)num2=0;LcdAreaClear(11, 0,3); /清除Y数据flag=0;num2 = num2*10 + n; /输入数值累加到原操作数上len = LongToString(str, num2,2); /新数值转换为字符串LcdShowStr(11, 0, str); /显示到液晶上else if (step=2) /输入第三操作数if (flag)num3=0;LcdAreaClear(4, 1, 3); /清除Z数据flag=0;num3 = num3*10 + n; /输入数值累加到原操作数上len = LongToString(str, num3,3); /新数值转换为字符串LcdShowStr(4, 1, str); /显示到液晶上else if (step=3) /输入第四操作数if (flag)num4=0;LcdAreaClear(11, 1, 3); /清除Z数据flag=0;num4 = num4*10 + n; /输入数值累加到原操作数上len = LongToString(str, num4,4); /新数值转换为字符串LcdShowStr(11, 1, str); /显示到液晶上unsigned int Xzhou()unsigned int Xchazhi;unsigned int n1;unsigned int r1;r1=buf40*100+buf41*10+buf42;n1=buf10*100+buf11*10+buf12; /读取现在输入的坐标值if (Rflag)n1=n1+r1;if (n1=w1) /输入的坐标与上一个坐标进行比较得差值Xchazhi=n1-w1;Xfangxiang=1; /正转else if (n1=w2) /输入的坐标与上一个坐标进行比较得差值Ychazhi=n2-w2;Yfangxiang=1; /正转else if (n2=w3) /输入的坐标与上一个坐标进行比较得差值Zchazhi=n3-w3;Zfangxiang=1; /正转else if (n3=640) /16细分Xnum+; /走1mm 导程5mmxt=0;if (Xnum=Xchazhi) /走到预定的坐标值 X轴 停止转动Xflag=1;if (Xchuangan&Rflag_3)Xflag=1;if (yt=640) /16细分Ynum+; /走1mm 导程5mmyt=0;if (Ynum=Ychazhi) /走到预定的坐标值 Y轴 停止转动Yflag=1;if (Ychuangan)&Rflag_3)Yflag=1;while (Xflag&Yflag&Rflag)Zflag=0;if (zt=3200) /16细分Znum+; /走1mm 导程是2mmzt=0;if (Znum=Zchazhi) /走到预定的坐标值 Z轴 停止转动Zflag=1;TR0=0;break;if (zt=3200) /16细分Znum+; /走1mm 导程是2mmzt=0;if (Znum=Zchazhi) /走到预定的坐标值 Z轴 停止转动Zflag=1;if (Xflag&Yflag&Zflag) /X、Y、Z轴都走到相应的位置 定时器关闭TR0=0;break;/*执行返回路线的轨迹*/void Oprt1_1KeyAction(unsigned int Xcha,unsigned int Ycha,unsigned int Zcha)unsigned int Xnum=0;unsigned int Ynum=0;unsigned int Znum=0;Xflag=0;Yflag=1;Zflag=1;Xfangxiang=Xfangxiang;Yfangxiang=Yfangxiang;Zfangxiang=Zfangxiang;while (1)if (Xflag=0)if (xt=640) /16细分Xnum+; /走1mm 导程5mmxt=0;if (Xnum=Xcha) /走到预定的坐标值 X轴 停止转动Xflag=1;Yflag=0;if (Yflag=0)if (yt=640) /16细分Ynum+; /走1mm 导程5mmyt=0;if (Ynum=Ycha) /走到预定的坐标值 Y轴 停止转动Yflag=1;Zflag=0;if (Zflag=0)if (zt=3200) /16细分Znum+; /走1mm 导程是2mmzt=0;if (Znum=Zcha) /走到预定的坐标值 Z轴 停止转动Zflag=1;if (Xflag&Yflag&Zflag) /X、Y、Z轴都走到相应的位置 定时器关闭 并显示起点坐标TR0=0;E2Write_1(w1,1); /写入在相应的存储数组中的数E2Write_2(1); /写入到EEPRONM中E2Write_1(w2,2); /写入在相应的存储数组中的数E2Write_2(2); /写入到EEPRONM中E2Write_1(w3,3); /写入在相应的存储数组中的数E2Write_2(3); /写入到EEPRONM中break;/*执行X方向的进给 */void Motor1Run(unsigned char x_t)unsigned int Xnum=0;Xfangxiang=x_t; /方向进给Xflag=0;TR0=1; /定时器打开 电机开始运行while (1)if (xt=640) /16细分Xnum+; /走1mm 导程5mmxt=0;if (Xnum=1) /走到预定的坐标值 X轴 停止转动Xflag=1;TR0=0;break;/*执行Y方向的进给 */void Motor2Run(unsigned char y_t)unsigned int Ynum=0;Yfangxiang=y_t;Yflag=0;TR0=1; /定时器打开 电机开始运行while (1)if (yt=640) /16细分Ynum+; /走1mm 导程5mmyt=0;if (Ynum=1) /走到预定的坐标值 Y轴 停止转动Yflag=1;TR0=0;break;void Oprt2_zhixian(unsigned int x_00,unsigned int y_00,unsigned int x_e,unsigned int y_e)signed int ee,x_c,y_c; /偏差unsigned int Nxy;unsigned char xianduan;x_c=x_e-x_00;y_c=y_e-y_00;Nxy=abs(x_c)+abs(y_c);ee=0;while (1)if (x_ex_00)&(y_e=y_00)xianduan=1;break;else if (x_e=x_00)&(y_ey_00)xianduan=2;break;else if (x_ey_00)xianduan=3;break;else if (x_ex_00)&(y_e0)if (ee=0)ee=ee-(y_e-y_00);Nxy-;Motor1Run(1);/ +x移动elseee=ee+(x_e-x_00);Nxy-;Motor2Run(1);/ +y移动else if (xianduan=2)while (Nxy0)if (ee=0)ee=ee-(x_e-x_00);Nxy-;Motor2Run(0);/ -y移动elseee=ee-(y_e-y_00);Nxy-;Motor1Run(1);/ +x移动else if (xianduan=3)while (Nxy0)if (ee=0)ee=ee+(x_e-x_00);Nxy-;Motor2Run(1);/ +y移动elseee=ee+(y_e-y_00);Nxy-;Motor1Run(0);/ -x移动else if (xianduan=4)while (Nxy0)if (ee=0)ee=ee+(y_e-y_00);Nxy-;Motor1Run(0);/ -x移动elseee=ee-(x_e-x_00);Nxy-;Motor2Run(0);/ -y移动void Oprt2_1(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned int x2,unsigned char xiangxian)signed int ee; /偏差if (xiangxian = 1)/ 第一象限ee =0; /刚开始在圆上 偏差为零while (x20)/ 终点判别if (ee=0)ee = ee -2*(x1-x0)+1;/ -x偏差 偏差计算x1-; / -x偏差x2-;Motor1Run(0);/ -x移动elseee =ee + 2*(y1-y0)+1;/ +y偏差 偏差计算y1+; / +y偏差x2-;Motor2Run(1);/ +y移动else if (xiangxian =2)/ 第二象限ee =0;while (x20)/ 终点判别if (ee0)/ 终点判别if (ee=0)ee = ee +2*(x1-x0)+1;/ +x偏差 偏差计算x1+; / +x偏差x2-;Motor1Run(1);/ +x移动elseee = ee -2*(y1-y0)+1;/ -y偏差 偏差计算y1-; / -y偏差x2-;Motor2Run(0);/ -y移动else if (xiangxian =4)/ 第四象限ee =0;while (x20)/ 终点判别if (ee0;c-)for (b=171;b0;b-)for (a=16;a0;a-);_nop_(); /if Keil,require use intrins.h 一个机器周期void Oprt1_KeyAction()Rflag=1;Rflag_4=1;OprtKeyAction(); /快速点定位到起始坐标delay1s() ; /误差 0us 时间1S 延时1S后 执行画圆Oprt2_zhixian(x_0,y_0,x_1,y_1);Oprt2_zhixian(x_1,y_1,x_2,y_2);Oprt2_zhixian(x_2,y_2,x_3,y_3);Oprt2_zhixian(x_3,y_3,x_0,y_0);Rflag=0;Rflag_1=1;zxflag=1;OprtKeyAction();/Z轴返回Oprt4_KeyAction();/ XY返回void Oprt2_KeyAction()unsigned int x0; /圆心坐标unsigned int y0; /圆心坐标unsigned int r; /圆的半径x0=buf10*100+buf11*10+buf12; /读取输入的圆的圆心坐标和半径y0=buf20*100+buf21*10+buf22;r=buf40*100+buf41*10+buf42;Rflag=1; /半径标识符 目的是快速点定位之后 执行Z的坐标OprtKeyAction(); /快速点定位到圆的起始坐标delay1s() ; /误差 0us 时间1S 延时1S后 执行画圆Oprt2_1(x0,y0,x0+r,y0,r+r,1);/ 第一象限 画第一象限的圆弧Oprt2_1(x0,y0,x0,y0+r,r+r,2);/ 第二象限 画第二象限的圆弧Oprt2_1(x0,y0,x0-r,y0,r+r,3);/ 第三象限 画第三象限的圆弧Oprt2_1(x0,y0,x0,y0-r,r+r,4);/ 第四象限 画第四象限的圆弧Rflag=0; /取消标识符Rflag_1=1; /打开执行Z 轴的标识符OprtKeyAction(); /执行Z轴 返回C_flag=1; /传输带运行Oprt4_KeyAction(); /X轴和Y轴返回E2Write_1(x0+r,1); /写入在相应的存储数组中的数 写入执行完后的X坐标E2Write_2(1); /写入到EEPRONM中E2Write_1(y0,2); /写入在相应的存储数组中的数 写入执行完后的Y坐标E2Write_2(2); /写入到EEPRONM中E2Write_1(0,3); /写入在相应的存储数组中的数 写入执行完后的Z坐标E2Write_2(3); /写入到EEPRONM中void Yzhixian(unsigned int Ychazhi,unsigned char y_t)unsigned int Ynum=0;Yfangxiang=y_t;Yflag=0;TR0=1; /定时器打开 电机开始运行while (1)if (yt=640) /16细分Ynum+; /走1mm 导程5mmyt=0;if (Ynum=Ychazhi) /走到预定的坐标值 Y轴 停止转动Yflag=1;TR0=0;break;void Xzhixian(unsigned int Xchazhi,unsigned char x_t)unsigned int Xnum=0;Xfangxiang=x_t;Xflag=0;TR0=1; /定时器打开 电机开始运行while (1)if (xt=640) /16细分Xnum+; /走1mm 导程5mmxt=0;if (Xnum=Xchazhi) /走到预定的坐标值 Y轴 停止转动Xflag=1;TR0=0;break;void Oprt3_KeyAction()unsigned int Xl; /X方向的长度unsigned int Yh; /Y方向的宽度unsigned int r; /圆角半径Xl=buf10*100+buf11*10+buf12; /读取输入的长和宽及圆角半径Yh=buf20*100+buf21*10+buf22;r=buf40*100+buf41*10+buf42;Rflag=1; /半径标识符 目的是快速点定位之后 执行Z的坐标Rflag_2=1; /快速点定位到起点坐标的标识符OprtKeyAction(); /快速点定位到方形的起始坐标delay1s() ; /误差 0us 时间1S 延时1S后 执行画圆Yzhixian(Yh-2*r,1); /第一象限画Y方向的直线Oprt2_1(w1+Xl-r,w2+Yh-r,w1+Xl,w2+Yh-r,r+r,1);/画第一象限的圆弧Xzhixian(Xl-2*r,0); / 第二象限画X方向的直线Oprt2_1(w1+r,w2+Yh-r,w1+r,w2+Yh,r+r,2);/ 第二象限 画第二象限的圆弧Yzhixian(Yh-2*r,0); /第一象限画Y方向的直线Oprt2_1(w1+r,w2+r,w1,w2+r,r+r,3);/ 第三象限 画第三象限的圆弧Xzhixian(Xl-2*r,1); / 第二象限画X方向的直线Oprt2_1(w1+Xl-r,w2+r,w1+Xl-r,w2,r+r,4);/ 第四象限 画第四象限的圆弧Rflag=0; /取消标识符Rflag_1=1; /打开执行Z 轴的标识符OprtKeyAction(); /执行Z轴 返回C_flag=1; /传输带运行Oprt4_KeyAction(); /X轴和Y轴返回E2Write_1(w1+Xl,1); /写入在相应的存储数组中的数写入执行完后的X坐标E2Write_2(1); /写入到EEPRONM中E2Write_1(w2+r,2); /写入在相应的存储数组中的数 写入执行完后的Y坐标E2Write_2(2); /写入到EEPRONM中E2Write_1(0,3); /写入在相应的存储数组中的数 写入执行完后的Z坐标E2Write_2(3); /写入到EEPRONM中void Oprt4_KeyAction()Rflag_3=1;OprtKeyAction();Rflag_3=0;E2Write_1(0,1); /写入在相应的存储数组中的数E2Write_2(1); /写入到EEPRONM中E2Write_1(0,2); /写入在相应的存储数组中的数E2Write_2(2); /写入到EEPRONM中E2Write_1(0,3); /写入在相应的存储数组中的数E2Write_2(3); /写入到EEPRONM中InitLcd1602(); /初始化液晶LcdShowStr(2, 0,X:000);/ 在液晶上显示字符串LcdShowStr(9, 0,Y:000);/ 在液晶上显示字符串LcdShowStr(2, 1,Z:000);/ 在液晶上显示字符串LcdShowStr(9, 1,R:000);step=0;delay1s() ;if (C_flag)C_flag=0;Cflag=1;elseCflag=0;while (Cflag)TR0=1;if (ct=3200)/1quanct=0;cunm+;if (cunm=25)cunm=0;TR0=0;Cflag=0;break;void Oprt5_KeyAction()TR1=0;/关闭定时器1 防止影响串口数据接收x_0=0;y_0=0;/对接收数据存放的变量清零防止数据接收错乱x_1=0;y_1=0;x_2=0;y_2=0;x_3=0;y_3=0;C_flag=1;/传输带运行标志Oprt4_KeyAction();/复位 返回xiangji=0;/触发相机进行拍照delay1s();/延时1s关闭相机xiangji=1;ES=1;/打开串口中断接收数据while (chuan_flag);/等待数据接收,判断数据是否接收完ES=0;/接收完数据 关闭串口中断chuan_flag=1;/关闭串口接收标志位delay1s();/延时Oprt1_KeyAction();/调用画直线函数TR1=1;/打开定时器1 进行按键扫描/* 按键动作函数,根据键码执行相应的操作,keycode-按键键码 */void KeyAction(unsigned char keycode)if (keycode=0) & (keycode8); /定时器重载值拆分为高低字节T0RL = (unsigned char)tmp;TMOD &= 0x0F; /清零 T1 的控制位TMOD |= 0x11; /配置 T1 为模式 1TH1 = T0RH; /加载 T1 重载值TL1 = T0RL;ET1 = 1; /使能 T1 中断TR1 = 1; /启动 T1/* T1 中断服务函数,执行按键扫描 */void InterruptTimer1() interrupt 3TH1 = T0RH; /重新加载重载值TL1 = T0RL;KeyScan(); /按键扫描/* T0 中断服务函数,执行电机运行 */void InterruptTimer0() interrupt 1TH0 = 0x0FF; /定时时间150umTL0 = 0x76;if (Xflag=0)xt+;Xzhuan=Xzhuan;else Xzhuan=1;if (Yflag=0)yt+;Yzhuan=Yzhuan;else Yzhuan=1;if (Zflag=0)zt+;Zzhuan=Zzhuan;else Zzhuan=1;if (Cflag)ct+;Czhuan=Czhuan;void InterruptUART() interrupt 4 /串口中断if (RI)/接收数据RI = 0;stemp=SBUF;if (x_0=0)x_0=(stemp*2);SBUF=x_0;else if (y_0=0)y_0=(stemp*2);SBUF=y_0;else if (x_1=0)x_1=(stemp*2);SBUF=x_1;else if (y_1=0)y_1=(stemp*2);SBUF=y_1;else if (x_2=0)x_2=(stemp*2);SBUF=x_2;else if (y_2=0)y_2=(stemp*2);SBUF=y_2;else if (x_3=0)x_3=(stemp*2);SBUF=x_3;else if (y_3=0)y_3=(stemp*2);chuan_flag=0;SBUF=y_3;if (TI)/发送数据TI = 0;/*点胶机控制系统设计 上位机程序运行环境:MATLAB R2014B作者:王洪旭 单位:哈尔滨理工大学荣成学院 机械电子工程12级1班*/% Harris角点提取算法 基于灰度图像的角点检测% % Harris角点检测是用一个局部窗口在图像各个方向进行移动,局部窗口内的灰度值会发生变化明显的变化,共有三种情况% 1.平坦区域:任意方向移动,无灰度变化 2.边缘:沿着边缘方向移动,无灰度变化 3.角点:沿任意方向变化,都有明显的灰度变化% 这里将图像灰度变换值构成自相关矩阵,利用自相关矩阵构成函数R,通过R值判断角点位置%判断指定的文件夹里是否有照片,如果有就删除clcclearfiles = dir(E:zhaopian*.BMP);for m=1:size(files,1) filename = ; imfile = strcat(E:zhaopian,filename); delete(imfile);endg=serial(COM3);fopen(g);while 1 try files = dir(E:zhaopian*.BMP); if size(files,1)=0 for m = 1:size(files,1) filename = ; imfile = strcat(E:zhaopian,filename); X = imread(imfile); end end Info=imfinfo(imfile); if Info.BitDepth8 f=rgb2gray(X); enddelete(imfile);% fx = 5 0 -5;8 0 -8;5 0 -5; % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法) ori_im=double(f)/255; %unit8转化为64为双精度double64 fx = -2 -1 0 1 2; % x方向梯度算子(用于Harris角点提取算法) Ix = filter2(fx,ori_im); % x方向滤波 % fy = 5 8 5;0 0 0;-5 -8 -5; % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法) fy = -2;-1;0;1;2; % y方向梯度算子(用于Harris角点提取算法) Iy = filter2(fy,ori_im); % y方向滤波 Ix2 = Ix.2; Iy2 = Iy.2; Ixy = Ix.*Iy; clear Ix; clear Iy; h= fspecial(gaussian,7 7,2); % 产生7*7的高斯窗函数,sigma=2 Ix2 = filter2(h,Ix2); Iy2 = filter2(h,Iy2); Ixy = filter2(h,Ixy); height = size(ori_im,1); width = size(ori_im,2); result = zeros(height,width); % 纪录角点位置,角点处值为1 R = zeros(height,width); Rmax = 0; % 图像中最大的R值 for i = 1:height for j = 1:width M = Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j); % auto correlation matrix R(i,j) = det(M)-0.06*(trace(M)2; % 计算R if R(i,j) Rmax Rmax = R(i,j); end; end; end; cnt = 0; for i = 2:height-1 for j = 2:width-1 % 进行非极大抑制,窗口大小3*3 if R(i,j) 0.01*Rmax & R(i,j) R(i-1,j-1) &
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。