资源简介
用于对遥感图像进行监督分类,贝叶斯分类器, 用于对遥感图像进行监督分类, 用于对遥感图像进行监督分类, 用于对遥感图像进行监督分类, 用于对遥感图像进行监督分类
代码片段和文件信息
#include
#include
#include
#include
#include
const float PI=3.1415;
float train1[60][3]train2[60][3]train3[60][3]train4[60][3]; //存各类训练样本
float m1[3]m2[3]m3[3]m4[3]c1[3][3]c2[3][3]c3[3][3]c4[3][3]; //各类均值向量及协方差矩阵
float p=0.25; //先验概率
float test[240][11]; //检验样本 各列分别存放:分类前类别,行号,列号,一波段灰度,二波段灰度,三波段灰度,分类后类别
float a1a2a3a4; //公式中常数项;
float qqqq1qq2qq3qq4; //分类精度
float k; //kappa值
int q[4][4]; //混淆矩阵
float a[4][4]; //精度指标矩阵 各列分别为生产者精度 漏分误差
//用户精度 错分误差
int main()
{
void getdata1(char *filename);
void getdata2(char *filename);
void compute(float train[60][3]float m[3]float c[3][3]float *a);
float identify(float m[3]float c[3][3]float afloat band1float band2float band3);
int classify(float p1float p2float p3float p4);
void testing();
void accuracy(float p[4][4]);
void output(char *filename);
void output1(char *filename);
getdata1(“05training.txt“); //存放的是训练样本三个波段的灰度值
getdata2(“05testing.txt“); //检验样本行号 列号 类别代码 三个波段的灰度值
compute(train1m1c1&a1); //计算各类均值向量及协方差矩阵
compute(train2m2c2&a2);
compute(train3m3c3&a3);
compute(train4m4c4&a4);
testing(); //对检验样本分类
accuracy(a);
output(“05test-result.txt“);
output1(“05confusion-matrix.txt“);
return 0;
}
void getdata1(char *filename)
{
ifstream infile(filenameios::in|ios::nocreate); //把每类样本的灰度值依次存入对应的数组
if(infile==0)
{ cout<<“open infile error!“< exit(1);
}
int ij;
for(i=0;i<60;i++)
for(j=0;j<3;j++)
infile>>train1[i][j];
for(i=0;i<60;i++)
for(j=0;j<3;j++)
infile>>train2[i][j];
for(i=0;i<60;i++)
for(j=0;j<3;j++)
infile>>train3[i][j];
for(i=0;i<60;i++)
for(j=0;j<3;j++)
infile>>train4[i][j];
infile.close();
}
void getdata2(char *filename)
{
ifstream infile(filenameios::in|ios::nocreate);
if(infile==0)
{
cout<<“open infile error!“< exit(1);
}
int ij;
for(i=0;i<240;i++) //检验样本的数量为240
for(j=0;j<6;j++) //行、列号、类别代码、三个波段灰度值
infile>>test[i][j];
infile.close();
}
void compute(float train[60][3]float m[3]float c[3][3]float *a)
{
void gauss(int ffloat n[3][3]); //求n 矩阵的逆阵声明
int ij;
for(i=0;i<3;i++) m[i]=0;
for(i=0;i<3;i++)
{
for(j=0;j<60;j++)
m[i]+=train[j][i];
m[i]=m[i]/60;
}
float Train[3][60]; //转置矩阵
for(i=0;i<3;i++)
for(j=0;j<60;j++)
Train[i][j]=train[j][i];
int k;
for(i=0;i<3;i++) //求协方差
for(j=0;j<3;j++)
{ c[i][j]=0;
for(k=0;k<60;k++)
c[i][j]+=((Train[i][k]-m[i])*(train[k][j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 762 2008-08-02 11:38 贝叶斯分类\05confusion-matrix.txt
文件 14899 2008-08-02 11:38 贝叶斯分类\05test-result.txt
文件 6254 2007-04-30 21:22 贝叶斯分类\05testing.txt
文件 3839 2007-04-29 17:11 贝叶斯分类\05training.txt
文件 10323 2007-04-30 15:19 贝叶斯分类\classify.cpp
文件 3425 2007-04-18 09:10 贝叶斯分类\classify.dsp
文件 25600 2007-04-18 09:12 贝叶斯分类\classify.ncb
文件 0 2007-04-18 09:11 贝叶斯分类\classify.plg
文件 4264 2007-04-15 22:32 贝叶斯分类\test.dsp
文件 514 2007-04-15 22:12 贝叶斯分类\test.dsw
文件 66560 2008-08-02 11:39 贝叶斯分类\test.ncb
文件 53760 2008-08-02 11:39 贝叶斯分类\test.opt
文件 881 2008-08-02 11:38 贝叶斯分类\test.plg
目录 0 2008-08-02 11:39 贝叶斯分类\Debug
目录 0 2008-08-02 11:39 贝叶斯分类
----------- --------- ---------- ----- ----
191081 15
评论
共有 条评论