BMP 파일 포맷
영상 파일의 기본 정보 구현
영상파일 = 픽셀정보 + 영상 해상도 정보
⇒ Payload + Header(Image Resolution)
⇒ 헤더와 페이로드로 구성됨
Bitmap 파일 포맷
MS에서 만든 영상 파일 포맷, 윈도우 운영체제의 그림파일에서 사용
⇒ 헤더: File Header / Bitmap info header
⇒ Payload: Pixel 정보
BMP 파일 헤더 정보
파일 헤더
💡 파일 이름 확장자를 변경해도, 영상 처리 SW는 파일 처음 2Byte를 읽어서 해당 파일 디코딩에 적용함
- Magic Number ⇒ 파일의 처음에 기록되는 파일 정보, 변하지 않는 상수라는 뜻
- File Size ⇒ 전체 헤더(파일 + 비트멥 정보) + 픽셀 사이즈
- Pixel Data Offset ⇒ 파일 헤더 사이즈 + 비트멥 정보 헤더 사이즈
✅ 파일 헤더의 사이즈는 14 바이트
비트맵 정보 헤더
- Header Size ⇒ 비트맵 정보 헤더의 사이즈, 기본 40 바이트
- Bit Length ⇒ 색상 정보
- 1 Bit: 흑백 정보
- 8 Bit: Gray Scale
- 24 Bit: RGB Color
- 32 Bit: RCG + Alpha
- Compression ⇒ 압축률 (BMP 파일은 비압축 파일로 0)
- Image Size ⇒ Payload 크기 정보
- #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
- Orthogonal Transform(직교 변환)을 설명할 수 있다.
- JPEG Quantization(양자화)를 설명할 수 있다.
- Zigzag Scanning을 설명할 수 있다.
- JPEG의 Entropy coding을 설명할 수 있다.
- 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에서 손실이 발생하는 영역
- Color DownSampling
- Quantization → 블록당 패턴 양자화
➕ 소수점 버림 과정
JPEG에서 압축하는 기법
- 색상 표현력을 제한한다. ⇒ (사람 눈의 특징에 기반한다.)
- Color SubSampling을 진행한다.
- 이미지 픽셀을 블록화 후 패턴(DCT 변환) 양자화
- 양자화를 진행한다.
- ZigZag Scanning를 진행한다.
- 허프만 코딩을 진행한다.
'이모저모 > AVFoundation' 카테고리의 다른 글
7주차. 영상처리(Image processing) (0) | 2024.07.07 |
---|---|
동영상 UIImage 배열로 변환하기 (0) | 2024.06.29 |
4주차. 데이터 에러 검출 및 복구 (0) | 2024.06.15 |
3주차. 산술 부호화 (0) | 2024.06.15 |
2주차. 정보이론 및 데이터 압축(허프만 부호화) (0) | 2024.06.08 |
댓글