소개글
lena 영상을 이용한 JPEG
DCT한 후 벡터 quantize를 해서 jpeg코드를 압축 후 다시 복원까지하는 프로그램입니다.
허프만코드 및 코딩이론을 해 가변코드 변환과정은 하지 않았습니다.
(위의 그림은 DCT결과)
<결과 파일>
DCT이미지
벡터양자화이미지
JPEG으로 압축된 영상을 복원한 이미지
컴파일 실행환경
visual studo C++ 6.0
본문내용
#include<stdio.h>
#include<math.h>
#define H 256
#define W 256
#define SIZE 8
#define PI 3.1415
#define TRUE 0
int main()
{
unsigned char m_OpenImg[H][W];
double m_TempImg[H][W];
unsigned char m_ResultImg[H][W];
int x, y;
int u, v;
int i, j;
double sum;
FILE *Infp, *Outfp;
int Q[SIZE][SIZE]={{ 16, 11, 10, 16, 24, 40, 51, 61},
{ 12, 12, 14, 19, 26, 58, 60, 55},
{ 14, 13, 16, 24, 40, 57, 69, 56},
{ 14, 17, 22, 29, 51, 87, 80, 62},
{ 18, 22, 37, 56, 68,109,103, 77},
{ 24, 35, 55, 64, 81,104,113, 92},
{ 49, 64, 78, 87,103,121,120,101},
{ 72, 92, 95, 98,112,100,103, 99}};
double DCT[SIZE][SIZE]={{ 0.1249, 0.1767, 0.1767, 0.1767, 0.1767, 0.1767, 0.1767, 0.1767},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
{ 0.1767, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25}};
Infp= fopen("lena.raw","rb");
if(Infp==NULL)
{
printf("File open error!!");
return TRUE;
}
fread(m_OpenImg, sizeof(char), H*W, Infp);
fclose(Infp);
//printf("step1\n");
//initailize result image
for(i=0; i<H; i++)
{
for(j=0; j<W; j++)
{
m_TempImg[i][j]=0;
m_ResultImg[i][j]=0;
}
}
//printf("step2\n");
압축파일 내 파일목록
jpg.dsw
jpg.ncb
jpg.plg
jpg.opt
jpg.dsp
jpeg.ncb
jpeg.plg
jpeg.dsp
lena.raw
lena_dct.raw
lena_quan.raw
lena_decode.raw
jpeg.c
jpeg.opt
jpeg.dsw
Debug/vc60.idb
Debug/vc60.pdb
Debug/jpg.pch
Debug/jpeg.obj
Debug/jpg.ilk
Debug/jpg.exe
Debug/jpg.pdb
Debug/jpeg.exe
Debug/jpeg.pdb
Debug/jpeg.ilk
Debug/jpeg.pch
참고 자료
없음