/* PGM_digit.c */ /* IPTP_CDROM1b数字画像のPGM画像ファイルP5(Binary)への変換 */ /* 各数字ごとに通し番号を付与 */ #include #include #include #define MAX_FILENAME 80 #define LEARN_MAX 17985 #define TEST_MAX 17916 #define COLS 80 #define ROWS 120 #define RANGE 255 int main() { FILE *fp1, *fp2; unsigned char buf[256]; unsigned char val; int select; int max_data; char filename[MAX_FILENAME]; long int serial, offset; int i, j, k; int numb[10]; int dg; unsigned char bitpat; for (i = 0; i < 10; i++) numb[i] = 0; select = 0; /* select either learn.pat or test.pat */ if (select == 1) { max_data = LEARN_MAX; fp1 = fopen("learn.pat", "rb"); } else { max_data = TEST_MAX; fp1 = fopen("test.pat", "rb"); } for (serial = 1; serial <= max_data; serial++) { offset = 1280 * (serial-1); if (fseek(fp1, offset, SEEK_SET) != 0) { puts("seek error !!"); fclose(fp1); return -1; } fread(buf, sizeof(unsigned char), 80, fp1); dg = buf[3]; /* correct category */ numb[dg]++; if (select == 1) { sprintf(filename, "./cdrom1b/ldg%d_%04d.pgm", dg, numb[dg]); } else { sprintf(filename, "./cdrom1b/tdg%d_%04d.pgm", dg, numb[dg]); } fp2 = fopen(filename, "wb"); fprintf(fp2, "P5\n"); fprintf(fp2, "# Writing tool = %d\tCorrect cat. = %d\n", buf[1], buf[3]); fprintf(fp2, "%d %d\n%d\n", COLS, ROWS, RANGE); for (j = 0; j < ROWS; j++) { for (i = 0; i < COLS/8; i++) { fread(&bitpat, sizeof(unsigned char), 1, fp1); for (k = 7; k >= 0; k--) { val = bitpat & 1<