Webp

  • Google에서 개발한 이미지 형식, 이미지 크기를 줄여 로딩 속도를 향상 시키는 것이 중점
  • PNG, JPEG 보다 약 30% 정도 더 작으면서 품질 유지
  • 손실/무손실 압축, 투명도, 애니메이션, 메타데이터, 색상 프로필 등 다양한 기능을 지원함

손실 WebP 압축 (Lossy WebP)

  • VP8 키 프레인 인코딩을 기반으로 함

블록 예측 (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)

  • 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%의 크기 절약이 가능함