ch14. Image Coding and Compression

2018. 11. 27. 23:36영상처리

* 멀티미디어는 매우 큰 데이터이다.

예로, 512*512 24-bit RGB color 이미지 = 6.29Mbits 이다.

채널의 전송속도가 56kbps라면. 전송 시간은 112sec로 예상된다.

 

* 멀티미디어데이터 압축 기본 개념

+ 핵심

> 질(압축률)이 좋게!

> 복잡도가 적게!

> 수행 시간이 짧게!

 

a. 보편적인 압축 시스템 구성

codec이라고도 부름.

 

b. 압축률

c = (src coder input size)/(src coder output size)

c. Lossy compression & Lossless compresion

손실 압축과 무손실 압축

d. Statical Redundancy(중복)의 제거

- Spatial redundancy <- 예로 RLC

- temporal redundancy <- 시간상 변하는 부분만 encoding.

e. Human Visual System - 사람에 맞게. 가청, 가시영역정도로

- Spatial masking : Flat vs Texture areas

- Temporal masking : Scene cuts

 

* 멀티미디어 데이터 압축에 대한 Framework 구성

 

14.1 lossless and Lossy Compression

 

14.2 Huffman Coding <- Code Book이 고정적이다. 그리하여 Encoding 시간이 가변적인 RLE 같은 것보다 상대적으로 적다. 반면 압축률이 떨어질 수 있다.

(0.2*3)+(0.4*1)+(0.3*2)+(0.1*3) = 1.9

 

H = -(0.2log(0.2) + 0.4log(0.4) + 0.3log(0.3)+0.1log(0.1)) = 1..8464

 

 - Code Book 만드는 법

 

14.3 RLE (Run-length Encoding) <- Code book이 adaptive하게 (가변적으로) encoding 한다. 시간이 걸리더라도 압축률을 올리고 싶을 때 사용한다.

 

1) 0 과 1의 시작위치와 갯수로 encoding

2) 1의 시작위치와 갯수로 Encoding

3) bit plane하여 RLE.

4) Binary 에서 Gray code로

 

MSB -> LSB로 넘어갈때, 변화가 있다면 1로, 변화가 없다면 0으로.

 

ex) 2 = 0 0 1 0 (Binary)

-> 0 0 1 1 (Gray)

 

14.5 JPEG ( Joint Photographic Experts Group ) Image coding algorithm <- Image만 가지고 압축과 복원을 하자. MPEG(Moving ~),영상을.  H.320은 통신을 하는 사람들

 

 

 

 

- DCT 는 손실이 없다. 무손실

- Quantization Matrix: 예시 [0 255] -> [0 15], 압축을 되지만 손실이 생긴다. 

- DPCM : 첫값이 기준이 되고, 다음값들은 그저 차이만 기록하는 것.

 

 

 

 

 

 

 

 

 

 

 

 

* JPEG Algorithm 과정

 1) 이미지를 8*8 block으로 나눈다. 

// DCT를 원이미지를 한번에 하면, 시간이 너무 걸리므로 (FFT에 비해) 나눠서 한다. 그리고 8*8을 넘어서면 반대로 시간이 늘어나므로 8*8으로 하였다.

 2) 주어진 block에서 128을 빼자. // 값을 음수와 양수로 나누기 위해서

 3) DCT를 수행

 4) DCT matrix를 Q matrix로 나눈다.

 5) 이 Matrix를 zig zag scan한다.

// 좌상단으로 갈수록 저주파가 몰려있고,, 우하단으로 갈수록 고주파 성분이 있다. 이중에 저주파성분이 중요하다. 한줄로 읽으면 저주파->고주파->저주파->고주파... 이리 되니 zig zag scan을 한다.

 6) DCT 한 값의 Matrix를 Q Matrix로 나누어 nomalize한다.

 

 

 

여기는 DCT -> Quntization -> IDCT .

마지막 결과, 차이만 코딩하여 보낸다.

 

* JPEG decoding 하는 과정.

 1) Inverse zig zag.

 2) Q matrix랑 곱한다.

 3) Inverse DCT

 4) 128을 더한다.

 

// 원이미지와 복원한 이미지는 차이가 존재한다.

 

+)  Q Matrix를 고정하여 사용하지 않는다. 통신이 좋지않을 때는 2q (이리되면 PSNR이 낮아진다.), 좋을 때는 1/2q or 1/4q 한다.

 

* DCT 와 FFT 비교

 

 

 

- FFT는 고주판 성분을 제외하고 다시 복원을 하니,원 값과 차이가 많이 생겼다.

 

- DCT는 같은 수행을 했어도 값의 차이가 그리 크지 않았다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* Huffman Encoding

- 책의 압출률 계산법 : 총 픽셀수 * 픽셀당 bit수/(압축된 총 Bits) = (8*8)*8bits/ 60bits = (64*8)/8 = 1.xx * 8 = 8.5 (=압축률)

- 60/64 = 0.94 (픽셀당 필요한 bit수) = Bits/Pixel

 

Run : 자기 값 앞에 0이 몇 개나 있는가?

Category : 범주,, integer을 표현하는 데 필요한 bit<- N 계산 log_2(N) 의 올림.

Sign: 양수는 1, 음수는 0

Position: 테이블 상 위치.

Run, Category

 

을 가지고 Code Book을 보고 Code를 부여

 

* Chroma Sub-sampling

 

 

사람이 차이를 가장 느끼는 것. 명도가 중요하다. 채도를 구분하는 것은 사람에게는 참으로 어렵다.

그림에서 오른쪽으로 갈 수록 상대적으로 압축하는 것이 준다. Y는 그대로 가지만, Cb, Cr 채도만 바꾼다.

16 = 128/8

16*16 DCT * 3ch

16*16 + 8*8*2ch

 

* PSNR 계산

 

PSNR 계산하는 것을 기억하자. 여기 공식은 틀렸다고 한다.

 

*1D 2D

 

*비디오

 

 

비디오 클립이란 것은 연속된 이미지의 모음.

한 장의 압축은 JPEG 같은 것으로.

그런데 비디오에서는 Frame이 변화하였을 때 큰 차이가 별로 없는 경우가 있다. Temporal redundancy

차이가 없는 부분 = 0 = Frame 1 – Frame 2

차이가 있는 부분 = n = Frame 1 – Frame 2

그러한데 차이를 줄이고 싶다?

Motion Estimation : 지금 Frame sub block이 이전 Frame에 있었는지, 가장 비슷한 곳을 유추해 내는 것.

-> Motion vector 유추. 움직인 거리.

Such range, 범위를 정해서 찾는다.

이전 Frame (reference frame)

 

조금 씩 block을 옮겨 다니면서 유추한다.

찾아낸 옮기는 차이가 motion vecto이다.

보내는 것은 차이에 대한 Matricmotion vecto이다.

'영상처리' 카테고리의 다른 글

ch15. Wavelets  (0) 2018.12.04
ch7. Forier Transform  (0) 2018.11.02