Jpeg2000 과 Jpeg XR

서문

이 글의 주소는 http://www.kippler.com/doc/jpeg2000_vs_jpegxr/입니다. 이 문서의 글을 다른곳으로 복사하거나 스크랩 하지 마시기 바랍니다. 이 글을 참고하고자 할 경우는 이 글에 대한 링크만을 제공하시기 바랍니다.

문서 수정 기록

- 2007/12/15 최초 작성

서론

이미지 포맷에 대한 이해

BMP

마이크로 소프트에서 만든 이미지 저장 포맷. 비손실 기반의 이미지 포맷이며, 8비트 영상 포맷은 RLE압축을 지원하지만, 파일 포맷 자체가 영상의 크기를 줄이기 위해서 만든 포맷이 아니라, 영상을 손쉽고 빠르게 처리하기 위해서 만든 포맷이므로 압축하지 않은채 사용하는 경우가 많다. (RLE압축의 경우도 압축률이 매우 낮다)

파일을 만들거나 사용하기가 매우 쉽기 때문에, 크지 않은 이미지 파일을 처리하거나 간단한 이미지 파일 처리에 많이 사용된다.

GIF

비손실 압축으로 이미지를 저장하기 위하서 만든 포맷. 8비트 컬러(256컬러)만을 지원하므로 자연스러운 영상을 표현하기는 힘들지만, 비교적 비손실 압축이 잘 지원되고, 역사가 오래된 포맷이라서 웹에서 많이 쓰이는 포맷이다. 팔레트에 의한 투명 컬러를 지원하며, 애니메이션 포맷을 지원하기 때문에 웹상에서 간단한 애니메이션을 보여줄 때에는 이만한 포맷이 없다.

예전에는 특허문제로 사용에 문제가 많았으나 특허도 만료가 되어서 이제는 자유롭게 사용이 가능한 포맷이다.

PNG

GIF포맷의 256컬러 한계와, 특허 문제로 사용하기 힘들자 이를 극복하고자 만든 포맷. GIF보다 훨씬 나중에 만들어 졌기 때문에 압축률, 기능등 모든점이 뛰어나다. GIF와 마찬가지로 비손실 압축을 지원하며, 3비트/24비트/32비트 컬러 포맷을 지원한다. 특히 32비트 포맷은 RGB에 알파 채널이 추가된 포맷이기 때문에, 반투명 이미지를 구현하기에 매우 좋다.. 하지만 아직까지 PNG알파 채널을 지원하는 브라우저나 프로그램이 많지 않으며, 애니메이션 포맷인 MNG포맷도 거의 쓰이지 않고 있다. 원래의 목적인 GIF 포맷의 대치는 아직까지 달성하지 못하고 있다.

하지만, BMP/GIF 등에 비해서 장점이 워낙 많은 관계로 차세대 비손실 압축 영상 포맷의 표준이라고 봐도 좋을듯 하다.

JPG

위의 비손실 압축 포맷과는 달리 손실 압축을 지원하는 대표적인 이미지 포맷이다. 영상의 중요하지 않은 가시정보를 제거하는 방법으로 압축을 하기 때문에, 1/10정도로 영상의 크기를 줄여도 인간의 눈으로는 그 차이를 크게 구분하지 못하게 된다. 압축 방법은 DCT 알고리즘을 사용한다.

비손실 압축

데이터를 압축할 때 원본의 정보를 버리지 않는 압축 방법. 예를 들어 BMP 파일을 PNG파일로 바꾸면 그 크기가 줄어들지만 원래의 정보는 그대로 남아 있기 때문에 PNG파일을 가지고 원래의 BMP파일을 그대로 복원해서 다시 만드는 것이 가능하다.

손실 압축

원본의 데이터 정보중 중요한 부분만을 남겨두고 나머지는 버리고 압축하는 방식. 이미지 파일을 JPG파일로 변환하면 인간의 눈이 차이를 잘 못느끼는 정보를 제거후 압축을 하므로 압축률을 크게 늘리는 것이 가능하지만, 원본의 정보가 손상이 되었으므로 100% 복원하는것이 불가능 하다. 하지만 압축률이 뛰어나므로, 저장공간이나 전송 수단이 제한되어 있는 경우 비손실 압축 방식에 비해서 더 많은 정보를 전달하는것이 가능해 지기 때문에 손실 압축을 많이 사용한다.

본론

Jpeg2000 소개

JPEG2000은 손실압축의 대표적인 JPEG포맷의 단점을 극복하고자 대충 2000년 전후로 만든 포맷인가 보다.(잘 모른다)

JPEG2000에 관련된 정보를 보면 이것저것 비교점을 나열하고 이런게 좋다고 써 있는데, 결국 제일 중요한건 "기존의 DCT 방식의 압축방식이 아닌 웨이블릿 변환을 이용한 압축방식을 사용해서 JPG보다 두배는 더 좋은 압축 효율을 얻을 수 있다" 가 관건이다.

즉, 기존의 JPG는 보통 1/10 정도로 파일을 압축해서 사용하는데(JPG는 손실압축이기 때문에 1/2 도 가능하고, 1/100도 가능하지만 보통 1/10정도가 많이 쓰이는 압축률이다) JPEG2000은 1/20으로 줄여도 JPG의 1/10로 압축한 영상과 비슷한 영상을 얻을 수 있다는 의미이다.

그러다 보니, 병원같이 X-RAY 사진을 고화질로 오래보관해야 되는 곳에서는 저장공간이 절반으로 줄어드는것은 경비 절감에 큰 효과가 있기 때문에 많이 쓰이고 있으며, 극장용 디지털 영화도 JPEG2000을 영상 압축 포맷으로 사용하고 있다.


그럼에도 불구하고..... 왜 이렇게 JPEG2000은 나온지 오래되었는데 아직도 JPEG을 대치하지 못하고 있는 것일까? 여기에는 여러가지 의견이 있지만, 나 자신의 개인적인 의견은 "압축률이 문제가 아니라 속도가 문제" 라는 것이다. 대표적인 무료 JPEG2000 라이브러리에는 OpenJpeg이나 Jasper 같은 라이브러리들이 있는데, 이 라이브러리들은 기존 jpeg라이브러리에 비하면 정말 극악한 속도를 자랑한다. ID 소프트에서 만든 문서를 참고해 보면, 이들 라이브러리는 최적화된 JPEG라이브러리에 비해서 100배정도 느리니, 겨우 저장 용량 절반 아끼자고 디카로 찍은 사진 파일을 JPEG2000으로 저장했다가는 나중에 이미지 뷰어로 원하는 사진을 찾지도 못할정도이다. 실제로 2004년쯤 꿀뷰2에서 jpeg2000을 지원하려고 해당 라이브러리를 테스트 해보았다가 그 속도에 놀라서 지원을 포기한 적도 있다.

그러던 중 최근 Kakadu라는 상용 JPEG2000 라이브러리를 테스트 해 보고 다른 무료 JPEG2000 라이브러리보다 10배 가까이 빨라진것을 보고, 이제는 JPEG2000도 쓸만해 졌구나 싶어서 꿀뷰3에서는 JPEG2000을 지원하기 시작하였다. 결론은, 이제는 컴퓨터도 빨라졌으니 좋은 라이브러리를 사용하면 JPEG2000도 쓸만한 포맷이 되었다는 것이다.


JPEG2000 이미지 파일의 확장자는 .jp2 와 .j2k 가 보통 쓰인다. .j2k 파일은 JPEG2000의 로우 이미지 스트림 포맷이고, jp2는 로우 이미지 스트림에 이미지에 대한 추가 정보를 덧씌운 컨테이너 포맷이다.

JPEG XR 소개

2006년 마이크로 소프트가 새로운 이미지 포맷을 만들어서 발표를 했으며, 마이크로 소프트가 이 포맷으로 JPEG 포맷을 대치하려 한다는 기사가 여기저기 나왔던 적이 있었다. 링크: zdnet 기사

포맷은 만들었지만, 아직 지원하는 프로그램도 없고 지원하는 기기도 없어서 좀 조용히 지나간다 했었는데, 어느순간 마소는 Windows Media Photo 라는 MS적인 이름을 버리고, HD Photo라는 이름으로 포맷이름을 바꾸어서 이 포맷을 차세대 영상 표준 포맷으로 바꾸는 작업을 진행하고 있었다. 링크: HD PHOTO 홈페이지

그러더니 몇달전 드디어 HD Photo 라는 이름마저도 버리고 JPEG XR이라는 이름으로 JPEG 그룹에서 표준화 검토를 한다는 소식이 들려오기 시작했다. 관련 기사를 보면, 2007년 검토 작업에 들어갔으며, 별 문제가 없는한 2008년 HD Photo는 JPEG XR이라는 이름으로 JPEG2000 과 더불어JPEG의 뒤를 이을 차세대 영상 포맷이 될꺼라는 거다.

위에서 언급한 JPEG2000처럼 JPEG XR은 JPEG 보다 2배 정도의 압축 효율을 보여준다. 즉 100KB의 JPEG파일과 동일한 화질을 JPEG2000과 JPEG XR파일은 50KB의 파일로 만들 수 있다는 것이다.

사실 압축 효율만으로 따지면 JPEG XR은 JPEG2000보다 그다지 우수하지 않다. MSU 에서 비교한 자료를 보면 JPEG2000이 훨씬 나중에 만들어진 JPEG XR보다 동일 용량대비 화질이 더 우수다하고 평가를 내리고 있다. (JPEG XR을 만들고 있는 BILL CROW는 자신의 블로그에서 그렇지 않다고 반박하고 있다.) MSU 와 BILL CROW의 내용을 살펴보면, 결론은 JPEG2000이나 JPEG XR이나 JPEG보다는 우수하지만, 결국 압축률은 고만고만 하다는 것이 내 결론이다. 직접 몇가지 테스트도 해 보았지만, 서로 압축방식이 달라서 어떤 경우는 JPEG2000이, 어떤 경우는 JPEG XR이 더 보기 좋았다.(SNR 테스트는 안해 봤다는 의미)


그렇다면, JPEG XR의 존재 의미는 무엇일까? 테스트를 위해서 HD Photo Device Porting Kit 1.0을 다운로드 받아서 JPEG XR 디코더를 만들고 속도를 테스트 해 보았다. 얼래? 속도가 빨랐다. 다운로드 받은 소스는 MMX, SSE 와는 거리가 먼 C로 된 소스였음에도 불구하고, JPEG2000의 KAKADU와 비슷한 속도를 내는 것이아닌가? 윗글에서 JPEG2000이 성공하지 못한 이유를 그놈의 속도 때문이라고 정의를 내렸는데, JPEG XR은 단순히 C로 된 소스가 최적화한 상용 라이브러리인 KAKADU 보다도 빠른것 이었다. 더군다나 JPEG XR은 부동소수점 연산을 사용하지 않고, 정수연산만으로 만들어 졌기 때문에 PC이외의 휴대용 기기에 포팅이 무척 쉽다는 설명도 얻을 수 있었다. 즉, 디카에서 찍은 사진을 JPEG2000으로 저장하는건 무척 힘들지만 JPEG XR로 만드는것은 조만간 가능해 질것이라는 것이다.

공개된 소스를 살펴보고, 관련 글을 보면서 JPEG XR의 장점은 명확해져 갔다. 기존의 이미지 포맷은 RGB를 8비트(256단계)나 12비트로만 저장하였지만 JPEG XR은 32BIT까지 지원 가능하다라고 하는데, 사실 이거는 하이엔드급 디카에나 바랄 사항이니까 뭐 그런가 보다 했는데, JPEG XR은 알파 채널을 지원해서 저장하는것도 가능하고, 비손실 압축도 지원한다는 것이다. 특히 비손실 압축을 할 경우 압축률이 기존 비손실 압축 포맷의 최강자였던 PNG포맷보다도 좋다는 것이다.


JPEG XR의 장점을 열거해 보자면

  • MS가 특허권에 대한 권리 행사를 하지 않기로 약속했기 때문에 완전 무료 사용이 가능한 포맷이다.
  • 손실압축을 사용할 경우, 효율이 JPEG보다 두배정도 뛰어나다.
  • JPEG 보다 훨씬 정밀도가 높은 데이터 포맷의 저장이 가능하다.
  • JPEG2000 보다 영상 처리 속도가 빠르다. PC뿐만 아니라 정수연산만 가능한 휴대용 기기로의 포팅이 쉽다.
  • 비손실 압축을 지원한다. 비손실 압축 저장시 PNG보다 압축 효율이 뛰어나다. 즉, 디카에서 RAW포맷 저장시 비손실 압축 저장용 포맷으로 사용한다던가 하는것이 가능하다.
  • 알파 채널을 지원한다. 반투명한 이미지를 처리할 수 있다는 의미이다. 기존에는 PNG포맷이 이 용도로 많이 쓰였다.
  • 애니메이션 GIF처럼, 하나의 파일에 여러장의 이미지를 저장하는것이 가능하다. 즉, 웹상에서 ANIMATION GIF보다 훨씬 높은 압축 효율로 에니메이션을 구현하는것이 가능하다.

  • 즉, 기존에 존재하는 모든 이미지 포맷의 장점을 하나의 포맷에 담아버린것이다. 헉쓰...

    JPEG XR은 Windows Vista에서는 Windows Media Photo라는 이름으로 지원되고 있으며 확장자는 .wdp 를 사용하고 있다. 하지만, 포맷의 이름이 HD Photo로 바뀌면서 앞으로는 .hdp 라는 확장자를 표준 확장자 포맷으로 사용할 예정이다. 현재 JPEG XR 이라는 이름으로 표준화 작업이 진행되고 있지만, HD Photo라는 이름이 아마도 계속 사용될 듯 하다.

    결론

    - JPEG XR(혹은 HD PHOTO) 킹왕짱~ 굿!

    - JPEG 너머로 JPG 파일을 JPEG2000이나 JPEG XR로 바꿀 수 있다.