实例介绍
该文档介绍了基于Moravec算子的图像特征点提取以及基于相关系数法的图像匹配的基本原理与编程实现方法,并附C#编写的程序源代码以及运行截图。
作业任务 编写程序,提取图像特征点,然后采用相关系数法进行同名像点的匹酩。 计算原理 21提取图像特征点 Moravec算子提取图像特征点计算步骤 1.计算四个方向上相邻像素灰度差的平方和 ∑∑∑∑ ++ 其中, 2 计算各个像元点的兴趣值 3.根据阈值确定特征候选点。给定阈偵,将兴趣值大于阈偵的点确定为特征候选点, 注意:阈值过大,将导致一些真正的特征点被淘汰;阈值过小,将保留太多的虚假 特征点。 4.选取特征候选点中的极值点作为作为特征点。在一定的窗口内,仅将兴趣值最大的 点判定为特征点,以达到局部非最大抑制的目的。 图1特征点选取示意图 22同名像点匹配 相关系数(矢量夹角)匹配算法的实用计算公式如下: ∑∑+-∑∑∑∑++ ∑∑-—∑∑∑∑ 程序编制 31设计思路 本次作业的主要任务为提取图像特征点和进行同名像点的匹配,因此可以分解为两 部分来考虑编程实现。 1.提取图像特征点。采用 Moravec算子提取图像特征点的部分,基本可以延续作业三 的处理步骤。采用 menustrip控件作为菜单栏,用 pictureboxκ控件来显示图片,使 用 Graphics类来画图。在界面底端使用 toolstrip控件,可以放置用来显示坐标 的文本框。此次在特征点坐标列表的设计上,相比作业有一些不同,没有使用 listview控件,而采用∫ datagridview控件。 2.同名像点的兀配。对于在第一幅图像中获得的特征点,要在第二幅图像上找到它的 司名像点。可以根据上述的计算公式计算相关系数。然后取相关系数最大的点,若 该点与待匹配点的相关系数大于0.95,则认为找到了同名像点。然后在两幅图像上 以“+”号标示出同名像点,在 datagridview中显示坐标和相关系数 32源代码 c#程序的源代码如下 using Sys lell. Threading using System. Collections. Generic System. c entMode l using System. Data g using system. Lin using System. Text: using System. Threading Tasks using System. Windows Forms namespace作业四 public partial class forml: Form private string curfileName private System. Drawing. Bitmap cur Bitmap int u double[, Templet Image ingl, img public Forml( InitializeComponent o private void Form1 Load (object sender, EventArgs e) this.Text="20133292—图像处理程序"; private void t 1ToolStripMenuItem Click(object sender, EventArgs e) OpenFileDialog openDlg- new OpenFileDialog( 4 openDlg. Initialdirectory C: \\USers\\Administrator. PC-20150328TVBE\\ Desktop opend1 g Filter="图像文件*.jpg;*,bmp;,pg;*,ti opeD1g.Tit1e="选择图像文件" openDIg. ShowHelp=true f (openIg. ShowDial () DialogResult. OK) FileNa mgl= Image FromFile(curFileName) pIctu catch(Exception cxp) MessageBox. Show(exp Message Invalidate o private void iB ToolStripMenultem Click(object sender, EventArgs e) private void Aikl1ToolStripMenultem Click(ohject sender, EventArgs e) Open FilcDialog opcnDlg- new OpcnFilcDialog() nDIg. Initial C:\\Users\\Administrator. PC-20150328IVBE\\ Desktop openIng. Filter="图像文件*.jpg;*,bm:*.png;*,tif g. Title="选择图像文件 openDig. ShowHclp-truc if(openD)lg ShowDialog()== DialogResult. OK) curFileName openDlg FileName img 2= Image. Iroml'ile(curl'ileName) picture Box2 Image= img 2 5 tch (e Messagebox. Show (exp message privale void提取影像特征点 TooIStripMenlullem Click( ob ject sender; Even LArgs e) private void moravec ToolStripMenuItem Click(object sender, EventArgs e) Itmap=(Bitmap) doublel,I Value l= new double [curBiLllap Height, curBilmap. Width] ap Color curcolor for (int (int j=0; j( curBitmap. Width; J++) curColor- curBitmap GctPixcl(j, i) Valuel[i, j]= curColor R *0. 299 I curColor G *0. 587 I curColorB IStripProgressBarl. Value=0 toolStripProgressBar l Maximum=10 toolStripProgressBarl. Value =1 double[, 1 value2= new double [curbitmap lleight, curBitmap Width] for (int i=2: i imgl Height-2: 1++) for (int j=2 L Width double vi=0 for (int VI=VI+ Math. Pow(value l [i j]-Valuelli-l-m, j], 2) doublc v2=0 for (int m =0: m< 4: m++) V2=V2+ Math. Pow(Valuel[i-2+ oub le V3=0: for (int 0;m〈 ++ 13=V3+ Math. Pow(Valuel[i, j-2-m]-Valuelli, j-1+ m 2) double v4= o for (inl V4=V4+ Math. Pow(Valuel[i-2+m, j+2-m]-Valuel[i-1 Value2li, j.=Math. Min (Math. Min(Math. Min(vl, V2), V3), V4) 从Ⅵ1、V2、V3、V4中取最小值作为该点兴趣值 toolStripprogressBar l value =3 double su=0 for (int i-0:i< imgl Hcight-2: i++) for (int j=0; j< ingl Width-2: j Value2Li, j t p= 0, S 110: double range Co new int [imgI. lleight *k imgl. Width /9, 2 doublel, l value 3= new doublelimgl. Height, ingl Width] 7 double avgl= sum/((imgl. Height-2)**(imgl Width-2 range avgI; e(u 50) f(u>100) Strength++; range avgl x strength range= range *((2* Strength -1)/2* strength) for (int i =0; i< img. lleight: il I) or (int j=0;j< ingl Width: j if (i=0 i==1 i= ingl Height-2 I ingl Height 1j-0j-1 j- imgl Width-2 j- ingl. Width-1 Value3li, jJ=0; continue if(Value2Li,j] >range) Value3[i, j]=1 p=p+1; else Valuc3「i,j1 0 for (int i =2 for (int j=2; j< imgl. Width-2;j=j+5) double max= o int a=0 int b= 0 for (int 2;s<i+3 8 for (int t=j t<j+3;t+-) f (value2[s, t] >MAX) MAX Value2[s, tI if (MAX>0) LoolStripProgressBarl. Value=8 Templet new double[u, 25 for (int Templet[i, t]=Value l [Co[i, 0]-2+m, Co[i, 1]-2+n]; / 存储5*5模板灰度 DataTable dt- now DataTablc( //给 datatable添加二个列 dt Columns. Add( vl, typeof (String)) dt Columns. Add("i], typeof(String)) Graphics g= Graphics. FromImage(curBitmap) //创建 Graphics 对象 InterpolationMode 【实例截图】
【核心代码】
标签:
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论