




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、模式识别作业三一、编程要求:编程实现KL变换,并对TM六波段图像进行演算。KL变换的思想是:从n维特征选取m维特征,删去的n-m维特征不一定就是无用的信息,如何在信息损失最小的情况下选取特征,在理论上就显得更严密些。通常采用正交变换,得到新的经变换的模式, 以保证信息损失最小情况下获得有利于分类的特征。二、编程思想:将6副图象依次输入获得灰度值存在一个6*size(size为一副图象的像素数)的二维数组中,计算每个波段的灰度均值,然后计算协方差矩阵,得出特征值和特征向量,再重新计算要输出的处理的图象的灰度。三、核心代码:void CKLchangeView:Oninput() /TM图象数据读
2、入AfxMessageBox("注意:请一次将6副图象都读入!");/读图象的方法int flag=0;while(flag<6)CFileDialog dlg(TRUE,"bmp",".bmp");if(dlg.DoModal()=IDOK)m_NewFileNameflag=dlg.GetFileName();for(int j=0;j<5;j+)if(flag=j|m_NewFileNameflag!=m_NewFileNamej) continue;else AfxMessageBox("已打开过的图象!
3、请按方法重新打开!");flag=0; for(int i=0;i<6;i+) m_NewFileNamei=""return;NewFileName=m_NewFileNameflag;flag+;/判断是否是已经打开的图象,若已经打开,则要重新按方法打开else /不读图象,或是只是要看图象for(int i=0;i<6;i+) m_NewFileNamei=""return;CDC *pDC = GetWindowDC();CFile f(NewFileName,0);m_pDib.Read(&f);/读图象if(m_
4、pDib.m_nColorTableEntries!=256)/判断是否是灰度图象AfxMessageBox("请打开灰度图象!");return;CKLchangeDoc* pDoc = GetDocument(); pDoc->pDib=&m_pDib;OnDraw(pDC);/调用OnDraw函数绘图sizeImage = m_pDib.GetDimensions(); sizeSaveImage = m_pDib.GetDibSaveDim(); a=sizeSaveImage.cx * sizeSaveImage.cy;/象素数if(flag=1)
5、tm=CMatrix(6,a);/开第一副图象时为矩阵分配内存 /将每幅图象象素灰度值放入矩阵中if(flag=1)for(int i=0;i<a;i+)tm.m_pDatai=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/sizeImage.cx)+i%sizeImage.cx);if(flag=2)for(int i=0;i<a;i+)tm.m_pDataa+i=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/sizeImage.cx)+i%sizeImage.cx);if(flag=3)for(int i=0;i&
6、lt;a;i+)tm.m_pData2*a+i=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/sizeImage.cx)+i%sizeImage.cx);if(flag=4)for(int i=0;i<a;i+)tm.m_pData3*a+i=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/sizeImage.cx)+i%sizeImage.cx);if(flag=5)for(int i=0;i<a;i+)tm.m_pData4*a+i=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/siz
7、eImage.cx)+i%sizeImage.cx);if(flag=6)for(int i=0;i<a;i+)tm.m_pData5*a+i=*(m_pDib.m_lpImage+sizeSaveImage.cx*(i/sizeImage.cx)+i%sizeImage.cx);void CKLchangeView:OnKl() /KL变换计算int i,j;xfea.Init(6,1);xfeat.Init(1,6);temp=CMatrix(6,6);feature=new double6;fea.Init(6,6);double tmave6;/求每幅图象的灰度均值for (i=
8、0;i<6;i+)tmavei=0;for(j=0;j<a;j+)tmavei+=tm.m_pDatai*a+j;tmavei/=(double)a;/求方差矩阵Rfor(j=0;j<36;j+) temp.m_pDataj=0.0;for(i=0;i<a;i+) temp.m_pDataj+=(tm.m_pData(j/6)*a+i%6-tmavej/6)*(tm.m_pData(j%6)*a+i%6-tmavej%6);temp.m_pDataj/=(double)a; temp.JacobiEigenv2(feature, fea, 0.000001);/求特征值
9、和特征向量 double t=0.0;double featuretemp6;/临时变量 for(i=0;i<6;i+)featuretempi=featurei;/给临时数组赋值 for(i=0;i<6;i+)/"冒泡法"将特征值排序 for(j=0;j<5;j+) if(featurej>featurej+1) t=featurej; featurej=featurej+1; featurej+1=t; for(i=0;i<6;i+)/求出特征值排序后对应在特征值数组中的位置 for(j=0;j<6;j+) if(featurei=f
10、eaturetempj) indexi=j; void CKLchangeView:OnFirst() /第一主分量 if(NewFileName="") AfxMessageBox("请先读入图象数据!");return;if(fea.m_pData0=0) OnKl();result.Init(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex5+j*6*tm.m_pDataj*a+i; Draw();void CKLchangeVie
11、w:OnFive() /第五主分量if(NewFileName="") AfxMessageBox("请先读入图象数据!");return;if(fea.m_pData0=0) OnKl();result.Init(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex1+j*6*tm.m_pDataj*a+i; Draw();void CKLchangeView:OnFour() /第四主分量if(NewFileName="&quo
12、t;) AfxMessageBox("请先读入图象数据!");return;if(fea.m_pData0=0) OnKl();result.Init(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex2+j*6*tm.m_pDataj*a+i; Draw();void CKLchangeView:OnSecond() /第二主分量if(NewFileName="") AfxMessageBox("请先读入图象数据!")
13、;return;if(fea.m_pData0=0) OnKl();result.Init(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex4+j*6*tm.m_pDataj*a+i;Draw();void CKLchangeView:OnSix() /第六主分量if(NewFileName="") AfxMessageBox("请先读入图象数据!");return;if(fea.m_pData0=0) OnKl();result.Ini
14、t(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex0+j*6*tm.m_pDataj*a+i; Draw();void CKLchangeView:OnThird() /第三主分量if(NewFileName="") AfxMessageBox("请先读入图象数据!");return;if(fea.m_pData0=0) OnKl(); result.Init(1,a);for(int i=0;i<a;i+)for(int j=0;j<6;j+) result.m_pDatai+=fea.m_pDataindex3+j*6*tm.m_pDataj*a+i; Draw();void CKLchangeView:Draw() /图象输出int i;for(i=0;i<a;i+)/处理越界的灰度值if(result.m_pDatai<0) result.m_pDatai=0; if(result.m_pDatai>255) result.m_pDatai=255; for (i = 0; i <a; i +)/重新给图象每个象素赋灰度值 un
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 增资扩股入股协议
- 电子商务平台运营销售合作协议
- 股份制企业合同文书范例与解析
- 网络直播行业版权使用许可协议
- 教育信息化产品采购安装协议
- 经典个人手车转让合同
- 海洋资源开发项目合作框架协议
- 电子发票开具专项协议
- 粤教版高中信息技术必修教学设计:4.1编制计算机程序解决问题
- Unit 5 There is a big bed 单元整体(教学设计)-2024-2025学年人教PEP版英语五年级上册
- (完整版)苏教版六年级下数学比例重难点练习
- 热能与动力工程测试技术- 流量测量
- 中国古代文学史 建安文学与正始文学
- 课堂嵌入式评价及其应用
- 高中物理课程标准
- 化工原理传质导论
- 环境与可持续发展ppt课件(完整版)
- Linux操作系统课件(完整版)
- 跨境电商亚马逊运营实务完整版ppt课件-整套课件-最全教学教程
- 中国传媒大学《当代电视播音主持教程》课件
- 浙美版小学六年级美术下册全册精品必备教学课件
评论
0/150
提交评论