JPEG 2000은 ISO/IEC 15444 표준으로 제정된 이미지 코딩 시스템이다. 2000년에 핵심 코딩 시스템(Part 1)이 발표되었으며, 확장(Part 2), Motion JPEG 2000(Part 3) 등이 순차적으로 발표되었다. JPEG 2000은 JPEG에 비해 압축 성능이 향상되었고, 코드 스트림의 유연성을 제공하며, 다양한 응용 분야에서 활용된다. 이 표준은 파일 형식과 코드스트림을 모두 정의하며, 다양한 프로그램과 라이브러리에서 지원한다.
2. 역사
JPEG 2000(JP2)은 기존 JPEG 표준을 개선하기 위해 1990년대 후반 공동 사진 전문가 그룹(JPEG) 주도로 개발된 웨이블릿 기반의 이미지 압축 표준이다.[94] 이 표준 개발에는 1995년 리코가 JPEG-LS 표준화 과정에 제안했던 CREW(Compression with Reversible Embedded Wavelets) 알고리즘[95][96]의 기술이 일부 영향을 미쳤다.[97]
JPEG 2000은 코드스트림 내에서 특정 영역에 대한 무작위 접근이나 관심 영역 설정 등 다양한 기능을 지원한다. 또한 모션 JPEG 2000 확장을 통해 동영상 압축에도 사용될 수 있으며, 2004년에는 디지털 시네마 분야의 표준 비디오 코딩 방식으로 채택되었다. 그러나 월드 와이드 웹에서는 사파리를 제외한 주요 웹 브라우저의 지원이 부족하여 2022년 기준으로 널리 사용되지 못하고 있다.
2. 1. 개발 배경
JPEG 2000(JP2)은 이미지 압축 표준 및 코딩 시스템으로, 1992년에 제정된 이산 코사인 변환(DCT) 기반의 기존 JPEG 표준을 대체할 목적으로 개발되었다.[94] 이 개발 작업은 1997년부터 2000년까지 공동 사진 전문가 그룹(JPEG) 위원회에서 진행되었으며, 당시 투라지 아브라함(Touradj Ebrahimi)이 의장을 맡았다.[94] JPEG 2000 표준(ISO/IEC 15444-1)은 2000년에 발표되었으며, 기존 DCT 방식 대신 새롭게 설계된 웨이블릿 변환 기반의 압축 방식을 사용한다.
JPEG 2000 표준 개발은 1995년 리코(Ricoh)가 JPEG-LS 표준화 과정에 제안했던 CREW(Compression with Reversible Embedded Wavelets) 알고리즘[95][96]의 영향을 받았다. 당시 JPEG-LS 표준에는 LOCO-I 알고리즘이 채택되었으나, CREW 알고리즘의 여러 기술적 특징들은 이후 JPEG 2000 표준에 반영되었다.[97]
2. 2. 표준화 과정
JPEG 2000 이미지 코딩 시스템(ISO/IEC 15444)은 다음의 여러 부분(Part)으로 구성된다. 각 파트는 특정 기능이나 응용 분야를 다룬다.
2020년 6월 현재, JPEG 2000은 Part 1부터 Part 16까지 표준화되어 있다.[77]
3. 특징
JPEG 2000(JP2)은 이미지 압축 표준 및 코딩 시스템으로, 1992년에 제정된 이산 코사인 변환(DCT) 기반의 기존 JPEG 표준을 대체할 목적으로 개발되었다. 1997년부터 2000년까지 투라지 에브라히미(Touradj Ebrahimi, 이후 JPEG 의장)[94]가 의장을 맡은 공동 사진 전문가 그룹 위원회에 의해 새롭게 설계된 이산 웨이블릿 변환(DWT) 기반 방식으로 개발되었다. 이 표준화 작업의 시작은 1995년 리코(Ricoh)가 JPEG-LS 표준화 과정에 CREW(Compression with Reversible Embedded Wavelets) 알고리즘[95][96]을 제안한 것에서 비롯되었으며, 비록 JPEG-LS 표준에는 LOCO-I 알고리즘이 채택되었지만 CREW의 여러 기능은 JPEG 2000 표준의 기반이 되었다.[97]
JPEG 2000은 이산 웨이블릿 변환(DWT)을 기반으로 하며, 하나의 아키텍처에서 무손실 압축과 손실 압축을 모두 지원하는 유연성을 갖는다. 또한, 코드스트림은 다양한 세분성 수준에서 공간적 임의 접근(random access)이나 관심 영역(ROI) 접근을 지원하여 이미지의 특정 부분을 다른 품질로 저장하는 것이 가능하다.
표준화된 파일 확장자는 ISO/IEC 15444-1 규격 파일의 경우 `.jp2`이며, 확장된 Part-2 사양(ISO/IEC 15444-2)의 경우 `.jpx`이다. 등록된 MIME 유형은 RFC 3745에 따라 `image/jp2`로 정의되어 있다.
이 표준은 모션 JPEG 2000 확장을 통해 동영상 압축에도 적용될 수 있으며, 2004년에는 디지털 시네마의 비디오 코딩 표준으로 공식 채택되었다. 하지만 2022년 기준으로 사파리를 제외한 대부분의 주요 웹 브라우저에서 아직 널리 지원되지 않아 월드 와이드 웹에서는 보편적으로 사용되지 않고 있다.
3. 1. 압축 성능
JPEG 표준과 비교했을 때, JPEG 2000은 이미지 특성에 따라 일반적으로 20% 범위의 압축 성능 향상을 보인다. 특히 고해상도 이미지의 경우, JPEG 2000의 공간 중복성 예측이 압축 과정에 더 많이 기여하여 더 큰 이점을 얻는 경향이 있다. 그러나 압축 성능의 향상 자체는 기존 JPEG 표준에 비해 다소 미미하며, JPEG 2000이 제공하는 주요 장점은 코드 스트림의 상당한 유연성이다.
무손실 JPEG 표준처럼[9] JPEG 2000 표준은 단일 압축 아키텍처에서 무손실 압축과 손실 압축을 모두 제공한다. 무손실 압축은 가역 정수 웨이블릿 변환을 사용하여 구현된다. JPEG 2000은 매우 낮은 압축률부터 매우 높은 압축률까지, 매우 광범위한 유효 비트율을 처리할 수 있는 능력을 갖추고 있는데, 이는 JPEG 2000의 강점 중 하나이다. 압축 후 얻어지는 코드 스트림은 본질적으로 확장 가능(scalable)하며, 여러 방식으로 디코딩될 수 있다. 예를 들어, 코드 스트림을 임의의 지점에서 잘라내면 더 낮은 해상도나 신호 대 잡음비로 이미지 표현을 얻을 수 있다. 이는 JPEG 2000이 다중 해상도 분해 구조를 통해 이를 자동으로 수행하기 때문이다. 이러한 확장성 기능은 EBCOT(Embedded Block Coding with Optimized Truncation[76]) 알고리즘의 높은 부호화 효율과 PCRD-opt(Post Compression Rate Distortion Optimization) 등의 특징에 기인한다.
기술적으로 JPEG 2000은 JPEG과 몇 가지 주요한 차이점을 가진다. 이미지 데이터의 주파수 변환에 이산 코사인 변환(DCT) 대신 이산 웨이블릿 변환(DWT)을 사용하며, 엔트로피 부호화에는 허프만 부호 대신 산술 부호를 사용한다.
시각적 인공물 측면에서도 차이가 나타난다. JPEG 2000은 주로 이미지 가장자리 근처에서 흐릿함과 고리 형태로 나타나는 링잉 인공물만을 생성하는 반면, JPEG는 링잉 인공물과 더불어 8×8 블록 구조로 인해 발생하는 '블록킹' 인공물도 함께 생성한다.
JPEG 2000 압축 인공물 시연. 숫자는 압축률을 나타냄.
다만, 매우 낮은 비트 전송률 응용 프로그램에서는 H.264의 프레임 내 코딩 모드에 비해 성능이 떨어진다는 연구 결과도 있다.[33] 또한, 코드 스트림의 유연성은 장점이지만, 이러한 유연성 때문에 코덱이 복잡해지고 계산 집약적이 되는 단점이 있다.
3. 2. 확장성
JPEG에 비해 JPEG 2000이 가지는 주요 장점 중 하나는 압축 성능 향상보다는 코드스트림의 상당한 유연성이다.[94] JPEG 2000으로 압축된 이미지에서 생성된 코드스트림은 본질적으로 확장 가능하며, 여러 방식으로 디코딩될 수 있다. 예를 들어, 코드스트림을 임의의 지점에서 잘라내면 원본 이미지보다 더 낮은 해상도나 낮은 신호 대 잡음비(SNR, 즉 품질)를 가진 이미지 표현을 얻을 수 있다. 이는 확장 가능한 압축의 한 형태이다. 다양한 방식으로 코드스트림을 정렬함으로써 응용 프로그램은 성능 향상을 얻을 수 있다.
JPEG 2000은 압축 과정에서 이미지를 여러 해상도로 분해하는 다중 해상도 표현 방식을 사용한다. 이 피라미드 표현은 압축 외에도 이미지 표현의 확장성을 제공하는 데 활용된다. 이러한 특징은 점진적 디코딩(Progressive Decodingeng) 또는 신호 대 잡음비(SNR) 확장성으로 알려져 있다. JPEG 2000은 픽셀 정확도와 이미지 해상도(크기)에 따라 점진적으로 효율적인 코드스트림 구성을 제공한다. 이를 통해 시청자는 전체 파일을 다운로드하기 전에 최종 이미지의 저품질 버전을 미리 볼 수 있으며, 소스로부터 더 많은 데이터를 다운로드함에 따라 점진적으로 이미지 품질이 향상된다.
또한 JPEG 2000은 관심 영역(Region of Interesteng, ROI) 코딩 기능을 지원한다. 이를 통해 이미지 내의 특정 영역을 다른 영역(배경)보다 더 높은 품질로 압축할 수 있다. 관심 영역으로 지정된 부분의 DWT 계수들은 MAXSHIFT[88]라는 방법을 사용하여 값을 상향 이동(shift up)시켜 부호화 우선순위를 높인다. 특정 서브밴드 의 DWT 계수들이 가질 수 있는 값의 범위(동적 범위)를 비트라고 할 때, MAXSHIFT 방법에서 사용하는 상향 이동량 는 다음 조건을 만족해야 한다.
MAXSHIFT 방법을 이용한 ROI 기능은 디코더가 ROI의 형태에 대한 추가 정보 없이도 작동할 수 있다는 장점이 있다.
3. 3. 기타 기능
JPEG 2000은 데이터를 비교적 작고 독립적인 블록으로 나누어 처리하기 때문에, JPEG처럼 잡음이 많은 통신 환경에서 발생하는 비트 오류에 강한 편이다.
JP2 및 JPX 파일 형식은 색 공간 정보와 메타데이터를 유연하게 처리할 수 있으며, JPIP 프로토콜을 통해 네트워크 환경에서의 상호작용도 지원한다. 컴포넌트당 1비트에서 최대 38비트까지의 다양한 비트 심도를 지원하며, 지원하는 색 공간도 흑백, 3가지 유형의 YCbCr, sRGB, PhotoYCC, CMY(K), YCCK, CIELab을 포함한다. 이후 CIEJab (CIECAM02), e-sRGB, ROMM, YPbPr 등도 추가로 지원하게 되었다.[10] 또한, 알파 채널과 투명도를 완벽하게 지원한다.
기존 JPEG가 Exif 형식으로 메타데이터를 저장하는 것과 달리, JPEG 2000은 XML 형태로 메타데이터를 인코딩한다. ISO TC42 위원회는 표준 12234-1.4를 통해 Exif 태그와 XML 요소 간의 참조를 표준화했으며, XMP(Extensible Metadata Platform) 정보도 포함할 수 있다.
4. 기술적 내용
JPEG 2000(JP2)은 이미지 압축 표준 및 코딩 시스템으로, 1997년부터 2000년까지 투라지 에브라히미(Touradj Ebrahimi)가 의장을 맡은 공동 사진 전문가 그룹(Joint Photographic Experts Group, JPEG) 위원회 주도로 개발되었다.[94] 이 표준은 이산 코사인 변환(DCT)을 기반으로 하는 기존 JPEG 표준(1992년 발표)을 대체하기 위해 새롭게 설계된 웨이블릿 기반의 이산 웨이블릿 변환(DWT) 방식을 사용한다. 표준화된 파일 이름 확장자는 ISO/IEC 15444-1 규격 파일의 경우 `.jp2`이고, 확장된 Part 2 사양(ISO/IEC 15444-2)의 경우 `.jpx`이다. 등록된 MIME 유형은 RFC 3745에 따라 `image/jp2`이다.
JPEG 2000의 개발 배경에는 1995년 리코가 JPEG-LS 표준화 과정에 CREW(Compression with Reversible Embedded Wavelets) 알고리즘[95][96]을 제안한 것이 있다. 비록 JPEG-LS 표준에는 LOCO-I 알고리즘이 최종 채택되었지만, CREW 알고리즘의 여러 특징들이 JPEG 2000 표준에 영향을 주었다.[97]
JPEG 2000의 주요 기술적 특징 중 하나는 코드스트림 내에서 특정 영역에 대한 무작위 접근(spatial random access) 또는 관심 영역(Region of Interest, ROI) 접근을 다양한 수준으로 지원한다는 점이다. 이를 통해 이미지의 특정 부분을 다른 부분보다 더 높은 품질로 저장하는 것이 가능하다.
또한, JPEG 2000은 이산 웨이블릿 변환(DWT)을 기반으로 하므로, 압축된 데이터 하나로부터 다양한 해상도나 품질의 이미지를 추출할 수 있는 스케일러빌리티(scalability) 기능을 제공한다. 이 기술은 모션 JPEG 2000 확장을 통해 동영상 압축에도 활용될 수 있으며, 실제로 2004년에는 디지털 시네마의 비디오 코딩 표준으로 채택되기도 했다.
하지만 2022년 기준으로 사파리를 제외한 대부분의 웹 브라우저에서 JPEG 2000을 제대로 지원하지 않아, 월드 와이드 웹에서는 널리 사용되지 못하고 있다.
4. 1. 색 공간 변환
JPEG 2000 인코딩 과정에서 이미지는 초기에 RGB 색 공간에서 다른 색 공간으로 변환된다. 이 과정은 색상 구성 요소 간 정보 중복성을 줄여 압축 효율을 높이기 위함이다.[28] JPEG 2000 표준에서는 두 가지 주요 색 공간 변환 방식을 정의하고 있다.
=== 비가역 색상 변환 (ICT) ===
비가역 색상 변환(Irreversible Color Transform, ICT)은 널리 알려진 YCbCr 색 공간을 사용한다. 이 변환 방식은 계산 시 부동소수점 또는 고정소수점 연산을 필요로 하는데, 이 과정에서 반올림 오차가 발생할 수 있다. 이러한 반올림 오차 때문에 원본 RGB 값으로 완전히 복원되지 않아 '비가역적'이라 불린다. ICT는 주로 데이터 손실을 허용하는 손실 압축 모드에서 사용되며, 9/7 웨이블릿 변환과 함께 사용하도록 권장된다.[28] ICT 변환식은 다음과 같다.
=== 가역 색상 변환 (RCT) ===
가역 색상 변환(Reversible Color Transform, RCT)은 수정된 YUV 색 공간(구체적으로는 YCGCO와 거의 유사한 형태)을 사용하며, 모든 계산을 정수 연산으로만 수행한다. 이 방식은 양자화 오차를 발생시키지 않으므로, 변환된 색상 값을 다시 원래의 RGB 값으로 어떠한 손실도 없이 완벽하게 복원할 수 있다. 이러한 특성으로 인해 '가역적'이라 불리며, 주로 원본 데이터 보존이 중요한 무손실 압축 모드에서 사용된다. RCT는 5/3 웨이블릿 변환과 함께 사용하도록 권장된다.[28] RCT를 정확히 구현하기 위해서는 표준에서 지정한 방식대로 숫자를 반올림해야 하며, 이 변환 과정은 단순한 행렬 곱 형태로 표현하기는 어렵다. 변환 및 역변환 식은 다음과 같다.[28]
변환:
역변환:
RCT 과정에서 원본 R, G, B 값이 동일한 정밀도를 가질 때, 변환된 색차 성분인 C'b와 C'r은 원래 성분보다 1비트 더 높은 정밀도를 갖게 된다. 이 추가적인 정밀도는 변환 과정의 완전한 가역성을 보장하는 데 필수적이다.[28]
=== 추가 고려 사항 ===
색 공간 변환 후 얻어지는 색차 성분(Cb, Cr 또는 C'b, C'r)은 인간 시각이 휘도(밝기) 정보보다 색상 차이 정보에 덜 민감하다는 점을 이용해, 휘도 성분(Y 또는 Y')보다 해상도를 낮추는 다운샘플링을 적용할 수 있다. 이는 압축 효율을 높이는 데 도움이 되지만, 반드시 수행해야 하는 것은 아니다. 특히 웨이블릿 변환 자체가 이미지를 여러 해상도 스케일로 분해하기 때문에, 가장 세밀한 웨이블릿 스케일 정보를 제거하는 방식으로 다운샘플링을 더 효과적으로 구현할 수도 있다.[28]
JPEG 2000 표준에서는 이 색상 변환 단계를 '다중 구성 요소 변환(multi-component transform)'이라고 지칭한다. 이는 해당 변환 기술이 일반적인 RGB 이미지뿐만 아니라, 여러 데이터 채널(구성 요소)을 갖는 다양한 종류의 데이터에도 적용될 수 있음을 의미한다.[28]
4. 2. 웨이블릿 변환
JPEG 2000에 사용되는 웨이블릿 변환의 예시. 이는 2단계 CDF 9/7 웨이블릿 변환이다.
JPEG 2000은 입력 이미지를 타일(tile) 단위로 나누어 처리하며, 각 타일에 대해 웨이블릿 변환을 적용한다. 이는 JPEG 표준이 8×8 블록 크기의 이산 코사인 변환(DCT)을 사용하는 것과 대조된다. JPEG 2000은 두 가지 다른 웨이블릿 변환 방식을 사용한다.
# 비가역 변환 (손실 압축용): CDF 9/7 웨이블릿 변환을 사용한다.[29] 이 변환은 잉그리드 도베시가 개발했으며, 실수 연산을 포함하므로 복호화 과정에서 정밀도 차이로 인한 양자화 잡음이 발생할 수 있어 '비가역적'이라고 불린다. 주로 손실 압축에 사용된다.
# 가역 변환 (무손실 압축용): Le Gall–Tabatabai (LGT) 5/3 웨이블릿 변환의 반올림된 버전을 사용한다.[30][29][31] 이 변환은 디디에 르 갈(Didier Le Gall)과 알리 J. 타바타바이(Ali J. Tabatabai)가 개발했으며,[32] 정수 계수만을 사용하기 때문에 출력 값에 반올림(양자화) 과정이 필요 없어 양자화 잡음이 발생하지 않는다. 따라서 무손실 압축에 사용된다.
LGT 5/3 웨이블릿은 무손실 압축에 사용된다.
이러한 웨이블릿 변환은 리프팅 기법(Lifting Scheme) 또는 컨볼루션(Convolution) 방식으로 구현될 수 있다.
압축 방식: 가역 부호화(무손실 압축)와 비가역 부호화(손실 압축)를 동일한 틀 안에서 구현할 수 있다.
JPEG 2000은 하나의 압축된 이미지 데이터로부터 다양한 해상도나 화질(비트레이트)의 이미지를 추출할 수 있는 스케일러빌리티(Scalability) 기능을 제공한다. 이는 특히 EBCOT(Embedded Block Coding with Optimized Truncation)[76] 알고리즘의 높은 부호화 효율과 압축 후 레이트 제어(Post Compression Rate Distortion Optimization: PCRD-opt) 기능 덕분이다.
JPEG 2000에서는 2채널 필터뱅크에 기반한 분리 가능한 2차원 DWT가 사용된다. 이는 이미지의 수평 방향과 수직 방향으로 각각 1차원 DWT를 순차적으로 적용하여 2차원 변환 계수를 얻는 방식이다. Part 1 표준에서는 손실 압축용(CDF 9/7)과 무손실 압축용(LGT 5/3) 두 가지 DWT 필터를 정의하며, 두 필터 모두 리프팅 기법을 사용하여 구현된다. 리프팅 기법을 사용하면 변환 계수의 정밀도를 유한하게(예: 정수) 유지하면서도 수학적으로 완전한 가역 변환을 구현할 수 있다는 장점이 있다.
1단계의 2차원 DWT를 수행하면 이미지는 4개의 서브밴드(subband)로 분해된다.
LL: 수평 저주파, 수직 저주파 성분
HL: 수평 고주파, 수직 저주파 성분
LH: 수평 저주파, 수직 고주파 성분
HH: 수평 고주파, 수직 고주파 성분
일반적으로 DWT는 저주파 성분인 LL 서브밴드에 대해 반복적으로 적용되어 다단계 변환을 수행한다 (옥타브 분할). JPEG 2000 Part 1에서는 최대 32단계까지 DWT를 적용할 수 있도록 규정하고 있다 (0단계는 DWT 미적용).
JPEG 2000의 프리신크트
각 DWT 레벨에서 얻어진 변환 계수들은 프리신크트(precinct)라고 하는 직사각형 영역으로 그룹화된다. 프리신크트의 크기는 각 차원별로 2의 거듭제곱이어야 하며, 최대 215 × 215 크기를 가질 수 있다. 동일한 번호의 프리신크트들은 이미지의 특정 공간적 영역에 해당하는 DWT 계수들의 집합으로 볼 수 있으며, 이는 이후의 부호화 과정에서 패킷(packet)을 구성하고 프로그레션 순서(progression order)를 결정하는 기본 단위가 된다.
4. 3. 양자화
웨이블릿 변환 후, 계수들은 표현에 필요한 비트 수를 줄이기 위해 스칼라 양자화(scalar quantization) 과정을 거친다. 이 과정은 데이터 압축을 가능하게 하지만, 동시에 이미지 품질의 손실을 유발할 수 있다.[76]
양자화 과정에서 핵심적인 매개변수는 양자화 단계(quantization step size)이다. 이 단계 값이 클수록 더 많은 정보가 손실되어 압축률은 높아지지만 이미지 품질은 저하된다. 반대로 단계 값이 작을수록 원본에 가까운 품질을 유지하지만 압축률은 낮아진다. 특히 무손실 압축 모드에서는 정보 손실이 전혀 없어야 하므로, 양자화 단계를 1로 설정한다. 이는 사실상 양자화를 수행하지 않는 것과 같다. 손실 압축 모드에서는 각 DWT 레벨이나 서브밴드별로 다른 양자화 단계 값을 지정하여 압축률과 품질을 세밀하게 조절할 수 있다.
JPEG 2000 표준의 Part 1에서는 스칼라 양자화만 지원한다. 스칼라 양자화는 각 웨이블릿 계수 를 주어진 양자화 단계 로 나누고, 그 결과를 정수로 만드는 방식으로 이루어진다. 수식으로는 다음과 같이 표현할 수 있다.