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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(遥感影像监督分类与非监督分类及相关代码实现Word下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

遥感影像监督分类与非监督分类及相关代码实现Word下载.docx

1、float train1603,train2603,train3603,train4603; /存各类训练样本 float m13,m23,m33,m43,c133,c233,c333,c433; /各类均值向量及协方差矩阵float p=0.25; /先验概率float test24011; /检验样本 各列分别存放:分类前类别,行号,列号,一波段灰度,二波段灰度,三波段灰度,分类后类别float a1,a2,a3,a4; /公式中常数项;float qq,qq1,qq2,qq3,qq4; /分类精度 float k; /kappa值int q44; /混淆矩阵float a44; /精度指

2、标矩阵 各列分别为生产者精度 漏分误差 /用户精度 错分误差int main() void getdata1(char *filename); void getdata2(char *filename); void compute(float train603,float m3,float c33,float *a); float identify(float m3,float c33,float a,float band1,float band2,float band3); int classify(float p1,float p2,float p3,float p4); void tes

3、ting(); void accuracy(float p44); void output(char *filename); void output1(char *filename); getdata1(05training.txt); /存放的是训练样本三个波段的灰度值 getdata2(05testing.txt /检验样本行号 列号 类别代码 三个波段的灰度值 compute(train1,m1,c1,&a1); /计算各类均值向量及协方差矩阵 compute(train2,m2,c2,&a2); compute(train3,m3,c3,&a3); compute(train4,m4,

4、c4,&a4); testing(); /对检验样本分类 accuracy(a); output(05test-result.txt output1(05confusion-matrix.txt return 0;void getdata1(char *filename) ifstream infile(filename,ios:in|ios:nocreate); /把每类样本的灰度值依次存入对应的数组 if(infile=0) coutopen infile error!endl; exit(1); int i,j; for(i=0;i60;i+) for(j=0;jtrain1ij;tra

5、in2ij;train3ij;train4ij; infile.close();void getdata2(char *filename) cout exit(1);240;i+) /检验样本的数量为2406;j+) /行、列号、类别代码、三个波段灰度值testij;void compute(float train603,float m3,float c33,float *a) void gauss(int f,float n33); /求n矩阵的逆阵声明 i+) mi=0; mi+=trainji; mi=mi/60; float Train360; /转置矩阵 Trainij=trainj

6、i; int k;i+) /求协方差 for(j=0; cij=0; for(k=0;kk+) cij+=(Trainik-mi)*(trainkj-mj); cij=cij/60; *a=c00*c11*c22+c01*c12*c20+c02*c10*c21 -c02*c11*c20-c00*c12*c21-c01*c10*c22; *a=(-0.5)*log(*a)+log(p)-25*log(2*PI); gauss(3,c); float identify(float m3,float c33,float a,float band1,float band2,float band3) /

7、 计算待分样本的d(X) float x3; x0=band1; x1=band2; x2=band3; xi-=mi; float d3; di=0; di+=(xi*cji); double q=0; q+=xi*di; q=(-0.5)*q+a; q=exp(q); return q;int classify(float p1,float p2,float p3,float p4) /根据后验概率将像元归为指定类别 float p4; p0=p1; p1=p2; p2=p3; p3=p4; int i,k=0; float max=p0; for(i=1;4; if(maxpi) max

8、=pi; k=i; k+; return k;void testing() double p1,p2,p3,p4,p5,p6,p7; float kappa(int k44); p1=identify(m1,c1,a1,testi3,testi4,testi5); p2=identify(m2,c2,a2,testi3,testi4,testi5); p3=identify(m3,c3,a3,testi3,testi4,testi5); p4=identify(m4,c4,a4,testi3,testi4,testi5);p5=identify(m5,c5,a5,testi3,testi4,t

9、esti5);p6=identify(m6,c6,a6,testi3,testi4,testi5);p7=identify(m7,c7,a7,testi3,testi4,testi5); double dx=p1+p2+p3+p4+p5+p6+p7; p1=p1/dx; p2=p2/dx; p3=p3/dx; p4=p4/dx; p5=p5/dx; p6=p6/dx; p7=p7/dx; testi7=p1; testi8=p2; testi9=p3; testi10=p4; testi11=p5; testi12=p6; testi113=p7; testi6=classify(p1,p2,

10、p3,p4,p5,p6,p7); / coutsetiosflags(ios:fixed)setprecision(3)p1 p2p3p4p5p6p77; qij=0;i+) / 混淆矩阵中的各类别组合数量 if(testi2=1&testi6=1) q00+;testi6=2) q01+;testi6=3) q02+;testi6=4) q03+; if(testi2=1&testi6=4) q04+;testi6=4) q05+;testi6=4) q06+; for(i=60;120; if(testi2=2&testi6=1) q10+;testi6=2) q11+;testi6=3)

11、 q12+;testi6=4)q13+; if(testi2=2&testi6=4)q14+;testi6=4)q15+;testi6=4)q16+; for(i=120;180; if(testi2=3&testi6=1) q20+;testi6=2) q21+;testi6=3) q22+;testi6=4) q23+; if(testi2=3&testi6=4) q24+;testi6=4) q25+;testi6=4) q26+; for(i=180; if(testi2=4&testi6=1) q30+;testi6=2) q31+;testi6=3) q32+;testi6=4)

12、q33+;testi6=4) q34+;testi6=4) q35+;testi6=4) q36+; qq1=(float)q00/60.0; qq2=(float)q11/60.0; qq3=(float)q22/60.0;qq4=(float)q33/60.0;qq5=(float)q43/60.0;qq6=(float)q53/60.0;qq7=(float)q63/60.0; qq=(qq1+qq2+qq3+qq4+ qq5+qq6+qq7)/4; qq=qq*100; k=kappa(q);/ cout1 代表 房顶 , 2 代表 街道 , 3 代表 小路 ,4 代表 草地 ,5 代

13、表 树木,6 代表 水体,7 代表 阴影正确分类百分比分别为:;qq1qq2qq3qq4qq5 qq6qq7总分类精度:setprecision(2)qq%Kappa值为:void output(char *filename) ofstream outfile(filename,ios:out); if(outfile=0)open outfile error! outfilesetprecision(4)row col before after proba1 proba2 proba3 proba4 int i;setprecision(0)testi0testi1testi2testi6t

14、esti7testi8testi9testi10=0;k-) p=n00;f; q=ni0; hi=(ik)?q:-q)/p; for(j=1;=i; ni-1j-1=nij+q*hj; nf-1f-1=1/p; nf-1i-1=hi;i; nji=nij;float kappa(int k44) float K; int c4,d4; int N=0, M=0, D=0; ci=0; di=0; N+=kij; if(i=j) D=D+kij; ci=kij+ci; dj=kij+dj; M=ci*di+M; K=float(N*D-M)/(N*N-M); return K;void acc

15、uracy(float p44) int a4,b4; float a14,a24,b14,b24; ai=0; bi=0; a1i=0; b1i=0; a2i=0; b2i=0; pij=0; ai+=qij; bi+=qji; a1i=(float)qii/ai; a2i=1-a1i; b1i=(float)qii/bi; b2i=1-b1i; pi0=a1i*100; /生产者精度 pi1=a2i*100; /漏分误差 pi2=b1i*100; /用户精度 pi3=b2i*100; /错分误差 void output1(char *filename) ofstream outfile(filename,ios: Lakes Built-up Land Forest Land Cropland switch(i) case 0: outfileLakes break; case 1: case 2: case 3:break

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2