JPEG 압축 방식 이해하기
효율적인 이미지 압축 과정을 간단히 설명합니다
24. January 2025 작성자 Bianca Palmer
휴대폰이나 카메라로 사진을 찍으면 순식간에 저장되는데, JPEG 형식으로 저장되어 더 작고, 더 빠르면서도 선명한 이유가 궁금했던 적이 있나요? 그 뒤에서는 강력한 과정이 작동하면서, 원본의 극히 일부 크기로 이미지를 줄이면서도 높은 품질을 유지합니다. 그런데 어떻게 이게 가능한 걸까요? 이 가이드에서는 JPEG 압축의 세부 과정을 살펴보고, 각 단계를 쉽게 설명해 JPEG 이미지 압축이 어떻게 작동하는지 이해할 수 있도록 돕습니다.
JPEG란?
JPEG (Joint Photographic Experts Group의 약자) 은 가장 널리 사용되는 이미지 형식 중 하나입니다. 디지털 사진을 저장할 때 가장 많이 사용되는 형식입니다. JPEG의 핵심 장점은 이미지 파일을 압축해, 눈에 띄는 품질 저하 없이 훨씬 더 작게 만들 수 있다는 점입니다.
예를 들어, 고품질 비압축 이미지는 46MB가 될 수 있습니다. JPEG로 압축하면, 같은 이미지가 4.1MB 정도로 줄어듭니다. 그런데 어떻게 이렇게 줄이면서도 이미지를 선명하게 유지할 수 있을까요?
그 비밀은 compression process, 에 있습니다. 이 과정은 사람의 눈의 특성을 활용해 불필요한 데이터를 제거합니다.
JPEG은 무엇을 하나요?
간단히 말해, JPEG은 이미지를 분석해 우리 눈에 잘 보이지 않는 요소를 제거합니다. JPEG으로 이미지를 압축할 때, 얼마나 강하게 압축할지 조절할 수 있습니다. "품질" 설정을 조정해 얼마나 저장 공간을 절약할지 결정할 수 있습니다. 품질을 100%에서 0%로 낮출수록 파일 크기도 함께 줄어듭니다.
압축을 많이 할수록 이미지 해상도는 그대로이지만, "아티팩트"라고 불리는 결함이 보이기 시작할 수 있습니다. 이 결함은 작은 사각형처럼 보이며, 보통은 확대해서 보기 전까지 잘 눈에 띄지 않습니다. JPEG의 목표는 이미지가 사람 눈에 보기 좋게 유지되는 한 최대한 파일을 작게 만드는 것입니다.
JPEG 압축 단계
JPEG 압축 은 하나의 과정이 아니라, 이미지 크기를 줄이기 위해 설계된 여러 단계로 이루어져 있습니다. JPEG을 효율적으로 만드는 다섯 가지 핵심 단계를 소개합니다.
1단계: 색 공간 변환
이미지는 픽셀로 이루어져 있으며, 각 픽셀은 빨강, 초록, 파랑(RGB) 성분이 합쳐져 색을 만들어 냅니다. JPEG은 먼저 이 RGB 값 을 다른 색 공간으로 변환합니다:
- 휘도(밝기): 픽셀의 밝기 또는 명도를 나타내며, 전체 이미지의 대비를 결정하는 데 중요합니다.
- 색차(색상): 색조와 채도를 포함한 색상 정보를 나타냅니다.
이 변환은 사람의 눈이 색상(색차)보다 밝기(휘도)에 더 민감하다는 사실을 활용합니다. 밝기와 색을 분리함으로써, JPEG은 이후 단계에서 중요한 시각 정보를 유지하면서도 필요한 부분에만 데이터를 줄일 수 있습니다.
이 단계에서는 데이터가 손실되지 않지만, 효율적인 압축을 위한 준비가 이루어집니다.
2단계: 색차 다운샘플링/크로마 서브샘플링
크로마 서브샘플링 는 은 색 공간 변환 이후에 적용되는 기법입니다. 앞서 말했듯이 우리 눈은 밝기(휘도)에 비해 색(색차)을 잘 구분하지 못합니다.
JPEG은 이 점을 활용해 색상 데이터를 줄입니다. 파란색과 빨간색 색차 이미지를 4픽셀 블록 단위로 평균 내어 축소합니다. 이렇게 하면 색상 데이터는 훨씬 작아지지만, 휘도(밝기)는 그대로 유지됩니다. 이 시점에서 이미지는 상당 부분 압축된 상태입니다.
3단계: 이산 코사인 변환(DCT)
이산 코사인 변환(DCT) 은 이미지 데이터를 변환하기 위해 사용되는 수학적 기법으로, 공간 영역(이미지가 픽셀 격자로 표현되는 영역)에서 주파수 영역으로 변환합니다. 이 과정은 이미지의 어떤 부분이 중요한 시각 정보를 담고 있고, 어떤 부분을 줄이거나 제거해도 되는지를 파악하는 데 도움이 됩니다. 삭제되었습니다.
DCT는 이미지를 8x8 블록으로 나누고, 각 블록을 주파수 값들의 집합으로 변환합니다. 더 높은 주파수는 가장자리나 노이즈처럼 픽셀 값이 급격히 변하는 부분을 나타내며, 사람의 눈에는 덜 잘 보이기 때문에 단순화하거나 제거할 수 있습니다.
4단계: 양자화
DCT가 적용되면, 그 결과로 나온 주파수 데이터는 양자화를 거칩니다. 이 단계에서는 주파수 값의 범위를 양자화 테이블이라고 불리는 상수 집합으로 나누어 줄입니다. 이 과정에서 주파수 값은 반올림되어 단순화됩니다.
고주파 성분은 더 강하게 양자화되어, 전체적인 이미지 품질에 덜 중요하기 때문에 정밀도가 더 많이 손실됩니다. 이 네 번째 단계는 이미지를 표현하는 데 필요한 데이터 양을 줄여 파일 크기를 작게 만듭니다. 그러나 양자화를 지나치게 적용하면 특히 높은 압축률에서 블록 노이즈나 흐릿함 같은 눈에 띄는 아티팩트가 발생할 수 있습니다.
5단계: 런렝스 및 허프만 인코딩
양자화 후에도 데이터는 여전히 효율적인 저장을 위해 충분히 압축되어 있지 않습니다. 여기에서 런렝스 인코딩(RLE) 및 허프만 인코딩 이 사용됩니다.
먼저 RLE를 사용해 0처럼 동일한 값이 길게 반복되는 구간을 각 값 하나하나가 아니라 반복 횟수만 저장해 단순화합니다. 그다음 자주 등장하는 값을 더 짧은 비트 코드로 바꾸는 기법인 허프만 인코딩을 적용하여 파일을 한층 더 작게 만듭니다.
These two 인코딩 방식이 함께 작동하여 파일 크기를 크게 줄이면서도 이미지 품질을 크게 손상시키지 않습니다.
추가 참고 사항
JPEG는 매우 효율적인 형식이지만, 몇 가지 중요한 점을 고려해야 합니다.
- 압축 수준: JPEG에서는 사용자가 압축 수준을 선택할 수 있지만, 압축률이 높을수록 파일 크기는 줄어드는 대신 가장자리가 흐려지거나 픽셀화 같은 눈에 띄는 아티팩트가 생길 수 있습니다. 이는 양자화 테이블 값이 너무 커지면 0이 더 많이 추가되어 파일은 작아지지만 그만큼 이미지 품질이 저하되기 때문입니다.
- 고주파 데이터 손실: 양자화는 고주파 데이터(날카로운 가장자리 같은 세부 정보)의 정밀도를 감소시키므로, JPEG는 부드러운 질감에는 적합하지만 날카로운 선이나 벡터 그래픽에서는 한계를 보일 수 있습니다.
- 벡터 그래픽에는 적합하지 않음: JPEG는 벡터 그래픽을 압축하기에 최선의 선택이 아니며, 도형이나 선의 경계에서 눈에 띄는 아티팩트를 유발할 수 있습니다.
이러한 한계에도 불구하고 JPEG는 오래되었고 이해하기 쉽고 로열티도 없어 가장 널리 사용되는 이미지 형식으로 남아 있습니다. 그러나 WebP 또는 HEIF 같은 최신 형식은 품질을 유지하면서 더 나은 압축률을 제공해, 특정 상황에서는 매력적인 대안이 됩니다.
마무리
JPEG 압축 알고리즘은 이미지 데이터 관리에서 주목할 만한 성과입니다. 이미지를 더 작은 블록으로 나누고 수학적 변환을 적용하며, 런렝스 및 허프만 인코딩 같은 효율적인 인코딩 기법을 사용함으로써, 고품질 이미지를 훨씬 작은 파일 크기로 저장할 수 있게 합니다.
JPEG는 특히 높은 압축률이나 벡터 그래픽에서는 몇 가지 한계가 있지만, 광범위한 사용성과 사진 이미지에서 좋은 결과를 제공하는 능력 덕분에 여전히 표준 형식으로 자리 잡고 있습니다.