Webp
- Google에서 개발한 이미지 형식, 이미지 크기를 줄여 로딩 속도를 향상 시키는 것이 중점
- PNG, JPEG 보다 약 30% 정도 더 작으면서 품질 유지
- 손실/무손실 압축, 투명도, 애니메이션, 메타데이터, 색상 프로필 등 다양한 기능을 지원함
손실 WebP 압축 (Lossy WebP)
블록 예측 (Block Prediction) / 예측 코딩 (Predictive Coding)
- 프레임을 매크로블록이라는 더 작은 세그먼트로 나눔
- VP8이 비디오 프레임을 예측하는 것과 동일한 방법론
- 각 매크로블록 내에서 이전에 처리된 블록을 기반으로 중복되는 움직임 및 색상 정보를 예측
- 이미 디코딩된 픽셀만을 사용하여 아직 알 수 없는 부분을 채우는 방식 -> 예측 코딩
- 중복되는 데이터는 블록에서 제거, 효율적인 압축으로 잔차(Rresidual)라는 작은 차이만 남음
- 다양한 인트라 예측 모드 (H_PRED, V_PRED, DC_PRED, TM_PRED)를 사용함
변환 (Transform)
- 잔차는 수학적으로 역변환 가능한 이산 코사인 변환 (DCT)를 거침
- VP8은 DCT와 함께 Walsh-Hadmard Transform (WHT)도 기본 주파수 변환으로 사용함
- 이 변환 후에 잔차에 많은 0 값이 포함되어 압축 효율이 높아짐
양자화 (Quantization)
- 변환된 결과는 양자화됨
- 양자화 단계는 비트가 손실되는 유일한 단계이며, 다른 모든 단계는 가역적이고 무손실임
- 블록 양자화 (Block Quantization)을 사용하며, 이미지의 다른 세그먼트에 걸쳐 비트를 적응적으로 분배함
- 압축 매개변수를 각 세그먼트에 대해 독립적으로 조정하여 효율적인 압축을 달성
엔트로피 코딩 (Entropy-coding)
- JPEG에서 사용되는 허프만 인코딩보다 더 나은 압축률을 제공하는 산술 엔트로피 인코딩 (Arithmetic Entropy Encoding)을 사용함
- 5 ~ 10%의 압축률 향상을 제공
Lossy WebP가 JPEG보다 우수한 이유
- Block adaptive quantization이 큰 파이를 만듦
- 중간/낮은 비트레이트에서는 filtering이 도움 됨
- Boolean arithmetic encoding은 허프만 인코딩에 비해 5 ~ 10%의 압축률 향상 제공
무손실 WebP 압축 (Lossless WebP)
예측 (공간) 변환 (Predictor (Spatial) Transform)
- 공간적 예측을 사용함
- 이웃 픽셀들의 상관관계를 이용하여 엔트로피를 줄임
- 현재 픽셀 값은 이미 디코딩된 픽셀로부터 예측되며, 실제 값에서 예측 값을 뺀 residual 값만 인코딩됨
- 이미지는 여러개의 정사각형 영역으로 나뉘며, 한 정사각형 내의 모든 픽셀은 동일한 예측 모드를 사용함
색상 (비상관화) 변환 (Color (de-correlation) Transform)
- 각 픽셀의 R, G, B 값 간의 상관관계를 제거하는 것
- G 값은 그대로 유지, R은 초록을 기반, B는 G와 R을 기반으로 변환됨
- 이미지는 블록으로 나뉘며, 한 블록의 모든 픽셀에 동일한 변환 모드가 사용됨
녹색 빼기 변환 (Subtract Green Transform)
- 각 픽셀의 빨강 및 파랑 값에서 녹색 값을 뺌, 디코더는 녹색 값을 빨강과 파랑에 다시 더함
색상 인덱싱 (팔레트) 변환 (Color Indexing (palettes) Transform)
- 고유한 픽셀 값이 많지 않은 경우, color index array를 생성하고 픽셀 값을 배열의 인덱스로 대체하는 것이 더 효율적일 수 있음
- 고유 ARGB 값의 수가 임계값(256) 미만인 경우, ARGB 값의 배열이 생성되고 픽셀 값은 해당 인덱스로 대체됨
색상 캐시 코딩 (Color Cache Coding)
- 이미 사용된 이미지 조각 (fragments)을 사용하여 새로운 픽셀을 재구성함
- 일치가 없는 경우 로컬 팔레트를 사용할 수 있으며, 이 팔레트는 최근 색상을 재사용하기 위해 계속 업데이트 됨
LZ77 역참조 (LZ77 Backward Reference)
- 역참조는 length와 distance code의 튜플
- length는 얼마나 많은 픽셀을 복사해야하는지 나타냄
- distance code는 이전에 본 픽셀의 위치를 나타냄
- 길이와 거리 값은 LZ77 prefix coding을 사용하여 저장됨
- 무손실 WebP의 엔트로피 코딩에는 LZ77-허프만 코딩의 변형이 사용되며, 이는 거리 값의 2D 인코딩과 압축된 희소 값을 사용함
알파 채널을 포함한 손실 WebP (Lossy Webp with Alpha)
- WebP는 손실 RGB 색상과 무손실 알파 채널을 동시에 사용하는 독특한 모드를 제공함 -> 현재 다른 이미지에는 없음
- PNG와 같이 모든 픽셀을 무손실로 인코딩하여 발생하는 킉 증각를 크게 줄여줌
- 투명 PNG를 손실 + 알파 WebP로 대체하면 평균적으로 60 ~ 70%의 크기 절약이 가능함