JPEG 손실 압축 구현

Date:


JPEG

  • Joint Photographic Experts Group : 합동 사진 전문가 단체
  • 정지 화상 이미지를 저장하는 손실압축의 표준방법
  • 정보 손실이 있지만 용량이 작아 웹에서 자주 사용됨
  • 고주파 성분 소실이 있어, 고주파인 글자, 선, 세밀 격자 모양에 대해서 품질 저하가 심하여, 문자 같은 경우는 PNG와 같은 비손실 압축 방법을 사용함
  • .jpg, .jpeg, .jpe의 확장자를 사용함

압축과정

  1. 색공간 변환
  2. 크로마 서브샘플링(Chroma subsampling)
  3. 양자화
  4. 엔트로피 부호화

1. 색공간 변환(RGB → YCbCr)

영상에서 사용되는 색공간의 일종이다. YCbCr는 RGB 정보를 인코딩하는 하나의 방식으로, 이미지나, 영상에서 자주 사용되는 색공간이다. RGB의 경우 특성상 중복되는 정보가 많기 때문에 그부분을 최소화 할 수 있는 방식이다. 하지만 단순 선형 공간 변형이기 때문에 저장 공간에는 차이가 없다.

  • Y 성분은 RGB 가중치된 합의 값으로 0~1사이값을 가지게 됨(RGB에 대한 가중치의 합은 1)
  • CbCr은 Y에 따른 색차 정보를 의미
  • Y’로 사용하는 경우도 있는데 이것은 Luma값이라 하고 RGB에 대한 값들이 r(감마)값에 의해 조정된 R’,G’,B’의 값의 가중합을 의미

RGB → YCbCr 수식

가중치 : $K_r + K_g + K_b = 1$

$Y = K_r\times R + K_b\times B +K_g\times G$

Y : R,G,B에 대한 가중합

$C_b = \cfrac{1}{2}\cdot\left({B-\left(\cfrac{k_r}{1-k_b}\cdot R + \cfrac{k_g}{1-k_b}\cdot G\right)}\right) = \cfrac{1}{2} \cdot \cfrac{B-Y}{1-K_b}$

Cb : B값에서 R,G에 대한 비중을 뺀 값

$C_r = \cfrac{1}{2}\cdot\left({R-\left(\cfrac{k_b}{1-k_r}\cdot B + \cfrac{k_g}{1-k_r}\cdot G\right)}\right) = \cfrac{1}{2} \cdot \cfrac{B-Y}{1-K_b}$

Cr : R값에서 B,G에 대한 비중을 뺀 값

📌reference

  • 위키
  • teus.me https://suyeon96.tistory.com/15 https://github.com/ghallak/jpeg-python/blob/master/encoder.py https://m.blog.naver.com/jhwang81/221418666684

jpeg format


💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡 

댓글