본문 바로가기
이모저모/AVFoundation

6주차. 정지영상 파일 포맷 및 압축

by ARpple 2024. 6. 23.

BMP 파일 포맷

영상 파일의 기본 정보 구현

영상파일 = 픽셀정보 + 영상 해상도 정보
⇒ Payload + Header(Image Resolution)

⇒ 헤더와 페이로드로 구성됨

Bitmap 파일 포맷

MS에서 만든 영상 파일 포맷, 윈도우 운영체제의 그림파일에서 사용

⇒ 헤더: File Header / Bitmap info header

⇒ Payload: Pixel 정보

BMP 파일 헤더 정보

파일 헤더

💡 파일 이름 확장자를 변경해도, 영상 처리 SW는 파일 처음 2Byte를 읽어서 해당 파일 디코딩에 적용함

  1. Magic Number ⇒ 파일의 처음에 기록되는 파일 정보, 변하지 않는 상수라는 뜻
  2. File Size ⇒ 전체 헤더(파일 + 비트멥 정보) + 픽셀 사이즈
  3. Pixel Data Offset ⇒ 파일 헤더 사이즈 + 비트멥 정보 헤더 사이즈
✅ 파일 헤더의 사이즈는 14 바이트

비트맵 정보 헤더

  1. Header Size ⇒ 비트맵 정보 헤더의 사이즈, 기본 40 바이트
  2. Bit Length ⇒ 색상 정보
    1. 1 Bit: 흑백 정보
    2. 8 Bit: Gray Scale
    3. 24 Bit: RGB Color
    4. 32 Bit: RCG + Alpha
  3. Compression ⇒ 압축률 (BMP 파일은 비압축 파일로 0)
  4. Image Size ⇒ Payload 크기 정보
  5. #Colors ⇒ 해당 파일에서 사용하는 색상에 대한 정보, 비트맵 파일 0

영상 포맷 종류

JPEG/JFIF

  • 가장 많이 사용되는 영상 파일 포맷
  • 손실 압축을 사용, 원 영상 화질을 최대한 유지하면서 데이터의 크기를 줄인다.
  • 국제표준기구 “JPEG”에서 만듦

JPEG 2000

  • JPEG에서 만든 jpeg보다 화질을 유지하면서 더 많은 압축을 할 수 있는 국제 표준
  • 디지털 영화제작에 주로 사용

✅ EXIF

  • JPEG + Metadata 영상
  • 스마트폰에 많이 사용 됨
  • Metadata ⇒ 카메라로 촬영한 장소, 시간, 카메라 셔터속도, 노출 정도, 이미지 크기 등

TIFF

  • 영상 + 메타데이터(Tag)
  • CYMK를 다루어 인쇄 업계에서 많이 사용

GIF

  • 8-bit Color Palette(256 색상) 정보를 사용하는 영상 파일 정보
  • 애니메이션 기능이 있다.

WebP

  • Google에서 만든 영상 파일 포맷
  • 더 좋은 압축 성능으로 JPEG를 인터넷에서 대체할 목적

HEIF

  • 애플 기기에서 주로 사용되는 고압축 영상 포맷
  • 국제표준기구 MPEG에서 만듦

JPEG 압축기술 1

  • JPEG 압축과정을 설명할 수 있다.
  • RGB to YCrCB 변환을 할 수 있다.
  • Color Subsampling을 설명할 수 있다.
  • DCT 변환을 할 수 있다.

JPEG 압축과정

RGB to YCrCb 변환

명암과 색을 인지하는 사람의 시각 특성 이용

사람의 눈은 색상보다 명암을 더 명확하게 인식한다.
⇒ Color Wave에서 양 끝에 존재하는 Blue 성분과 Red 성분으로 이분화 해서 색상을 구분하자.

JPEG에서 YCrCb 사용

YCrCb 공식에 사용되는 Rd’, Gd’, Bd’은 픽셀 값으로 [0,255]의 값을 가짐

💡 Y: 밝기 정보, 그래도 유지 Cr, Cb: 사람이 색을 감지하는 원추 세포가 눈 중심을 제외하고는 별로 없어 일부 정보를 버려 손실 압축

⇒ 손실 압축을 위해 Color Down Sampling을 진행함 (Color Subsampling이라고도 함)

Color Subsampling

💡 4:4:4로 진행하면 더 고화질이다. 하지만 컬러영상에서 화질의 차이가 크지 않음

JPEG 압축기술 2

  1. Orthogonal Transform(직교 변환)을 설명할 수 있다.
  2. JPEG Quantization(양자화)를 설명할 수 있다.
  3. Zigzag Scanning을 설명할 수 있다.
  4. JPEG의 Entropy coding을 설명할 수 있다.
  5. JPEG의 Decoding 과정을 설명할 수 있다.

DCT Transform

픽셀 정보를 주파수 정보로 변환하는 과정

DCT Kernel Vector

DCT 커널 벡터는 Orthogonal Vector이다, 서로간의 영향이 없다.

⇒ 모든 커널 벡터마다 직교함 → 내적시 값이 0이다.

DCT 변환 공식

양자화

미리 주어진 양자화 행렬을 이용해서 진행한다.

✅ 양자화 스텝 크기가 크다. ⇒ 정보 손실을 크게 한다.

Quantization 공식

ZigZag Scanning + Run-length Encoding

1. ZigZag Scanning

직렬화하는 과정, 양자화된 주파수 값이 0인 고주파 계수들이 모두 마지막에 집중되도록 함
⇒ 고주파 영역에서 0이 아닌 계수를 저장함으로 정보 압축

2. Run-length Encoding (AC)

(연속한 0의 개수와 x의 비트 수),(x의 정보)를 이용해서 값을 허프만 코딩한다.

JPEG Decoding 과정

✅ 역양자화

역양자화에서 양자화 손실 데이터를 완벽히 복구하지 못함

JPEG에서 손실이 발생하는 영역

  1. Color DownSampling
  2. Quantization → 블록당 패턴 양자화

➕ 소수점 버림 과정

JPEG에서 압축하는 기법

  1. 색상 표현력을 제한한다. ⇒ (사람 눈의 특징에 기반한다.)
    1. Color SubSampling을 진행한다.
  2. 이미지 픽셀을 블록화 후 패턴(DCT 변환) 양자화
    1. 양자화를 진행한다.
    2. ZigZag Scanning를 진행한다.
    3. 허프만 코딩을 진행한다.

댓글