ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:296.53KB ,
资源ID:8621741      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8621741.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程作业3提取影像特征点.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程作业3提取影像特征点.docx

1、课程作业3提取影像特征点数字摄影测量作业报告提取影像特征点2010 年 12 月 15 日1 作业任务 - 32 作业思想 - 33 设计原理与思路- 34 作业过程 - 45 源程序 - 56 作业成果 - 97作业自我评点 - 108心得体会与建议- 101 作业任务提取一幅数字影像中的特征点:根据Moravec算子,编制程序,从一幅数字影像中自动提取50个以上的点特征(特征点)2作业思想理论上,特征是影像灰度曲面的不连续点。在实际影像中,由于点扩散函数的作用,特征表现为在一个微小邻域中灰度的急剧变化,或灰度分布的均匀性,也就是在局部区域中具有较大的信息量。若不考虑噪声,实际影像是理想灰度

2、函数与点扩散函数的卷积,则点特征与边缘特征如图232和图233所示,其灰度的分布均表现为从小到大或从大到小的明显变化,因而除了用局部信息量来检测特征之外,还可以利用各种梯度或差分算于提取特征。本次作业便采用Moravec算子,从影像中提取感兴趣的特征点。3设计原理与思路点特征主要是指明显点,如角点、圆点等。提取点特征的算子称为兴趣算子,即用某种算法从影像中提取感兴趣的特征点。本次作业采用Moravec算子的算法,提取特征点。Moravec算子的计算原理与步骤如下:(1). 计算各像素的兴趣值IV。在以像素(c , r)为中心的n* n(如5* 5)的窗口中,如图3-1所示,计算四个方向相邻像素

3、灰度差的平方和,则 图 3-1 Morabec算子式中:k=int(n/2)。取其中最小者作为该像素(c , r)的兴趣值,即(2). 给定一阈值,将兴趣值大于该阈值的点(窗口中心)作为候选点。(3). 选取候选点中的极值点作为特征点。在一定大小的窗口内(窗口大小可不同于兴趣值计算窗口),选择候选点中兴趣值最大的点作为特征点。根据以上Moravec算子的计算原理与步骤,运用visual studio新建项目,制作一个简单的小程序,包括打开图像,提取特征点,并且将特征点行列号列表显示等功能。4作业过程 41 窗体设计如图4-1-1,添加picturebox控件,相当于图像显示区;添加4个Butt

4、on控件,分别为“打开图像”,“保存图像”,“提取特征点”,“关闭”事件按钮;添加textbox控件,输入阈值;添加listview控件用于列表显示所提取特征点的相关信息。图 4-1-1 窗体设计42 编写代码: 根据所设计的窗体,为各控件添加事件代码。 “打开图像”,“保存图像”以及“关闭”控件代码参考C#数字图像处理算法典型事例编写;“提取特征点”代码根据Moravec算子的计算原理与步骤编写,并标记特征点;添加listview控件中的列(序号、行号、列号、兴趣值)并设置属性,于listview控件中列表显示特征点的行列号和兴趣值。43 调试程序: 准备一张特征明显的图像(在同学建议下,采

5、用八卦图),编写完代码后启用调试,根据错误提示找原因,一个一个解决问题。观察提取点的图像位置和数据有无异常,不断调试程序,直至程序运行正常。5 源程序using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace 提取影像特征点 public partial class Form1 : Form public Form1()

6、InitializeComponent(); private string curFileName; private System.Drawing.Bitmap curBitmap; /打开图像至picturebox控件窗口 private void open_Click(object sender, EventArgs e) OpenFileDialog opnDlg = new OpenFileDialog(); opnDlg.Filter = 所有图像文件 | *.bmp; *.pcx; *.png; *.jpg; *.gif; + *.tif; *.ico; *.dxf; *.cgm;

7、 *.cdr; *.wmf; *.eps; *.emf| + 位图( *.bmp; *.jpg; *.png;.) | *.bmp; *.pcx; *.png; *.jpg; *.gif; *.tif; *.ico| + 矢量图( *.wmf; *.eps; *.emf;.) | *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf; opnDlg.Title = 打开图像文件; opnDlg.ShowHelp = true; if (opnDlg.ShowDialog() = DialogResult.OK) curFileName = opnDlg.FileNa

8、me; try curBitmap = (Bitmap)Image.FromFile(curFileName); pictureBox1.Image = curBitmap; catch (Exception exp) MessageBox.Show(exp.Message); Invalidate(); /提取特征点 private void extraction_Click(object sender, EventArgs e) double V1, V2, V3, V4; int t = 0; int w, h, s; w = curBitmap.Width; h = curBitmap

9、.Height; s = w * h; double f = int.Parse(textBox1.Text);/获取阈值 double, Gray = new doublew, h;/存储所有像素点灰度值 double, IV = new doublew, h;/存储所有像素点兴趣值 double V = new doubles;/存储特征点兴趣值 double I = new doubles;/存储特征点列号 double J = new doubles;/存储特征点行号 Color curColor; Color c = Color.FromArgb(255, 0, 0);/设置标注特征

10、点的颜色:红色 /计算并存储所有像素点灰度值 for (int i = 0; i w; i+) for (int j = 0; j h; j+) curColor = curBitmap.GetPixel(i, j); Grayi, j = (int)(curColor.R * 0.299 + curColor.G * 0.587 + curColor.B * 0.114); /计算并存储所有像素点兴趣值 for (int i = 2; i w - 2; i+) for (int j = 2; j h - 2; j+) V1 = Math.Pow(Grayi - 2, j - Grayi -

11、1, j), 2) + Math.Pow(Grayi - 1, j- Grayi, j), 2) + Math.Pow(Grayi, j - Grayi + 1, j), 2) + Math.Pow(Grayi + 1, j - Grayi + 2, j), 2); V2 = Math.Pow(Grayi - 2, j - 2- Grayi - 1, j - 1), 2) + Math.Pow(Grayi - 1, j - 1 - Grayi, j), 2) + Math.Pow(Grayi, j - Grayi + 1, j + 1), 2) + Math.Pow(Grayi + 1, j

12、+ 1 - Grayi + 2, j + 2), 2); V3 = Math.Pow(Grayi, j - 2 - Grayi, j - 1), 2) + Math.Pow(Grayi, j - 1 - Grayi, j), 2) + Math.Pow(Grayi, j - Grayi, j + 1), 2) + Math.Pow(Grayi, j + 1 - Grayi, j + 2), 2); V4 = Math.Pow(Grayi - 2, j + 2 - Grayi - 1, j + 1), 2) + Math.Pow(Grayi - 1, j + 1 - Grayi, j), 2)

13、+ Math.Pow(Grayi, j - Grayi + 1, j - 1), 2) + Math.Pow(Grayi + 1, j - 1 - Grayi + 2, j - 2), 2); double IV1 = Math.Min(V1, V2); double IV2 = Math.Min(IV1, V3); double IV3 = Math.Min(IV2, V4); IVi, j = IV3; /提取兴趣值大于阈值的点并标记 for (int i = 2; i w - 2; i+) for (int j = 2; j f) Vt = IVi, j; It = i; Jt = j;

14、 t+; curBitmap.SetPixel(i, j, c); for (int n = 1; n 4; n+) if (i + n w & j + n = 0 & j - n = 0) curBitmap.SetPixel(i - n, j, c); curBitmap.SetPixel(i + n, j, c); curBitmap.SetPixel(i, j - n, c); curBitmap.SetPixel(i, j + n, c); /列表显示提取点的行列号和兴趣值 for (int k = 0; k t; k+) int xh = k + 1; ListViewItem l

15、i = new ListViewItem(); li.Text = xh.ToString(); li.SubItems.Add(Ik.ToString(); li.SubItems.Add(Jk.ToString(); li.SubItems.Add(Vk.ToString(); listView1.Items.Add(li); /保存图像 private void save_Click(object sender, EventArgs e) if (curBitmap = null) return; SaveFileDialog saveDlg = new SaveFileDialog()

16、; saveDlg.Title = 保存为; saveDlg.OverwritePrompt = true; saveDlg.Filter = BMP文件 (*.bmp) | *.bmp| + Gif文件 (*.gif) | *.gif| + JPEG文件 (*.jpg) | *.jpg| + PNG文件 (*.png) | *.png; saveDlg.ShowHelp = true; if (saveDlg.ShowDialog() = DialogResult.OK) string fileName = saveDlg.FileName; string strFilExtn = file

17、Name.Remove(0, fileName.Length - 3); switch (strFilExtn) case bmp: curBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp); break; case jpg: curBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); break; case gif: curBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Gif);

18、break; case tif: curBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Tiff); break; case png: curBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Png); break; default: break; /关闭窗口 private void close_Click(object sender, EventArgs e) this.Close(); 6 作业成果阈值取26000时,提取55个特征点:阈值取20000时,提取

19、423个特征点:7作业自我评点 71 优点:窗体设计简洁大方,虽然舍去了常规菜单栏的设计,但按钮功能更突出作业目的。提取特征点程序运算过程的编写无迭代和函数循环调用,运算速度快。特征点的标记采用以特征点为中心,改变周围像素点颜色使其成“+”的红色标记,定位准确,避免了直接使用DrawString方法绘制符号,造成符号中心与特征点不重合的定位错误。 72 缺点:窗体设计过于简单,程序功能不够完整全面,图像大小有上限,不能自动调整适应大图。程序运行并提取特征点后,要将程序最小化,再打开,才能看到特征点的标记。(原因尚在研究中)出现同一区域重复提取特征点,或是特征点靠太近的现象 73 自我评点:此次

20、作业总体来说完成了预定的任务,达到目的,但仍存在一些问题。在作业过程中,通过查阅资料,自主学习以及与同学交流,发现了不少问题并及时改进,仍然存在的问题实属时间和现阶段自己的编程技术限制,相信在以后的学习和提高之后能够解决好这些问题。8 心得体会与建议终于写到这一部分了,从开始准备做这次作业,到现在快要完成报告,不仅经历了很长时间,这个过程中自己也是感慨颇多,恨不得赶紧来写心得体会,抒发一下自己的感想。这一个作业可能是历时最长的一次作业吧,开始的时候属于无从下手什么都不懂的阶段,所以进展很慢,积极性也不高,自己也不自觉,导致时间拖得很长。一开始由于受“数字图像处理”这门课程影响,想用matlab

21、来实现这次作业,不过后来考虑matlab的可视化和使用方面不如visual studio编程,果断放弃了。转投visual studio程序设计后,又发现很多东西都忘了,于是又图书馆借书回来自己琢磨,温习大一暑假程序设计实习,然后一点一点开始了这次作业的编写。在程序设计的过程中,C#数字图像处理算法典型事例这本书给了我很大的帮助和影响,窗口的设计和“打开图像”“保存图像”等的设计理念和代码大部分都源于这本书,慢慢地自己也学习了不少图像处理方面的知识。在调试程序的过程中也很头疼,因为对C#语言还不是非常熟悉,所以有些错误让人有些束手无策,不过事实证明,耐心和细心地去寻找原因并解决问题是可行的,也

22、是以后的学习过程中自己需要培养的好习惯。当我的程序调试运行之后,各方面都挺顺利,不过让人郁闷的是特征点老是出现在了不是“特征”的位置上,为了解决这个问题,我自己一直研究了很久,感觉遇到了瓶颈。后来去请教了班上已经完成这个作业的同学,他们给我了很大的帮助,我才发现原来是直接使用DrawString方法绘制“+”符号而引起的,这个方法是直接用笔刷的方式绘制“+”符号,可能是取符号左上角对准位置,不能使符号中心与特征点很好地重合,导致定位错误。后来改用特征点的标记采用以特征点为中心,改变周围像素点颜色使其成“+”的红色标记,才使得定位准确。对比当初第一次完成的未修改的程序和今天经过多次调试和修改之后

23、的程序,发现真是变化很大。开始时自己的风格还总是局限于c+式,编写了很多子函数,如计算灰度值的子函数,计算兴趣值的子函数,在特定大小的窗口中提取特征点的子程序等,然后再一一调用,这样下来程序运行非常慢,同学看了之后都笑称我的程序提取点就像一个动态FLASH,确实,每找到一个特征点标记一次,而非先全部找到后记录下来再标记这样非常耗费时间。不过改进之后,用3个数组存储找到的特征点信息,然后再全部标记,这样速递大大提高。还有一开始的时候我还不知道用listview控件,也是按照C+的思想,将特征点的行列号输出到了文本。后来在与同学交流中惊喜地发现这个控件可以使用,又改进了自己的程序。不过程序很多地方仍然存在不足,感觉专业知识方面的原理都很清楚了,就是程序设计和代码编写方面的技术不够,经验不足,加上时间限制也没法短时间内让自己称为一个编程高手,故还请老师原谅,我的程序确实比较简单。这次作业又让我想起了上学期刚后方交会课程作业的情况,也是一开始觉得无从下手,自己把自己吓倒了,最后完成之后才恍然发现其实也并不难,其实也不是作业很简单,是自己在这个过程中又不断地学习和提高,使自己更加有实力来完成作业。作业过程中的经验和体会相信会给以后的学习带来莫大的帮助。感谢老师,感谢这样一次作业的机会又让我提高了不少。谢谢老师辛苦地审阅此次作业!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1