본문내용
ode=new_code;
}
printf("\n");
}
/*
** 이것은 string table로부터 간단하게 decode하는 루틴이다.
** 버퍼는 expansion 프로그램과 역으로 출력가능하다.
*/
char *decode_string(unsigned char *buffer,unsigned int code)
{
int i;
i=0;
while (code > 255)
{
*buffer++ = append_character[code];
code=prefix_code[code];
if (i++>=4094)
{
printf("Fatal error during code expansion.\n");
exit();
}
}
*buffer=code;
return(buffer);
}
/*
** 다음의 두 routines는 variable length code의 출력에 쓰인다.
*/
input_code(FILE *input)
{
unsigned int return_value;
static int input_bit_count=0;
static unsigned long input_bit_buffer=0L;
while (input_bit_count <= 24)
{
input_bit_buffer |=
(unsigned long) getc(input) << (24-input_bit_count);
input_bit_count += 8;
}
return_value=input_bit_buffer >> (32-BITS);
input_bit_buffer <<= BITS;
input_bit_count -= BITS;
return(return_value);
}
output_code(FILE *output,unsigned int code)
{
static int output_bit_count=0;
static unsigned long output_bit_buffer=0L;
output_bit_buffer |= (unsigned long) code << (32-BITS-output_bit_count);
output_bit_count += BITS;
while (output_bit_count >= 8)
{
putc(output_bit_buffer >> 24,output);
output_bit_buffer <<= 8;
output_bit_count -= 8;
}
}
프로그램에 test.bmp 파일을 넣어 test.lzw와 test.out화일이 출력되었습니다. 여기서 test.lzw는 원본 파일을 압축한 것이고 test.out화일은 압축한 파일을 토대로 다시 복원한 파일입니다.
여기서 보면 압축한 파일은 1048kb였고 다시 복원된 파일은 원본 파일과 크기에서 같았습니다. 약 45.5%의 압축률을 보였습니다. test.out인 복원화일은 이미지를 열어본 결과 원본 파일과 정확히 같은 모습을 보였습니다.
test.bmp(원본입력화일)
test.out(압축후 복원화일)
다른 압축 표준인 jpeg 파일을 압축하여 보았는데 압축된 파일이 원본 파일보다 오히려 용량이 늘었습니다. Jpeg의 압축 기술이 훨씬 효율 적이란 것을 대략적으로 알게 되었습니다.
프로그램을 코딩하면서 압축에 관한 기술을 살펴보게 되었는데요, 프로그래밍 자체도 어려웠지만 압축 알고리즘을 이해하는데도 어려움을 겪었습니다. 어찌 되었건 어떤 데이터를 압축한다는 것은 상당히 어려운 기술임을 알게 되었는데요, 압축의 효율은 몇가지 요인에 달려있음을 알게 되었습니다. LZW compression은 data stream 들이 반복되는 string을 가지고 있으면 효율적으로 압축을 할 수 있었습니다. 이런 이유로 text를 압축할 때 LZW는 상당한 위력을 발휘하고 압축률은 50%까지 되고 또는 그 이상을 기대할 수 있습니다.
이진 data를 압축하려하면 조금 어려운데 압축은 좋은 결과를 나타낼 수도 있고 그렇지 않을 수도 있습니다. 어떤 경우 data 파일은 text화일보다 더 잘 압축이 되는 반면 그렇지 않은 경우도 있는데 이것은 data화일에 따라 다름을 알게 되었습니다.
이상으로 LZW를 이용한 압축프로그램을 만들고 고찰해 보는데요, 기회가 된다면 JPEG, MP3, MPEG등 좀 더 복잡한 그리고 현재 상용되고 있는 압축 표준에 대해 배워 보았으면 합니다. 과제를 하면서 압축이라는 새로운 영역을 알게 되었는데요, 매번 과제 할 때마다 하나씩 알아가는 재미에 프로그램 실력도 늘고 새로운 분야도 알게 되어 정보이론 시간이 즐겁습니다.
}
printf("\n");
}
/*
** 이것은 string table로부터 간단하게 decode하는 루틴이다.
** 버퍼는 expansion 프로그램과 역으로 출력가능하다.
*/
char *decode_string(unsigned char *buffer,unsigned int code)
{
int i;
i=0;
while (code > 255)
{
*buffer++ = append_character[code];
code=prefix_code[code];
if (i++>=4094)
{
printf("Fatal error during code expansion.\n");
exit();
}
}
*buffer=code;
return(buffer);
}
/*
** 다음의 두 routines는 variable length code의 출력에 쓰인다.
*/
input_code(FILE *input)
{
unsigned int return_value;
static int input_bit_count=0;
static unsigned long input_bit_buffer=0L;
while (input_bit_count <= 24)
{
input_bit_buffer |=
(unsigned long) getc(input) << (24-input_bit_count);
input_bit_count += 8;
}
return_value=input_bit_buffer >> (32-BITS);
input_bit_buffer <<= BITS;
input_bit_count -= BITS;
return(return_value);
}
output_code(FILE *output,unsigned int code)
{
static int output_bit_count=0;
static unsigned long output_bit_buffer=0L;
output_bit_buffer |= (unsigned long) code << (32-BITS-output_bit_count);
output_bit_count += BITS;
while (output_bit_count >= 8)
{
putc(output_bit_buffer >> 24,output);
output_bit_buffer <<= 8;
output_bit_count -= 8;
}
}
프로그램에 test.bmp 파일을 넣어 test.lzw와 test.out화일이 출력되었습니다. 여기서 test.lzw는 원본 파일을 압축한 것이고 test.out화일은 압축한 파일을 토대로 다시 복원한 파일입니다.
여기서 보면 압축한 파일은 1048kb였고 다시 복원된 파일은 원본 파일과 크기에서 같았습니다. 약 45.5%의 압축률을 보였습니다. test.out인 복원화일은 이미지를 열어본 결과 원본 파일과 정확히 같은 모습을 보였습니다.
test.bmp(원본입력화일)
test.out(압축후 복원화일)
다른 압축 표준인 jpeg 파일을 압축하여 보았는데 압축된 파일이 원본 파일보다 오히려 용량이 늘었습니다. Jpeg의 압축 기술이 훨씬 효율 적이란 것을 대략적으로 알게 되었습니다.
프로그램을 코딩하면서 압축에 관한 기술을 살펴보게 되었는데요, 프로그래밍 자체도 어려웠지만 압축 알고리즘을 이해하는데도 어려움을 겪었습니다. 어찌 되었건 어떤 데이터를 압축한다는 것은 상당히 어려운 기술임을 알게 되었는데요, 압축의 효율은 몇가지 요인에 달려있음을 알게 되었습니다. LZW compression은 data stream 들이 반복되는 string을 가지고 있으면 효율적으로 압축을 할 수 있었습니다. 이런 이유로 text를 압축할 때 LZW는 상당한 위력을 발휘하고 압축률은 50%까지 되고 또는 그 이상을 기대할 수 있습니다.
이진 data를 압축하려하면 조금 어려운데 압축은 좋은 결과를 나타낼 수도 있고 그렇지 않을 수도 있습니다. 어떤 경우 data 파일은 text화일보다 더 잘 압축이 되는 반면 그렇지 않은 경우도 있는데 이것은 data화일에 따라 다름을 알게 되었습니다.
이상으로 LZW를 이용한 압축프로그램을 만들고 고찰해 보는데요, 기회가 된다면 JPEG, MP3, MPEG등 좀 더 복잡한 그리고 현재 상용되고 있는 압축 표준에 대해 배워 보았으면 합니다. 과제를 하면서 압축이라는 새로운 영역을 알게 되었는데요, 매번 과제 할 때마다 하나씩 알아가는 재미에 프로그램 실력도 늘고 새로운 분야도 알게 되어 정보이론 시간이 즐겁습니다.
추천자료
- 스카이라이프(위성방송)의 국제유통 확산 방안
- 김원일의 노을 읽고
- 국제 소프트웨어 저작권 침해
- CPU, 캐시메모리, RAM이 컴퓨터의 연산속도에 미치는 영향
- 디지털 기술 발전에 의한 문화컨텐츠 제작구조의 변화
- Internet Protocol TeleVision(IPTV) 분석
- [디지털신호처리] 음성 신호의 잡음 제거
- 무비메이커(Windows Movie Maker)를 이용한 동영상 편집과 제작 방법
- 공교육(학교교육)의 의미, 공교육(학교교육)의 운영, 공교육(학교교육)의 현황, 공교육(학교...
- utm을 이용한 고분자 물성측정
- 경력개발의 개념과 목적, 설계, 원칙
- 디지털의 장점과 단점
- [모성권리(모성권), 모성권리(모성권) 정책범위, 모성권리 실태, 모성휴가제도]모성권리(모성...
- [방송인력수급, 방송인력수급 중요성, 방송인력수급 현황, 방송인력수급 쟁점, 방송인력수급 ...
소개글