JPEG 손실 압축 구현
Date:
JPEG
- Joint Photographic Experts Group : 합동 사진 전문가 단체
- 정지 화상 이미지를 저장하는 손실압축의 표준방법
- 정보 손실이 있지만 용량이 작아 웹에서 자주 사용됨
- 고주파 성분 소실이 있어, 고주파인 글자, 선, 세밀 격자 모양에 대해서 품질 저하가 심하여, 문자 같은 경우는 PNG와 같은 비손실 압축 방법을 사용함
.jpg
,.jpeg
,.jpe
의 확장자를 사용함
압축과정
- 색공간 변환
- 크로마 서브샘플링(Chroma subsampling)
- 양자화
- 엔트로피 부호화
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
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글