/* -------------------------------
1999年05月29日 11時24分20秒
対応表を3種類出力する
ay1.cls: Average最大
ay2.cls: Overall最大
ay3.cls: Kappa最大
(ay4.cls: 特例措置)
comp6.c
1999年05月25日
Type指定付加
0=Average, 1=Overall, 2=Kappa
Typeごとの判断基準で、最も高い分類精度の項目をクラスタ順に
調査して割り当てる
植生項目自動割当て
Overall分類精度評価による最大値の対応表を使用
---------------------------------
植生図と分類結果の画素ごとの対応を調査
草地の割り当てを2位順で行った場合DN値判定をしない
変数名の整理した
1999年04月20日
1999年04月27日 10時44分02秒
広田湾付近の調査で、針葉樹と広葉樹の入れ替えでKHATが向上した
念のため、僅少差であった項目のメッセージを出力する
1位と2位の優先順位で
どちらも3割以上の場合、とりあえず1位を選ぶが、その事実があったことを表示
---------------------------------- */
#define Max_array=10000000 /* 植生図データ読み込み配列サイズ限界 */
#define Max_cluster=100 /* 教師無し分類のクラスタ最大数 */
#define Max_vegetation=100 /* 植生図項目の最大数 */
#define Max_band=6 /* 使用する衛星画像の最大バンド数 */
#include
#include
main(argv,argc)
int argv;
char *argc[];
{
static int ic,ii,total_data,dmax;
static int ix,iy,pnum,i,m,mm,n,j,k;
static int vegetation_max,cluster_max,flag;
static int pixel,line,veg_freq[10];
static float f_x,f_y,f_z;
/* 分類精度評価値 a_x;average o_x;overall k_x;kappa */
static float a_x,o_x,k_x;
/* コードブックの微分係数 1次、2次 */
static int deriv[Max_cluster][Max_band];
static int deriv1[Max_cluster][Max_band];
static int deriv2[Max_cluster][Max_band];
/* コードブックの文字読みとり用 */
static char f1[128]="",f2[32]="",f3[32]="";
/* coinは一致数行列、priortyは優先順位割当表 rsは、画素数および割当番号 */
static int coin[Max_cluster][Max_vegetation];
static int priorty[Max_cluster][Max_vegetation];
static int priortys[Max_cluster][Max_vegetation]; /* save用 */
/* 割当て結果の分類精度を格納 */
static float max_a,max_o,max_k;
static float ma,mo,mk;
/* cls_aはAverage割当表、oはOvaerall,kはKappa格納用 */
static int next_p_num;
/* 0=Average, 1=Ovaerall, 2=Kappa */
static int type; /* 0=Average, 1=Ovaerall, 2=Kappa */
static int cls_a[Max_cluster],cls_o[Max_cluster],cls_k[Max_cluster];
/* clsは割当表、assign1は対角要素格納用、assgin2は行方向要素格納用 */
static int assign1[Max_cluster];
static int assign2[Max_cluster];
static int rs[Max_cluster][2];
/* 植生項目ごとの総画素数 */
static int vg[Max_cluster];
/* 植生データ、分類クラスタデータを一時格納する配列 */
static int vegetation[Max_array];
static int cluster[Max_array];
static char fn[1024]="";
FILE *fp1,*fp2,*fp3,*fp4;
/* argument parameter read */
if (argv!=6){
printf("--- Automatic Category Assignment Ver.7 ------\n");
printf("Usage : comp7 PIXEL LINE veg_image class_image flag\n");
printf("type=0 Average Type=1 Overall Type=2 Kappa \n");
printf("flag=0 ; Output to 1 column flag=1 ; table output\n");
exit(1);
}
if (( fp1=fopen(argc[3],"r") )==NULL) {
printf("Can't open Vegetation Inage\n");
exit(1);
}
if (( fp2=fopen(argc[4],"r") )==NULL) {
printf("Can't open Classification Image\n");
exit(1);
}
sscanf(argc[1],"%d",&pixel);
sscanf(argc[2],"%d",&line);
sscanf(argc[5],"%d",&flag);
total_data = pixel*line;
/* Get Image */
vegetation_max=0; /* vegetation_max 植生図における最大数 */
cluster_max=0; /* cluster_max 分類結果における最大数 */
for (i=0; ivegetation_max)? m:vegetation_max;
m=getc(fp2);
cluster[i]=m;
cluster_max=(m>cluster_max)? m:cluster_max;
}
/* 全座標での対応値を調査 */
for (i=0; i