课程作业4相关系数法识别同名点要点.docx
- 文档编号:25041650
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:20
- 大小:353KB
课程作业4相关系数法识别同名点要点.docx
《课程作业4相关系数法识别同名点要点.docx》由会员分享,可在线阅读,更多相关《课程作业4相关系数法识别同名点要点.docx(20页珍藏版)》请在冰豆网上搜索。
课程作业4相关系数法识别同名点要点
数字摄影测量作业报告
相关系数法识别同名点
2010年12月16日
1作业任务------------------------------------------------------------------------------------3
2作业思想---------------------------------------------------------------------------------------3
3设计原理与思路--------------------------------------------------------------------3
4作业过程---------------------------------------------------------------------------4
5源程序-----------------------------------------------------------------------------5
6作业成果---------------------------------------------------------------------------9
7作业自我评点-----------------------------------------------------------------------------10
8心得体会与建议-----------------------------------------------------------------------------10
1作业任务
根据给出的两幅影像,编制程序:
1.从左影像(L.jpg)中,利用Moravec算子,自动提取10个以上的特征点。
要求:
程序能读取*.JPG图像、在窗口或控件中显示整幅图像、在图像中显示出所提取的特征点(+),并列表显示各特征点的像素坐标。
2.从右(R.jpg)影像中,利用相关系数测度,自动提取与左影像特征点匹配的同名像点。
要求:
在左、右影像中分别显示特征点与同名像点,并列表显示各点的像素坐标。
2作业思想
数字影像相关原理:
数字影像相关是利用计算机对数字影像进行数字计算得方式完成影像的相关,识别出两幅(或多幅)影像的同名点。
计算时,首先取出以待定点为中心的小区域中的影像信号,然后取出其在另一影像中相应区域的影像信号,计算两者的相关函数,以相关函数最大值对应的相应区域中心点为同名点,即以影像信号分布最相似的区域为同名区域。
同名区域的中心点为同名点,这就是自动化立体量测的基本原理。
一般在影像上搜索同名点是一个二维搜索即二维相关的过程。
二维影像相关时,先在一般在左影像上先确定一个待定点,称之为目标点,以此待定点为中心选取m*n(通常取m=n)个像素的灰度阵列作为目标区或称目标窗口,如图2-1所示。
为了在右影像上搜索同名点,必须估计出该同名点可能存在的范围,建立一个k*l(k>m,l>n)个像素的灰度阵列作为搜索区,相关的过程就是依次在搜索区中取出m*n个像素灰度阵列作为搜索窗口,计算其与目标区的相似性测度,则
式中:
(i0,j0)为搜索中心。
当
取最大值时,该搜索窗口的中心像素被认为是目标点的同名点。
即当
时,(c,r)即为目标点的同名点。
图2-1
3设计原理与思路
在“课程作业3—提取影像特征点”编制的程序基础上,提取数字影像左片的特征点,根据以上思想和原理,按照相关系数法算法继续编制程序提取出右片中相应特征点的相关系数最大的点,即同名点。
相关系数法:
相关系数是标准化的协方差函数,协方差函数除以两信号的方差即得相关系数。
函数g(x,y)与g’(x’,y’)的相关系数为
对于离散灰度数据,相关系数的估计公式为:
若
,则
为搜索区影像相对于目标去影像位移的行、列参数。
4作业过程
4.1窗体设计
如图4-1-1,添加2个picturebox控件,相当于图像显示区,分别用于显示左片和右片;添加7个Button控件,分别为“提取左片特征点”,“识别右片同名点”,“关闭”,2个“打开图像”,2个“保存图像”事件按钮;添加textbox控件,输入阈值;添加listview控件用于列表显示所提取特征点的相关信息以及所识别的同名点的相关信息,使两个控件靠近,便于做数据比对。
图4-1-1窗体设计
4.2编写代码:
根据所设计的窗体,为各控件添加事件代码。
“打开图像”,“保存图像”以及“关闭”控件代码参考《C#数字图像处理算法典型事例》编写;“提取特征点”代码根据Moravec算子的计算原理与步骤编写,并标记特征点;“识别同名点”代码根据数字影像匹配的原理,按照相关系数法的估计公式计算相关系数,分别识别出每一个特征点的同名点;添加listview控件中的列(序号、行号、列号、兴趣值)并设置属性,于listview控件中列表显示特征点的行列号和兴趣值。
4.3调试程序:
编写完代码后启用调试,根据错误提示找原因,一个一个解决问题。
左右片使用同一张图片,运行程序,对比图像和数据,观察特征点的提取有无异常,观察同名点识别是否准确,观察相关系数值大小变化,有错误便重新返回程序寻找原因,解决问题。
5源程序
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespace相关系数法识别同名点
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatestringcurFileName1;
privatestringcurFileName2;
privateSystem.Drawing.BitmapcurBitmap1;
privateSystem.Drawing.BitmapcurBitmap2;
//打开左片
privatevoidopen1_Click(objectsender,EventArgse)
{
OpenFileDialogopnDlg=newOpenFileDialog();
opnDlg.Filter="所有图像文件|*.bmp;*.pcx;*.png;*.jpg;*.gif;"+
"*.tif;*.ico;*.dxf;*.cgm;*.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)
{
curFileName1=opnDlg.FileName;
try
{
curBitmap1=(Bitmap)Image.FromFile(curFileName1);
pictureBox1.Image=curBitmap1;
}
catch(Exceptionexp)
{
MessageBox.Show(exp.Message);
}
}
Invalidate();
}
//打开右片
privatevoidopen2_Click(objectsender,EventArgse)
{
OpenFileDialogopnDlg=newOpenFileDialog();
opnDlg.Filter="所有图像文件|*.bmp;*.pcx;*.png;*.jpg;*.gif;"+
"*.tif;*.ico;*.dxf;*.cgm;*.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)
{
curFileName2=opnDlg.FileName;
try
{
curBitmap2=(Bitmap)Image.FromFile(curFileName2);
pictureBox2.Image=curBitmap2;
}
catch(Exceptionexp)
{
MessageBox.Show(exp.Message);
}
}
Invalidate();
}
//保存左片图像
privatevoidsave1_Click(objectsender,EventArgse)
{
if(curBitmap1==null)
{
return;
}
SaveFileDialogsaveDlg=newSaveFileDialog();
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)
{
stringfileName=saveDlg.FileName;
stringstrFilExtn=fileName.Remove(0,fileName.Length-3);
switch(strFilExtn)
{
case"bmp":
curBitmap1.Save(fileName,System.Drawing.Imaging.ImageFormat.Bmp);
break;
case"jpg":
curBitmap1.Save(fileName,System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case"gif":
curBitmap1.Save(fileName,System.Drawing.Imaging.ImageFormat.Gif);
break;
case"tif":
curBitmap1.Save(fileName,System.Drawing.Imaging.ImageFormat.Tiff);
break;
case"png":
curBitmap1.Save(fileName,System.Drawing.Imaging.ImageFormat.Png);
break;
default:
break;
}
}
}
//保存右片图像
privatevoidsave2_Click(objectsender,EventArgse)
{
if(curBitmap2==null)
{
return;
}
SaveFileDialogsaveDlg=newSaveFileDialog();
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)
{
stringfileName=saveDlg.FileName;
stringstrFilExtn=fileName.Remove(0,fileName.Length-3);
switch(strFilExtn)
{
case"bmp":
curBitmap2.Save(fileName,System.Drawing.Imaging.ImageFormat.Bmp);
break;
case"jpg":
curBitmap2.Save(fileName,System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case"gif":
curBitmap2.Save(fileName,System.Drawing.Imaging.ImageFormat.Gif);
break;
case"tif":
curBitmap2.Save(fileName,System.Drawing.Imaging.ImageFormat.Tiff);
break;
case"png":
curBitmap2.Save(fileName,System.Drawing.Imaging.ImageFormat.Png);
break;
default:
break;
}
}
}
privateint[]I=newint[50];//存储左片特征点列号
privateint[]J=newint[50];//存储左片特征点行号
privatedouble[]V=newdouble[50];//存储左片特征点兴趣值
privatedouble[,]Gray=newdouble[600,500];//存储左片所有像素点灰度值
privatedouble[,]Gray1=newdouble[600,500];//存储右片所有像素点灰度值
//提取左片特征点
privatevoidextraction_Click(objectsender,EventArgse)
{
doubleV1,V2,V3,V4;intt=0;intw,h;
w=curBitmap1.Width;
h=curBitmap1.Height;
doublef=int.Parse(textBox1.Text);
double[,]IV=newdouble[w,h];
ColorcurColor;
Colorc1=Color.FromArgb(255,0,0);
for(inti=0;i { for(intj=0;j { curColor=curBitmap1.GetPixel(i,j); Gray[i,j]=(int)(curColor.R*0.299+curColor.G*0.587+curColor.B*0.114); } } for(inti=2;i { for(intj=2;j { V1=Math.Pow((Gray[i-2,j]-Gray[i-1,j]),2)+Math.Pow((Gray[i-1,j]-Gray[i,j]),2)+Math.Pow((Gray[i,j]-Gray[i+1,j]),2)+Math.Pow((Gray[i+1,j]-Gray[i+2,j]),2); V2=Math.Pow((Gray[i-2,j-2]-Gray[i-1,j-1]),2)+Math.Pow((Gray[i-1,j-1]-Gray[i,j]),2)+Math.Pow((Gray[i,j]-Gray[i+1,j+1]),2)+Math.Pow((Gray[i+1,j+1]-Gray[i+2,j+2]),2); V3=Math.Pow((Gray[i,j-2]-Gray[i,j-1]),2)+Math.Pow((Gray[i,j-1]-Gray[i,j]),2)+Math.Pow((Gray[i,j]-Gray[i,j+1]),2)+Math.Pow((Gray[i,j+1]-Gray[i,j+2]),2); V4=Math.Pow((Gray[i-2,j+2]-Gray[i-1,j+1]),2)+Math.Pow((Gray[i-1,j+1]-Gray[i,j]),2)+Math.Pow((Gray[i,j]-Gray[i+1,j-1]),2)+Math.Pow((Gray[i+1,j-1]-Gray[i+2,j-2]),2); doubleIV1=Math.Min(V1,V2); doubleIV2=Math.Min(IV1,V3); doubleIV3=Math.Min(IV2,V4); IV[i,j]=IV3; } } for(inti=2;i { for(intj=2;j { if(IV[i,j]>f) { V[t]=IV[i,j]; I[t]=i; J[t]=j; t++; curBitmap1.SetPixel(i,j,c1); for(intn=1;n<4;n++) { if(i+n { curBitmap1.SetPixel(i-n,j,c1); curBitmap1.SetPixel(i+n,j,c1); curBitmap1.SetPixel(i,j-n,c1); curBitmap1.SetPixel(i,j+n,c1); } } } } } for(intk=0;k { intxh=k+1; ListViewItemli=newListViewItem(); li.Text=xh.ToString(); li.SubItems.Add(I[k].ToString()); li.SubItems.Add(J[k].ToString()); li.SubItems.Add(V[k].ToString()); listView1.Items.Add(li); } textBox2.Text=t.ToString(); } //计算相关系数 publicdoubleRelatedCoefficient(intx,inty,intc,intr) { doubleg=0,g1=0,h1=0,h2=0,h3=0,p=0; for(inti=-2;i<2;i++) { for(intj=-2;j<2;j++) { g+=Gray[x+i,y+j]; g1+=Gray1[c+i,r+j]; } } g/=25; g1/=25; for(inti=-2;i<2;i++) { for(intj=-2;j<2;j++) { h1+=(Gray[x+i,y+j]-g)*(Gray1[c+i,r+j]-g1); h2+=Math.Pow((Gray[x+i,y+j]-g),2); h3+=Math.Pow((Gray1[c+i,r+j]-g1),2); } } p=h1/Math.Sqrt(h2*h3); returnp; } //识别同名点 privatevoidmatching_Click(objectsender,EventArgse) { intf=int.Parse(textBox2.Text);//获取特征点个数 intw2=curBitmap1.Width; inth2=curBitmap1.Height; int[]I2=newint[f];//存储同名点列号 int[]J2=newint[f];//存储同名点行号 double[]RC=newdouble[f]; ColorcurColor; Colorc1=Color.FromArgb(255,0,0); //计算右片所有像素点灰度值 for(inti=0;i { for(intj=0;j { curColor=curBitmap2.GetPixel(i,j); Gray1[i,j]=(int)(curColor.R*0.299+curColor.G*0.587+c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 作业 相关系数 识别 同名 要点
![提示](https://static.bdocx.com/images/bang_tan.gif)