// kappa3.cpp : Defines the entry point for the console application.
//
///#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n(2),a(0),b(0),c(0),d(0),m(0);
////////确定识别地物的个数确定识别地物的个数确定识别地物的个数确定识别地物的个数
cout<<"请输入你识别的地物种类的个数:"<<endl;
cin>>n;
while(n<=0&&n<11)
{
cout<<"你输入的类别不对或者超过了类的限制,请重新输入你识别的地物种类的个数:"<<endl;
cin>>n;
}
int ele[11][11];
//b=n*n;
///////输入像元数据输入像元数据输入像元数据输入像元数据输入像元数据输入像元数据输入像元数据
cout<<"请选择输入混淆矩阵像元方式"<<endl;
cout<<"1:按行输入"<<endl;
cout<<"2:按列输入"<<endl;
cout<<"0:结束程序"<<endl;
cin>>b;
if(b==0) exit(0); //退出该程序
else if(b==1)
{
for(m=0;m<n;m++)
{
for(d=0;d<n;d++)
{
cout<<"输入的是"<<"第"<<m+1<<"行"<<"第"<<d+1<<"列"<<"淆矩阵像元"<<endl;
cin>>c;
ele[m][d]=c;
}
}
/////对第n行赋零值
for(m=0;m<n;m++)
{
ele[m][n]=0;
}
for(m=0;m<n;m++)
{
ele[n][m]=0;
}
ele[n][n]=0;
cout<<"\n\n\n您输入的数据矩阵为:\n";
cout<<"Class";
for(m=0;m<n;m++)
cout<<setw(12)<<"Region #"<<m+1;
cout<<endl;
for(m=0;m<n;m++)
{
cout<<endl;
cout<<"Class"<<m+1;
for(b=0;b<n;b++)
{
cout<<setw(12)<<ele[m][b];
}
cout<<endl;
}
}
else
{
for(m=0;m<n;m++)
{
for(d=0;d<n;d++)
{
cout<<"输入的是"<<"第"<<m+1<<"列"<<"第"<<d+1<<"行"<<"淆矩阵像元"<<endl;
cin>>a;
ele[d][m]=a;
}
}
/////对第n行赋零值
for(m=0;m<n;m++)
{
ele[m][n]=0;
}
for(m=0;m<n;m++)
{
ele[n][m]=0;
}
ele[n][n]=0;
cout<<"\n\n\n您输入的数据矩阵为:\n";
cout<<"Class";
for(m=0;m<n;m++)
cout<<setw(12)<<"Region #"<<m+1;
cout<<endl;
for(m=0;m<n;m++)
{
cout<<endl;
cout<<"Class"<<m+1;
for(b=0;b<n;b++)
{
cout<<setw(12)<<ele[m][b];
}
}
cout<<endl;
}
/////计算所需要的数值:
/////计算像元总的和值
int total(0);
for(m=0;m<n;m++)
{
for(b=0;b<n;b++)
total+=ele[m][b];
}
/////计算每行的和值
for(m=0;m<n;m++)
{
for(b=0;b<n;b++)
ele[m][n]+=ele[m][b];
}
/////计算每列的和值
for(m=0;m<n;m++)
{
for(b=0;b<n;b++)
ele[n][m]+=ele[b][m];
}
////计算解读正确的像元个数
for(m=0;m<n;m++)
{
ele[n][n]+=ele[m][m];
}
////计算的总体精度是:
float oa=(float(ele[n][n])/float(total))*100.0;
cout<<"计算得总体精度:"<<oa<<"%"<<endl;
for(m=0;m<n;m++)
{
cout<<"第"<<m+1<<"类"<<"生产者精度为"<<float(ele[m][m])/float(ele[m][n])<<endl;
}
for(m=0;m<n;m++)
{
cout<<"第"<<m+1<<"类"<<"使用者精度为"<<float(ele[m][m])/float(ele[n][m])<<endl;
}
////计算的kappa系数是:
int ling(0);
for(m=0;m<n;m++)
{
ling+=ele[m][n]*ele[n][m];
}
cout<<"Kappa系数为:"<<float(total*ele[n][n]-ling)/float(total*total-ling)<<endl;
return 0;
}