복습

  • RGB는 3배의 용량이 들어가므로 통신을 하는데 있어서 용량이 작았으면 좋겠음 -> compression을 시도
  • 압축률을 높이면서 손실을 적게(lossy - 유손실, lossless - 무손실) -> ex)정확한 원본의 전송에는 무손실을 사용
  • Huffman coding이 가능한 이유 : 자주 나오는 단어가 존재하기 때문 -> 발생확률에대한 예측이 정확해야함
    • ceiling function : 올림 혹은 내림
    • entropy : 최소한으로 줄인 bit
  • run-length encoding
    • 한 열씩 묶어서 기록
    • 0이 반복된 개수 1이 반복된 개수를 바뀔때마다 기록
    • 1이 시작한 위치와 1의 개수를 기록
    • binary bit plane
    • gray codes : 더욱 간결하게 기록 할 수 있음
    • code book은 확률을 고정되어 있음 <-> Arithmetic encoding은 빈도수가 변할때마다 code book이 변화

JPEG

  • 사진 전문가들이 모여서 만든 이미지 압축방식
  • DCT, IDCT - endcoding, decoding에 집어넣어서 압축률을 매우 높임

 

  • 압축률을 높이면서 손실률을 감소 -> Quantization 덕분
  • DPCM : 이전 값과의 차성분을 저장
  • code book을 제공

MPEG

  • H.26x : 통신에서의 영상 압축
  • H.32x : 소리 압축

DCT와 FFT 비교

  1. DCT는 앞이 저주파, 뒤로 갈수록 고주파 성분
  2. fft후 상위 4개를 없애버림 -> low pass filter
  3. invers fft를 하게되면 결과가 이전과 달라짐을 확임
  4. 이번에는 DCT를 사용 후 상위 4개 제거
  5. invers DCT를 하면 이전 값과 비슷하게 나오는 것을 확인

The JPEG Algorithm

  1. 이미지를 8x8로 쪼갬 -> DCT를 할 때 시간이 오래 걸려서 잘라서 계산해보니 8x8이 가장 적합
  2. 각각의 8x8 블록들을 각각 압축 -> 0~255의 값을 -128~127의 범위로 바꿔주는 것이 좋아서 -128을 해줌
  3. DCT 적용 후 Quantization table로 나눔
  4. 결과 값을 확인해보니 왼쪽 상위로 갈수록 저주파성분이 오른쪽 하위로 갈수록 고주파성분이 몰려있는 형태가 됨
  5. 오른쪽 하위의 고주파성분을 버리고자 함 -> 고주파는 0이 많음
  6. ZIGZAG로 scan해보면 어느 순간부터는 0의 값이 계속 반복됨

    7.   읽어온 후를 확인하여 0이 계속 반복되면 그 순간부터 end of block으로 처리

  • quantization table 예제 : 고주파쪽 값이 큰 이유는 고주파를 없애주기 위함

  • quality값을 곱해주어 Q table을 늘리고 줄이는데, 이 값이 커질수록 PSNR이 작아짐

  • incoding 예제

 

 

 

  • decoding 예제 -> zigzag를 다시 헹렬로 만들고 시작
  • 나눈 Quantiation table 곱함

  • invers DCT 후에 빼준 128을 다시 더함

 

  • 원본값과의 차이

  • DC값과 AC값은 다른 방식으로 압축 -> 가장 첫 부분(0,0)은 따로 저장

  • AC값의 Run과 Category를 먼저 설정

    • Run은 0의 개수

    • Category는 정해진 값에 따라서 DC Category를 지정

 

  • 이렇게 table을 참고하여 정리한 후 code table에서 일치하는 값을 code로 지정

  • sign이 0이면 음수, 1이면 양수

+ Recent posts