JPEG가 시각 시스템을 속이는 방법: 신경생리학에 뿌리를 둔 엔지니어링
JPEG는 단순한 압축 형식이 아닙니다. 이는 1992년에 개발된 알고리즘으로 구현된 인간 시각의 3차원 모델입니다. JPEG는 데이터 저장을 최적화하는 것이 아니라, 눈이 보는 방식, 뇌가 이를 처리하는 방식, 그리고 시각 시스템에서 정보가 손실되는 지점을 모사합니다. 그 결과, 인식상 눈에 띄는 손실 없이도 파일 크기가 5~10배나 작아집니다. 이러한 효과는 수학적 계산을 단순화해서 얻은 것이 아니라, 생물학적 제약—즉, 광수용체 밀도, 대비 감도, 그리고 피질의 공간 주파수 선택성—에 정확히 맞추어 실현된 것입니다. 아래에서는 시각 신경생리학의 관점에서 JPEG 파이프라인의 각 단계를 기술적으로 분석해 보겠습니다.
YCbCr: 생물학적 의미에 따라 신호 분리
JPEG 인코딩의 첫 번째 단계는 RGB를 YCbCr로 변환하는 것입니다. 이는 단순한 기술적 편의가 아니라 망막 해부학을 직접 반영한 설계입니다. 인간의 망막에는 약 1억 2천만 개의 간상세포(밝기 감지)와 600~700만 개의 원추세포(색감지)가 존재하며, 그 비율은 약 20:1입니다. 따라서 시각 시스템은 색조보다는 명도의 미세한 변화를 훨씬 더 정확하게 구분할 수 있습니다.
Y 채널을 계산하는 공식은 다음과 같습니다:
Y = 0.299 × R + 0.587 × G + 0.114 × B
이러한 계수들은 우연히 정해진 것이 아닙니다. 특히 녹색에 대한 0.587이라는 계수는 인간의 눈이 약 555nm, 즉 스펙트럼의 황록색 영역에서 가장 민감하게 반응한다는 사실을 반영합니다. 진화 과정에서 숲속의 잎사귀 사이에서 익은 과일을 발견하기 위해 적응한 결과입니다. 그래서 이 계수들을 적용한 흑백 이미지는 입체감과 고대비가 살아있지만, 만약 모든 색상을 균등하게 평균화하는 방식(0.33R + 0.33G + 0.33B)으로 처리하면 평면적이고 ‘비누처럼’ 느껴지는 이미지가 됩니다.
YCbCr에서 Y 채널은 구조, 윤곽, 질감 등 인식에 핵심적인 정보를 담고 있습니다. Cb와 Cr은 단지 색조를 조절하는 역할만 하며, 인식 품질을 위협하지 않고도 적극적으로 처리할 수 있습니다.
크로마 서브샘플링: 말초 시력의 해부학적 특성에 따른 색상 압축
변환 후에는 크로마 서브샘플링이 적용됩니다. 이는 색상 채널의 해상도를 낮추는 작업으로, 가장 일반적인 4:2:0 모드에서는 Y 채널 4개당 Cb와 Cr 채널 1개씩만 처리됩니다(2×2 픽셀). 결국 색상 정보의 75%가 버려지게 됩니다.
이는 망막 해부학과 정확히 일치합니다. 원추세포는 중심와에 집중되어 있고, 주변부로 갈수록 밀도가 급격히 줄어듭니다. 색상 시야의 공간 해상도는 흑백 시야보다 평균 4배 정도 낮습니다. JPEG는 색상을 ‘잃는다’는 것이 아니라, 이미지의 각 국소 영역에서 시각 시스템이 실제로 구분할 수 있는 만큼만 보존하는 것입니다.
이를 확인하려면 포토샵에서 어떤 JPEG든 열어 YCbCr 채널로 분리한 뒤, Y와 Cb/Cr의 시각적 품질을 비교해 보면 됩니다. Cb/Cr 채널은 흐릿하고 저주파 성분처럼 보이지만, Y 채널 위에 겹쳐놓으면 뇌가 자동으로 이미지의 완전성을 복구합니다. 이는 형식의 결함이 아니라 시각 피질의 작동 방식을 활용한 결과입니다.
DCT와 양자화: 시각적 사각지대의 주파수 지도
이산 코사인 변환(DCT)은 이미지를 8×8 블록으로 나누고, 각 블록을 64개의 기본 성분으로 분해합니다. 여기에는 저주파 경사부터 고주파 에지, 노이즈, 질감까지 포함됩니다. 이는 추상적인 개념이 아니라, 1차 시각 피질(V1)의 뉴런들이 특정 공간 주파수를 가진 방향성 스트라이프에 반응하는 생물학적 근사와 일치합니다. 즉, DCT의 역할을 생물학적으로 모사한 셈입니다.
그 다음으로 계수들은 양자화 과정을 거칩니다. 양자화 테이블의 값으로 나눈 뒤 반올림하는 방식인데, Y 채널의 표준 테이블은 왼쪽 상단에 최소값(저주파, 고감도), 오른쪽 하단에 최대값(고주파, 저감도)을 두는 구조로 되어 있습니다. 이 테이블은 엔지니어링적 추측이 아니라, 인간을 대상으로 한 심리시각 실험을 통해 도출된 대비 감도(CSF)의 경험적 지도입니다. CSF의 피크는 시야각 1도당 3~5사이클에서 발생하며, 1도당 60사이클 이상에서는 인간이 물리적으로 세부 사항을 구분할 수 없습니다.
포토샵에서 품질을 80으로 설정하면, 양자화가 인식 한계 이하의 주파수에만 영향을 미치도록 임계값을 설정하는 셈입니다. 품질이 5로 내려가면, 뇌가 형태와 질감을 인식하는 데 사용하는 중간 주파수까지도 알고리즘이 제거하기 시작합니다. 그래서 인식 품질이 급격히 떨어지는 것입니다.
실험: 눈이 인식하지 못하는 부분 시각화
JPEG가 정확히 어떤 요소를 ‘보이지 않는’ 것으로 간주하는지 확인하려면, 간단한 실험을 해볼 수 있습니다. 같은 이미지를 다양한 품질로 JPEG로 저장한 뒤, 원본(PNG)과 압축된 버전의 차이를 계산해 보세요.
from PIL import Image
import numpy as np
original = np.array(Image.open("photo.png")).astype(np.float32)
for q in [95, 80, 50, 20, 5]:
Image.open("photo.png").save(f"q{q}.jpg", quality=q)
compressed = np.array(Image.open(f"q{q}.jpg")).astype(np.float32)
diff = original - compressed
diff_visual = ((diff - diff.min()) / (diff.max() - diff.min()) * 255)
Image.fromarray(diff_visual.astype(np.uint8)).save(f"diff_q{q}.png")
결과는 매우 인상적입니다:
- 품질 95에서는 차이 지도가 거의 검은색으로 나타납니다. 손실은 주로 노이즈에 국한됩니다.
- 품질 80에서는 차이가 윤곽선, 미세한 선, 고주파 질감(머리카락, 직물 등) 주변에 집중됩니다. 바로 DCT가 고주파 계수로 분류하고 양자화가 먼저 제거하는 부분들입니다.
- 품질 5에서는 차이 지도가 ‘원본의 거친 버전’처럼 보입니다. 알고리즘이 이미 CSF의 한계를 넘어섰고, 형태를 인식하는 데 필수적인 정보까지도 삭제하기 시작한 것입니다.
이는 코드의 오류가 아니라, 여러분 자신의 시각적 한계를 나타내는 지도입니다.
품질 80: CSF 곡선의 변곡점
왜 하필 80일까요? 이것이 사실상 웹 표준이 된 이유는 무엇일까요? 파일 크기와 SSIM(구조적 유사도 지수)을 품질에 따라 그래프로 나타내면, 품질 80 부근에서 명확한 변곡점이 보입니다. 그 이전에는 품질을 올릴수록(SSIM) 파일 크기도 조금씩 증가하는 반면, 그 이후에는 파일 크기가 두 배로 늘어나도 SSIM의 증가폭은 미미합니다(0.001 이하).
이는 ‘보이지 않는 주파수를 잘라내는 것’에서 ‘보이는 주파수를 잘라내는 것’으로 전환되는 시점과 일치합니다. 품질 80 이하에서는 양자화가 CSF가 거의 0인 영역에서 작동하고, 품질 80 이상에서는 CSF가 급격히 상승하는 영역에서 작동합니다. 따라서 ‘품질 80’이라는 규칙은 마법의 숫자가 아니라, 일반적인 이미지를 표준 조건(30cm 거리, 1080p)에서 볼 때의 대비 감도 한계를 실질적으로 반영한 것입니다.
중요한 점
- JPEG는 ‘그림’을 압축하는 것이 아니라, 시각 시스템의 작동 방식을 모델링합니다: 간상/원추 → Y/CbCr, 말초 색상 시야 → 크로마 서브샘플링, V1의 신경 주파수 선택성 → DCT, 대비 감도 한계 → 양자화 테이블.
- Y = 0.299R + 0.587G + 0.114B 공식의 계수들은 단순한 근사가 아니라, 인간 눈의 스펙트럼 감도를 수학적으로 모델링한 것입니다.
- 4:2:0 크로마 서브샘플링 모드는 기술적 하드웨어 제약이 아니라, 흑백과 색상 시야의 실제 해상도 비율(~4:1)에 맞춘 것입니다.
- 양자화 테이블은 고정된 템플릿이 아니라, 실험실에서 살아있는 피험자를 대상으로 한 연구를 통해 도출된 CSF의 경험적 지도입니다.
- 품질 80은 ‘타협’이 아니라, 알고리즘이 더 이상 보이지 않는 손실 영역에서 작동하지 않고, 이미지에서 인식 가능한 요소들에 영향을 미치기 시작하는 지점입니다.
— Editorial Team
아직 댓글이 없습니다.