190 likes | 567 Views
선형대수 프로젝트. 200811430 박대선. 프로젝트 주제. 매트랩을 사용한 이미지 파일 손실 압축 압축대상 : 24bit BMP 파일. 압축 단계. 색공간 변환 (Color space transformation) 이산 코사인 변환 (Discrete cosine transform) 양자화 (Quantization) 엔트로피 부호화 (Entropy coding). 색공간 변환. RGB 색공간을 YCbCr 색공간으로 변환 Y : 휘도 ( 광밀도 ) 성분 Cb : 색차 정보
E N D
선형대수 프로젝트 200811430 박대선
프로젝트 주제 • 매트랩을 사용한 이미지 파일 손실 압축 • 압축대상 : 24bit BMP 파일
압축 단계 • 색공간 변환(Color space transformation) • 이산 코사인 변환(Discrete cosine transform) • 양자화(Quantization) • 엔트로피 부호화(Entropy coding)
색공간 변환 • RGB 색공간을 YCbCr 색공간으로 변환 • Y : 휘도(광밀도) 성분 • Cb : 색차 정보 • Cr : 색차 정보
이산 코사인 변환 • 전체 화상을 8x8 픽셀의 크기를 갖는 섹션으로 나누고 각 성분 데이터를 주파수 공간으로 변환시킨다. • 저주파 성분은 이미지의 전체적 윤곽을 결정하고 고주파 성분은 이미지의 세세한 부분을 담당한다.
양자화 • 고주파 성분의 많은 부분을 0 또는 0에 근접하는 정수로 변화시킨다.(정보손실) • 사람은 이미지의 세세한 부분을 담당하는 고주파의 명도 변화에 대해서는 구별을 잘 하지 못한다. 그렇기 때문에 고주파 성분의 많은 부분들을 0으로 바꾸어도 변화를 알아차리기 어렵다.
엔트로피 부호화 • 8x8 격자의 성분들을 저주파부터 지그재그로 정렬
엔트로피 부호화(cont.) • 정렬된 데이터의 뒷부분은 0으로 만든 고주파 성분들이다. 반복되는 0을 반복 길이 부호화를 사용해 압축한다
프로젝트 적용 - LoadImage 압축할 BMP 파일을 불러온다. 확장자를 따로입력하지 않아도 BMP 파일을 불러온다.
프로젝트 적용 - ToYCbCr RGB 형태를 YCbCr 형태로 변환한다.
프로젝트 적용 - DCT 데이터를 8x8 행렬로 쪼개어 이산 코사인 변환수행. 색 데이터가 주파수 데이터로 된다. 매트랩에 있는 dctmtx를 이용해 복잡한 수식 없이 간단히 할 수 있었다.
프로젝트 적용 - Quantization 데이터를 8x8 행렬로 쪼개어 양자화 행렬로 나눈다. 이 과정으로 고주파 데이터의 많은 부분이 0으로 근접하게 된다.
프로젝트 적용 - EntropyEncoding 엔트로피 부호화 수행. 데이터를 8x8 행렬로 쪼개어 저주파부터 차례대로 정렬한다.
프로젝트 적용 - EntropyEncoding 양자화 과정에서 0이 된 고주파 데이터를 Find로 찾아 제거한다. 8x8 행렬로 쪼개면 수많은 블록이 생기는데 다른 블록과 구분하기 위해 숫자 100을 추가한다.
프로젝트 적용 - OutCompFile 압축 전과 압축 후의 데이터 크기를 비교한 후 압축한 데이터를 파일로 저장한다.
압축을 푸는 과정을 반대로 하면 압축을 풀 수가 있다 • LoadComp • EntropyDecoding • Dequantization • ReverseDCT • ToRGB • OutDeComp
프로젝트 후기 • 매트랩을 사용해서 유용했던 점 • 이미 정의되어 있는 함수를 사용해서 간단하게 프로그램을 구현할 수가 있다. • 원래 이산 코사인 변환에서 복잡한 계산을 해야 하지만 매트랩 기능을 사용해서 간단하게 연산을 할 수 있었다. • 사이즈가 큰 행렬을 쉽게 다룰 수가 있다 • C언어와 다르게 행렬간의 합과 곱이 간편하게 된다.
프로젝트 후기 • 프로젝트를 하며 아쉬웠던 점 • BMP 파일 가로 세로 크기가 2000 픽셀을 넘어가면 엔트로피 부호화 부분이 상당히 느려진다. • 매트랩의 GUI를 잘 활용하지 못했다.
프로젝트 후기 • 다른 팀들의 발표를 보고… • 다른 팀들을 주로 음성 관련 주제가 많았다. 그 중에서 스테레오에서 배경음악과 노랫소리를 분리해서 MR을 추출하는게 가장 인상에 남았다. 그리고 음성인식이나 얼굴인식과 같이 추상적으로 보이는 내용을 구현하려고 노력한 것이 대단하다고 생각한다. 내가 한 이미지 압축은 입력값이 명확하니 항상 예상 가능한 결과를 얻을 수 있지만 음성인식, 얼굴인식은 입력값에 따라 애매한 부분도 생길 수 있기 때문이다. 그 밖에 다른 프로그래밍 언어를 응용하려 한 것이 놀라웠다. 혼자서 프로젝트를 진행하다보니 여러 가지 시도해보지 못한 것이 아쉬웠다.