JPEG, WebP 등 기존 이미지 코덱의 복잡성을 벗어나, 웨이블릿 코덱의 핵심인 엔트로피 레이어(Entropy Layer)를 Rust로 구현
BPC(Bit-Plane Count) 코딩 방식을 사용하여 이미지 데이터를 압축하며, 런타임 성능을 최적화
다양한 압축 모드(Compression Mode)를 제공하여 이미지 품질과 압축률 간의 균형을 조절 가능
코드 가독성(Code Readability)을 높여, 웨이블릿 코덱 연구 및 커스터마이징을 용이하게 함
libwce는 이미지 압축을 위해 BPC(Bit-Plane Count) 코딩 방식을 사용한다. 이미지 데이터를 웨이블릿 변환(Wavelet Transform)을 거쳐 얻은 계수를 압축하는 데 초점을 맞춘다. 특히, 각 계수를 4개씩 묶어 BPC 값을 계산하고, 이 값을 기반으로 압축을 수행한다. RUNNING, ZERO 예측자(Predictor)를 활용하여 압축 효율을 높이고, 다양한 압축 모드를 제공하여 이미지 품질과 압축률 간의 균형을 조절한다.
저자는 libwce를 사용하여 다양한 품질 설정(preset)에서 이미지 압축 성능을 측정했다. near-lossless, balanced, aggressive, very lossy 등 4가지 프리셋(preset)을 통해 압축률과 PSNR(Peak Signal-to-Noise Ratio) 값을 비교 분석했다. 예를 들어, near-lossless 설정에서는 1.52x 압축률에 49.06dB의 PSNR을, very lossy 설정에서는 10.11x 압축률에 21.62dB의 PSNR을 기록했다. 이는 libwce가 트레이드오프(Trade-offs)를 통해 다양한 압축 요구사항을 충족할 수 있음을 보여준다.
libwce는 단일 Rust 파일(Single Rust File)로 구성되어 있으며, 외부 의존성 없이 stdlib만 사용한다. 이는 코드의 가독성(Readability)을 높이고, 라이브러리 사용 및 수정의 편의성을 제공한다. 또한, 라이브러리는 무상태(Stateless)로 설계되어, I/O나 전역 변수를 사용하지 않고, 호출자가 제공하는 버퍼만을 사용한다. 이러한 설계는 libwce를 다른 이미지 처리 파이프라인에 쉽게 통합할 수 있도록 한다.
libwce는 압축된 비트스트림의 무결성(Integrity)을 검증하기 위해 다양한 테스트를 수행했다. 256개의 임의 비트 반전(bitflip) 및 바이트 스크램블(byte scramble) 테스트, 300개의 절단 지점(truncation point) 테스트, 그리고 다양한 Adversarial Case를 통해 libwce의 복원력을 확인했다. 모든 테스트에서 libwce는 문제없이 디코딩을 완료하여, 데이터 손실(Data Loss)에 대한 강인함을 입증했다.