/* ------------------------------- 1999年05月30日 13時35分10秒 最大値の途中経過を表示 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