/*그냥 원본 옆에다 간단히 적어봅니다.*/
/* 간단하죠? */
아기오뎅 님이 쓰신 글 :
: #include <stdio.h>
: #include <stdlib.h>
: #include <mymemory.h>
:
: typedef unsigned char BYTE; /* BYTE 라는 자료형을 unsigned char 선언*/
:
: void TOUEI1(origin_image, horizon, vertical, size_x, size_y); /* 전역 함수 */
:
: void main(argc, argv)
: int argc;
: char *argv[];
: {
: char origin_image_file_name[80];
: char projection_x_file_name[80];
: char projection_y_file_name[80];
: int i,j;
: int IMAGE_SIZE_ROW, IMAGE_SIZE_COL;
: BYTE **origin_image;
: BYTE *buff;
: unsigned int *horizon;
: unsigned int *vertical;
:
: FILE *I_file, *projection_x, *projection_y;
: FILE *xfile, *yfile;
:
: /*
: prompt user to input arguments. 입력 파일이름과 이미지 사이즈를 입력받습니다.
: */
:
: printf("origin_image_file_name : ");
: scanf("%s", origin_image_file_name);
: printf("No. of image column : ");
: scanf("%d",&IMAGE_SIZE_COL);
: printf("No. of image line : ");
: scanf("%d",&IMAGE_SIZE_ROW);
:
: printf("projection_x_file_name : ");
: scanf("%s", projection_x_file_name); /* 새로 만들어질 프로젝션 파일의 저장 이름을 받습니다 */
: printf("projection_y_file_name : ");
: scanf("%s", projection_y_file_name);
:
: /*
: read image file from disk to memory
: */
:
: if((I_file=fopen(origin_image_file_name, "rb")) == NULL) /* 입력이미지파일 바이너리읽기모드로 오픈 실패하면 메시지 보여주고 종료합니다. */
: {
: printf("file open error!");
: exit(-1);
: }
:
: if((projection_x=fopen(projection_x_file_name, "wb")) == NULL) /* x프로젝션 파일 바이너리 쓰기 모드 오픈 실패하면 메시지 보여주고 종료합니다. */
: {
: printf("file open error!");
: exit(-1);
: }
:
: if((projection_y=fopen(projection_y_file_name, "wb")) == NULL) /* y프로젝션 파일 바이너리 쓰기 모드 오픈 실패하면 메시지 보여주고 종료합니다. */
: {
: printf("file open error!");
: exit(-1);
: }
:
: xfile = fopen("x.dat", "wt"); /* x.dat, y.dat 파일을 텍스트 쓰기 모드로 오픈합니다.
: yfile = fopen("y.dat", "wt");
:
: /*
: MEMORY ALLOCATION
: */
: /* 이미지를 읽어들일 메모리 버퍼를 할당합니다. */
: origin_image = bmatrix(IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
: buff = bvector(IMAGE_SIZE_COL);
: horizon = uivector(IMAGE_SIZE_ROW);
: vertical = uivector(IMAGE_SIZE_COL);
:
: /*
: IMAGE READING
: */
: /* 이미지를 파일에서 읽어 들입니다. */
: for(i=0;i<IMAGE_SIZE_ROW;i++)
: {
: fread(buff, sizeof(BYTE), IMAGE_SIZE_COL, I_file);
: for(j=0;j<IMAGE_SIZE_COL;j++)
: origin_image[i][j] = buff[j];
: }
:
: fclose(I_file);
:
: /*
: calculate projection
: */
:
: TOUEI1(origin_image, horizon, vertical, IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
:
: /*
: saving text file
: */
: /* 만들어진 x, y 프로젝션을 텍스트 파일로 각각 저장합니다. */
: for(i=0;i<IMAGE_SIZE_ROW;i++)
: {
: fprintf(xfile, "%d\n", horizon[i]);
: }
:
: for(i=0;i<IMAGE_SIZE_COL;i++)
: {
: fprintf(yfile, "%d\n", vertical[i]);
: }
:
: /*
: saving projection file
: */
: /* 만들어진 x, y 프로젝션을 바이너리 파일로 각각 저장합니다. */
: fwrite(horizon, sizeof(unsigned int), IMAGE_SIZE_ROW, projection_x);
: fwrite(vertical, sizeof(unsigned int), IMAGE_SIZE_COL, projection_y);
:
/* 사용한 메모리를 해제 합니다. */
: free_bmatrix(origin_image,IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
: free_bvector(buff);
: free_uivector(horizon);
: free_uivector(vertical);
:
: fclose(projection_x);
: fclose(projection_y);
: }
:
: void TOUEI1(origin_image, horizon, vertical, size_x, size_y)
: /*
: purpose: x,y direction projection x, y 방향의 프로젝션 인자
: arguments:
: h : horizon projection
: v : vertical projection
: */
: BYTE **origin_image;
: unsigned int *horizon;
: unsigned int *vertical;
: int size_x, size_y;
: {
: int i, j;
:
: /*
: calculate horizon projection
: */
: /* 수평 방향 (x)의 프로젝션을 계산합니다. */
: for(i=0;i<size_x;i++)
: {
: horizon[i]=0;
: for(j=0;j<size_y;j++) /* 각각의 y 좌표 마다 이미지의 x축 방향의 픽셀값을 더합니다. */
: {
: horizon[i] += origin_image[i][j];
: } /* 이미지를 옆(x)에서 쳐다 봤을 때 프로젝션(투영)되는 밝기값(픽셀값)의 합 입니다. */
: }
:
: /*
: calculate vertical projection
: */
: /* 수직 방향 (y)의 프로젝션을 계산합니다. */
: for(j=0;j<size_y;j++)
: {
: vertical[j]=0;
: for(i=0;i<size_x;i++) /* 각각의 x 좌표 마다 이미지의 y축 방향의 픽셀값을 더합니다. */
: {
: vertical[j] += origin_image[i][j];
: } /* 이미지를 위(y)에서 쳐다 봤을 때 프로젝션(투영)되는 밝기값(픽셀값)의 합 입니다. */
: }
: }
:
: 간단한 주석좀 부탁드립니다. 이미지 프로세싱하는 프로그램이라는건 알겠는데 두개의 이미지를 하나로 합치는 것 맞나요? 아...헤더파일인 mymemory.h 가 없어서 골치 아프니다..
: 아니면 이게 대충 모하는 프로그램이다 라는 것만 알려주세요 ㅠ
|