图像特征点提取程序设计(C#)

所需积分/C币:50 2016-10-31 22:07:31 766KB PDF
收藏 收藏
举报

该文档介绍了基于Moravec算子的图像特征点提取方法的基本原理与实现过程,内附程序代码与运行结果截图。
一作业任务 本次实验的内容和要求如下: 任务:提取一幅数字影像中的特征点 内容:使用 算子编写程序,从数字影像屮自动提取 个特征点 要求:程序能读取数字图像、在窗口中显示整幅图像、在图像中显示所提取的 特征点,并列表显示各特征点的像素坐标。 二计算原理 1.计算四个方向上相邻像素灰度差的平方和 其中 计算各个像元点的兴趣值 3.根据阈值确定特征候选点。给定阈值,将兴趣值大于阈值的点确定为特征候选点。 注意:阈值过大,将导致一珰真正的特征点被淘汰;阈值过小,将保留太多的虚假 特征点 4.选取特征侯选点中的极值点作为作为特征点。在一定的窗口内,仅将兴趣值最大的 点判定为特征点,以达到局部非最大抑制的目的 图1特征点选取示意图 程序编写 3.1设计思路 1.本次实验是利用 moravec算子来选取图像特征点,釆用c#语言编程。为」界面的美 观,使用∫ StripMenu控件,依此放置打开、保存、退岀等按钮,然后在设计界面 上,使用 picturebox控件和 listview控件,用于显示图像和特征点的坐标信息。同 时,采用了 mousemove事件,可以显示当前鼠标所在位置的坐标信息,使得稈序 更加人性化 2.关于本程序的核心算法。这其屮最重要的问题便是阈值的选取,由于要产生50至 100个特征点,所以应该使得阈值合适,恰好可以生成这么多个特征点。首先,阈 值的初始值采用所有兴趣值的平均值,然后便依据产生的特征点的个数来调整阈值 的大小。具体的做法:假如检测到的特征点的个数多于100个,那么就将阈值增加 m,m的数值等亍兴越值的平均值;若检测到的特征点的个数少丁50个,就将阈 值设置为前两个阈值的平均值。然后依此进行循环检测,直至满足要求。 32源代码 using System using System. IO using System. Collections, Generic using System. ComponentModel; using System. dat 4 using System. drawing using System. Ling using Sys lel. Tex U using System. Threading Tasks using System. Windows Forms name space作业三程序 public partial class Forml Form private string curFileName private System. Drawing Bitmap curBi tmap doublc「, I valuer; Image img public FormI( InitializcComponcnt() listViewl. Columns. Add(F=, 50, llorizontalAlignment Center listViewl. Columns. Add("I (3), 60, HorizonlalAlignen. Center listViewl. Columns. Add(" J(i), 60, HorizontalAlignment Center) list viewl, gridlines true listview. view view Details listView. lleaderStyle= columnlleaderstyle Clickable listview. full rowselect true listvicwl. scrollable- truc privale void打开佟像 ToolSiripMenuIlem Click( ob jecl sender, Even LArgs e) OpenliileDialog openDlg new (penlileDlialogo openDlg. InitialDirectory="C: \\Users\\Administrator. PC-20150328IVBE \\ Desktop openDig Filter="图像文件*.jpg;*.bmp;*,png;*,tif pendLe. TitIc="迭择图像文件 openDlg. Showllelp = true if (openDlg ShowDialog(=- DialogResult. OK) tr curl'ileName=openDIg I'ileName img= Image FromFile(curFileName) 5 pictureBox Image= img; catch(Exception exp) MessageBox. Show(exp Message) Invalidated curBitmap =(Bitmap) img Valuel= new double[curBitmap. Height, curBitmap Width] if (curBitmap ! null) Color curcolor for(int i=0; i< curBitmap. Hcight; i+- for (inl j=0; j< curBi Lmap Wid curColor curBitmap. GetPixel (j Valuelli,jl= curColorR*0.299+curColor G *0.587+ cur Color. B 0.114 private void 1H1iToolStripMcnuItcm Click(object scndcr, EvcntArgs c) string str SaveFileDialog saveFileDialogl= new SaveFileDialog( save Filedialog1. Filter="所有文件(*.*)*.* savcFilcDialogl. ShowDialogo tr= savelileDialogl fileName picture Boxl Image Save(str); private void moravecfToolStripMenuItem Click(object sender, EventArgs e double, value2= new doublelimg. Height, img. Width for (int i=2; i< img. Height or(inl j=2; j< img. WidLh-2: j++) double v1= o for (int m=0; m< 4: m++) Li-2+ll, j]-Valuelli double v2= 0 for (int m =0:m<4; m++) V2=V2 Math Puw(Valuel Li-2 m- Valuelli-1 double v3= 0 for (int V3-V3+ Math. Pow (Valuclli, j-2+m1-Valuclli, j-1+ml, 2) double v4= 0 for (int m =0: m< 4: m++) V4=V4+Math. Pow(Valuel[i-2+m,j+2-m][i-1 n,j11m],2);//计算V4方向相邻像素灰度差平方和 Valuc2「i, Math. Min(Math. Min (Math. Min(v1, v2), V3), V4) double sum = o i mg. He ight for (int j=0; j< img. Width 2; jI1) luen[i, j int u=110, p=0, Strength =0 double rang Co new int [img. Height*img. Width/9, 2 double[,l value3= new double limg. Height, img. Width double avgl= sum,((img. lleight 2)*(img. Width 2)) rang 7 while (u>100 u<50 f(u>100) Strength+ range avgI t strength; range= range **((2 i Strength -1)/2* Strength for(int i=0; i< img. Height; i++) for (int img. Width: j++) if (i=o i=1 i= img. Height-2 i= img. Heigh I j= img. Width-2 j= img. Width-1) Valuc3「i,j continue e⊥se if (value2Li, j> range) 3[i,j u=0 for (int i=2; i< img. Height-2:i=i+5) for (int j=2:j< img. Width-2:j=j+5) tbIc max- o int tb=0; for (int i-2:s<i+3:s-+) for(int 2;t< if(Value3[s, t]>MA 8 MAX Values, tI if (MAx> 0) CoLu, 0 Cou, 11-b u=1+1 Graphics g- Graphics. FromImagc(curBitmap 创建 Graphics 对象 g. InterpolationMode System. Drawing. Drawing2D. InterpolationMode HighQualityBicubic //设置高质量双三次插 值法 g. SmoothingModc- Systcm. Drawing. Drawing 2D. SmoothingModc HighQuality //设置高质量,低速度呈现平滑程度 g Compus i tingQualily System. Drawing. Drawing2D CompositingQuality. HighQualit //设置绘制到此 Graphics的合成图像的呈现质量 g DrawImage(img, 0, 0, img. Width, img. Height) //以img为原本重新于 (0,0)点绘制 g Dispose /释放资源 for (int i=0:i<u i++) Graphics my Graphics= Graphics. FromImage(curBitmap): //GRaphics 对象 my Graphics. DrawLine(new Pen(Color. Red, 1), new Point(Coli, 1]+ 5, CoLi 01), new point(Co「i,11-5,Co「i,01):/画出竖直方向直线 myGraphics. DrawLine(new Pen(Color. Red, 1), new Point(Coli, 1, CoLi, 0 5), new Point(Co[i,1],Co[i,0-5);/画出水平方向直线 myGraphics. D ) //释放资源 picture Boxl Image curBitmap //显示含有“+” 的图 ListViewItem IT2= new ListViewItemO IT2. Text =(i+1). ToString IT2. SubItems. Add( Coli, 1. ToString() IT2. SubItems. Add(Coli, 0]. ToString) listView. Items. Add(IT2 privale void iEH ToolStripMenultemll Click(ob ject sender, Even LArgs e) this Close o privale void Forml Load (object sender, EventArgs e) this.Text="20133292—图像处理程序" privale void label2 Click(object sender, EvenLArgs e) private void toolStripLabcll Click(object scndcr, EventArgs c private void pictureBoxl MouseMove(object sender, MouseEventArgs e) Lr toolStripTextBox1.Text=e.X. ToString;/显示X坐标 toolStripTextBox2.Text=e.Y. ToString;//显示y坐标 private void toolStripl ItemClicked(object sender, ToolStripItemClickedEventArgs e

...展开详情
试读 12P 图像特征点提取程序设计(C#)
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    img
    WGS0806

    关注 私信 TA的资源

    上传资源赚积分,得勋章
    最新推荐
    图像特征点提取程序设计(C#) 50积分/C币 立即下载
    1/12
    图像特征点提取程序设计(C#)第1页
    图像特征点提取程序设计(C#)第2页
    图像特征点提取程序设计(C#)第3页
    图像特征点提取程序设计(C#)第4页

    试读已结束,剩余8页未读...

    50积分/C币 立即下载 >