본문내용
(quant_dct,shift,dct_img, inv_dct, row);
free(zigzag);
free(input);
free(output);
}
void free_mem(int **quant_dct, int **shift, double **dct_img, double **inv_dct, int row)
{
int j;
for(j=0; j
{
free(*(quant_dct+j));
free(*(shift+j));
free(*(dct_img+j));
free(*(inv_dct+j));
}
free(quant_dct);
free(shift);
free(dct_img);
free(inv_dct);
}
2.출력 화면
※ 첫 번째 이미지의 8*8 블록과 두 번째 이미지의 16*16 블록
⇒ 첫 번째 그림의 좌표(130, 72)에서 가로세로 8픽셀과 두 번째 그림의 좌표(128, 70)에서 가 로세로 16픽셀의 크기값을 출력한 것이다. 대부분 200이 넘는 밝은 부분임을 알 수 있다.
※ 두 블록의 크기값의 차이
⇒ 두 번째 블록에서 첫 번째 블록을 한 픽셀씩 옮겨가면서 빼준 값들을 제곱해서 8*8=64로 나 눠준 분산(Variance)값을 출력했다. 또한 분산들을 저장한 2차원 배열에서 정렬(Sorting)을 하여 제일 작은 분산값을 맨 뒤쪽 배열에 저장한 후 그 값을 출력하였으며, 또한 그 값을 분 산들 저장한 2차원 배열과 비교하여 같은 값을 가지는 좌표를 출력하게 하였다. 위의 결과를 보면 두 번째 그림의 좌표(130, 72)에서 가로세로 8픽셀이 처음 그림의 8*8블럭과 가장 비슷 한 블록임을 알 수 있다. 그리고 알아낸 좌표를 이용하여 DCT와 양자화, 역양자화, IDCT, 지 그재그 스캔을 하게 될 8*8 데이터 값들을 출력하게 하였다.
※ 현재 영상의 값과 DCT, 양자화 출력
⇒ 앞서 얻은 8*8이 다음 소스의 입력으로 들어가게 되었다. 제일 비슷한 블록의 값들이 출력 되었으며, 이는 앞서 출력한 결과와 같음을 볼 수 있다. 또한 DCT된 영상값을 보면 저주파 즉 왼쪽 위의 모서리부분의 값이 제일 큰 정보가 집중되어있음을 볼 수 있다. 이를 이용하여 저주파 필터로서 JPEG압축알고리즘의 원리가 됨을 볼 수 있다. DCT된 값들을 양자화하게 되 면 크기값의 디지털화가 되어 소수값들은 사라지고 정수가 출력됨을 볼 수 있다.
※ Zigzag Scanning
⇒ 위는 Zigzag Scanning을 한 결과를 출력한 것이다. Quantization결과 0과 50의 정보만을 가 지고 있기 때문에 0과 50을 출력하게 되었고, 이를 순서대로 나열한 결과 밑의 출력과 같게 되었다. 숫자가 두 개밖에 없기 때문에 지그재그를 확인하기 어렵지만, 다른값들이 주어졌을 때 지그재그를 쉽게 확인 할 수 있다. 이는 DCT결과 왼쪽위에 정보가 집중되기 때문에 정보 를 전송할 경우 정보가 많은 부분들을 먼저 전송하기 위하여 지그재그 스캔을 사용하게 된 것이다.
※ 역양자화, IDCT, PSNR 출력
⇒ 위는 양자화 된 값을 역양자화 후 IDCT하고 영상을 복원한 값을 출력 한 것이다. 결과를 보 면 입력 영상과 비슷하게 복원은 되었지만 양자화 과정에서 생기는 Error 또한 볼 수 있었 다. 주파수에 대한 샘플링의 경우 샘플링 주파수를 원주파수의 2배 이상으로 해주면 원래의 신호를 복원할 수 있다고 하였지만, 양자화의 경우 소수점을 모두 버리고 가까운 정수값으로 매칭을 시켜주기 때문에 양자화 에러는 항상 존재함을 볼 수 있었다. 또한 입력 영상과 복원 된 영상의 차이를 알기 위해 PSNR을 구하고 출력하게 되었으며, 위에 출력된 값은 일반적인 수치이며, 이것을 20*log를 취할 경우 데시벨[dB]로 표현 할 수 있다.
3. 출력 영상
※ 주어진 원 이미지와 파일 출력된 이미지, 8*8 블록의 입력과 출력 이미지
foreman176_144_0.raw (원 이미지)
Out_img0.raw (파일출력된이미지)
foreman176_144_1.raw (원 이미지)
Out_img1.raw (파일출력된이미지)
img.raw (8*8 입력 이미지) 16배 확대
out_img.raw (8*8 출력 이미지) 16배 확대
4. 프로젝트를 끝내며...
→ 이번의 마지막 프로젝트를 끝으로 졸업연구가 끝나게 되었다. 우선 이번 프로젝트의 전반적인 내용은 주어진 두 개의 그림을 이용해 파일입출력으로 그림에 대한 데이터를 저장하고, 첫 번째 그림의 한 특정부분 8*8블럭을 이용하여 두 번째그림의 16*16블럭에 매칭하여 제일 비슷한 블록 좌표를 찾아내는 것이였다. 또한 찾아낸 블록을 이용하여 DCT, 양자화, 역양자화, IDCT의 순차적 인 과정을 통해 영상을 복원하는 것이 였는데, 이때의 입력영상과 출력영상의 차이를 PSNR의 수 치로 비교해 볼 수 있었다. 프로젝트 과정중에 제일 힘들었던 부분은 첫 번째의 그림에 대한 데 이터가 제대로 읽혀지지 않아 영상의 좌표가 완전히 흐트러졌던 것이였다. 처음 소스 코딩을 할 때 영상을 저장할 배열을 동적 할당하였는데, 메모리에서 충돌이 일어나서인지 176*144의 그림안 에 남자의 턱이 두 개로 나타났다. 하지만 정적할당으로 바꾸면서 원하는 그림을 얻을 수 있었 고, 첫 번째의 (130, 72)좌표 8*8블럭과 두 번째그림의 (128, 70)좌표 16*16블럭을 서로 비교할 수 있었다. 두 장의 사진을 보면 이는 움직이는 영상을 캡쳐한것 처럼 보였는데, 움직이는 영상 의 전송시에 앞선영상과 뒤의 영상의 차이만을 전송하여 압축하는 MPEG원리 처럼 이번 과제는 JPEG뿐아니라 MPEG의 기본적인 부분을 확인할 수 있는 과제였다. 과제를 하는 과정에서 두 이미 지의 크기를 비교하고 제일 비슷한 좌표를 찾는 알고리즘을 잘 몰라서 For문을 많이 이용해서 구 현하게 되었다. 그래서 프로그램이 길어지게 되었다. 또한 지그재그 스캔을 어떻게 구현 할 것인 지 많이 생각해 보았다.
과제를 끝으로 한 학기동안 열심히 강의해주신 조교님들 감사드립니다. 많이 부족한 부분도 많 았지만 눈높이에 맞는 강의로 조금이나마 부족한 부분 채우게 되어 감사드립니다.
free(zigzag);
free(input);
free(output);
}
void free_mem(int **quant_dct, int **shift, double **dct_img, double **inv_dct, int row)
{
int j;
for(j=0; j
free(*(quant_dct+j));
free(*(shift+j));
free(*(dct_img+j));
free(*(inv_dct+j));
}
free(quant_dct);
free(shift);
free(dct_img);
free(inv_dct);
}
2.출력 화면
※ 첫 번째 이미지의 8*8 블록과 두 번째 이미지의 16*16 블록
⇒ 첫 번째 그림의 좌표(130, 72)에서 가로세로 8픽셀과 두 번째 그림의 좌표(128, 70)에서 가 로세로 16픽셀의 크기값을 출력한 것이다. 대부분 200이 넘는 밝은 부분임을 알 수 있다.
※ 두 블록의 크기값의 차이
⇒ 두 번째 블록에서 첫 번째 블록을 한 픽셀씩 옮겨가면서 빼준 값들을 제곱해서 8*8=64로 나 눠준 분산(Variance)값을 출력했다. 또한 분산들을 저장한 2차원 배열에서 정렬(Sorting)을 하여 제일 작은 분산값을 맨 뒤쪽 배열에 저장한 후 그 값을 출력하였으며, 또한 그 값을 분 산들 저장한 2차원 배열과 비교하여 같은 값을 가지는 좌표를 출력하게 하였다. 위의 결과를 보면 두 번째 그림의 좌표(130, 72)에서 가로세로 8픽셀이 처음 그림의 8*8블럭과 가장 비슷 한 블록임을 알 수 있다. 그리고 알아낸 좌표를 이용하여 DCT와 양자화, 역양자화, IDCT, 지 그재그 스캔을 하게 될 8*8 데이터 값들을 출력하게 하였다.
※ 현재 영상의 값과 DCT, 양자화 출력
⇒ 앞서 얻은 8*8이 다음 소스의 입력으로 들어가게 되었다. 제일 비슷한 블록의 값들이 출력 되었으며, 이는 앞서 출력한 결과와 같음을 볼 수 있다. 또한 DCT된 영상값을 보면 저주파 즉 왼쪽 위의 모서리부분의 값이 제일 큰 정보가 집중되어있음을 볼 수 있다. 이를 이용하여 저주파 필터로서 JPEG압축알고리즘의 원리가 됨을 볼 수 있다. DCT된 값들을 양자화하게 되 면 크기값의 디지털화가 되어 소수값들은 사라지고 정수가 출력됨을 볼 수 있다.
※ Zigzag Scanning
⇒ 위는 Zigzag Scanning을 한 결과를 출력한 것이다. Quantization결과 0과 50의 정보만을 가 지고 있기 때문에 0과 50을 출력하게 되었고, 이를 순서대로 나열한 결과 밑의 출력과 같게 되었다. 숫자가 두 개밖에 없기 때문에 지그재그를 확인하기 어렵지만, 다른값들이 주어졌을 때 지그재그를 쉽게 확인 할 수 있다. 이는 DCT결과 왼쪽위에 정보가 집중되기 때문에 정보 를 전송할 경우 정보가 많은 부분들을 먼저 전송하기 위하여 지그재그 스캔을 사용하게 된 것이다.
※ 역양자화, IDCT, PSNR 출력
⇒ 위는 양자화 된 값을 역양자화 후 IDCT하고 영상을 복원한 값을 출력 한 것이다. 결과를 보 면 입력 영상과 비슷하게 복원은 되었지만 양자화 과정에서 생기는 Error 또한 볼 수 있었 다. 주파수에 대한 샘플링의 경우 샘플링 주파수를 원주파수의 2배 이상으로 해주면 원래의 신호를 복원할 수 있다고 하였지만, 양자화의 경우 소수점을 모두 버리고 가까운 정수값으로 매칭을 시켜주기 때문에 양자화 에러는 항상 존재함을 볼 수 있었다. 또한 입력 영상과 복원 된 영상의 차이를 알기 위해 PSNR을 구하고 출력하게 되었으며, 위에 출력된 값은 일반적인 수치이며, 이것을 20*log를 취할 경우 데시벨[dB]로 표현 할 수 있다.
3. 출력 영상
※ 주어진 원 이미지와 파일 출력된 이미지, 8*8 블록의 입력과 출력 이미지
foreman176_144_0.raw (원 이미지)
Out_img0.raw (파일출력된이미지)
foreman176_144_1.raw (원 이미지)
Out_img1.raw (파일출력된이미지)
img.raw (8*8 입력 이미지) 16배 확대
out_img.raw (8*8 출력 이미지) 16배 확대
4. 프로젝트를 끝내며...
→ 이번의 마지막 프로젝트를 끝으로 졸업연구가 끝나게 되었다. 우선 이번 프로젝트의 전반적인 내용은 주어진 두 개의 그림을 이용해 파일입출력으로 그림에 대한 데이터를 저장하고, 첫 번째 그림의 한 특정부분 8*8블럭을 이용하여 두 번째그림의 16*16블럭에 매칭하여 제일 비슷한 블록 좌표를 찾아내는 것이였다. 또한 찾아낸 블록을 이용하여 DCT, 양자화, 역양자화, IDCT의 순차적 인 과정을 통해 영상을 복원하는 것이 였는데, 이때의 입력영상과 출력영상의 차이를 PSNR의 수 치로 비교해 볼 수 있었다. 프로젝트 과정중에 제일 힘들었던 부분은 첫 번째의 그림에 대한 데 이터가 제대로 읽혀지지 않아 영상의 좌표가 완전히 흐트러졌던 것이였다. 처음 소스 코딩을 할 때 영상을 저장할 배열을 동적 할당하였는데, 메모리에서 충돌이 일어나서인지 176*144의 그림안 에 남자의 턱이 두 개로 나타났다. 하지만 정적할당으로 바꾸면서 원하는 그림을 얻을 수 있었 고, 첫 번째의 (130, 72)좌표 8*8블럭과 두 번째그림의 (128, 70)좌표 16*16블럭을 서로 비교할 수 있었다. 두 장의 사진을 보면 이는 움직이는 영상을 캡쳐한것 처럼 보였는데, 움직이는 영상 의 전송시에 앞선영상과 뒤의 영상의 차이만을 전송하여 압축하는 MPEG원리 처럼 이번 과제는 JPEG뿐아니라 MPEG의 기본적인 부분을 확인할 수 있는 과제였다. 과제를 하는 과정에서 두 이미 지의 크기를 비교하고 제일 비슷한 좌표를 찾는 알고리즘을 잘 몰라서 For문을 많이 이용해서 구 현하게 되었다. 그래서 프로그램이 길어지게 되었다. 또한 지그재그 스캔을 어떻게 구현 할 것인 지 많이 생각해 보았다.
과제를 끝으로 한 학기동안 열심히 강의해주신 조교님들 감사드립니다. 많이 부족한 부분도 많 았지만 눈높이에 맞는 강의로 조금이나마 부족한 부분 채우게 되어 감사드립니다.
추천자료
원격탐사(Remote Sensing) 기술
The Implementation of Digital Image Filtering
MPEG-2 분석 자료
[포토샵-효과와 기능]포토샵 기능과 효과에 대한 분석(멀티미디어시스템개론)
MFC를 이용한 이미지 편집기
MATLAB(매틀랩, 매트랩)의 개념과 구성, MATLAB(매틀랩, 매트랩) 윈도우, MATLAB(매틀랩, 매...
매트랩을 이용한 이미지의 화질 개선(잡음 제거)
멀티미디어
비디오
Chapter 10. 모폴로지
개인정보 보호법 요약
매트랩을 이용하여 가위 바위 보 인식하기
디지털비디오(DV)의 인터페이스와 포맷, 디지털비디오(DV)의 편집, 디지털비디오(DV)의 장단...
색공간과 색상모델의 조사