2007년 04월 20일
JPEG과 MPEG의 Coding과정
JPEG 개요 및 원리 1. 개요 JPEG은 Joint Photographic Expert Group의 약자입니다. 원래는 ISO(국제 표준화 기구)와 CCITT(국제 전신 전화 자문)의 영상전문가들의 협력을 의미합니다만, 요즘 "JPEG"이란 단어는 가장 널리 쓰이는 정지압축영상의 파일형식(.jpg, .jpeg) 또는 그와 관련된 표준이란 의미로 많이 쓰입니다. 정식 명칭은 'Digital Compression and Coding of Tone Still Image'이며, 이는 ISO/IEC 10918-1(ITU 권고 T.81)로 표준화되어 있고, 정지 영상이나 연속적인 톤의 이미지를 표현하기 위한 압축 표준입니다. JPEG은 손실(loss)압축방식과 무손실(lossless)압축 방식 둘 다 지원합니다. 손실/무손실이 무슨 뜻이냐고요? 말 그대로 손실압축방식이라면 바로 어떤 사진이나 그림의 데이터 정보의 압축을 했을 때 원래 갖고 있던 정보량이 약간 손실된 체로 압축을 한다는 뜻이고, 무손실이라면 압축을 해도, 그 정보량이 변하지 않는다는 뜻입니다. 따라서 무손실압축방식(lossless)의 경우는 영상의 손실을 줄 수 없는 의료 영상과 같은 중요한 데이터에 쓰입니다. 예를 들어 여러분이 Print Screen Key를 이용해서 화면캡쳐를 하시고, 그것을 그림판에서 bmp로 저장을 하신다음 다시 ACDSee나 포토샵 등으로 jpg으로 변환을 해보십시오, 그러면 여러분은 두 가지 사실을 발견하시게 될 겁니다.첫째, bmp에 비해 jpg이 화질은 얼핏보기에 거의 똑같은데도 파일크기가 무려 10~20배 가량 줄어있다는 점. 둘째, 그런데 bmp와 jpg을 눈을 크게 뜨고 비교해보면, 약간 화질이 jpg이 떨어진다는 점을 발견하실 수 있을 겁니다. 그것은 바로 압축이 되서 데이터량이 현저하게 줄었고, 약간의 데이터 손실도 발생해서 화질이 미세하게 떨어졌다는 여러분이 이용하시는 jpg의 손실압축특성을 의미하는 것입니다. 이처럼 사람들이 jpg을 선호하는 이유는, 사람의 눈이 상당히 둔감하기 때문에 얼핏보기에는 화질을 거의 떨어뜨리지 않으면서, 데이터량은 수십배가량 줄일 수 있기 때문이지요. 이런 일이 가능한 이유는 정지영상의 특성을 이용하여, 수학적으로 아주 멋지고 훌륭한 알고리즘 (DCT, Arithmetic Coding 등)을 세계적인 석학들과 과학자분들이 수십년간의 연구와 노력 끝에 발명해 내셨기 때문입니다.
이제 JPEG의 압축원리를 말씀드리겠습니다. 영상을 전혀 모르시는 하나포스 네티즌 여러분을 주독자로 가정하여 너무나 간단하고 쉽게 설명드릴 것이기 때문에 혹시나 전문가님들께서는 내용이 부족하다고 생각되더라도 양해바랍니다.
일단 영상은 화소(pixel)라는 최소단위의 아주 작은 점, 수백~수만개가 모여 네모난 하나의 화면을 구성합니다. 한 화면을 구성하는 pixel수에 따라 소위 1024*768 이니 800*640이니 하는 해상도(resolution)를 나타냅니다. 1024*768 이라면 가로로 1024줄, 세로로 768줄의 총 786432개의 화소로 구성된 네모난 화면을 말합니다. 따라서 화소수가 많을 수록 화질은 선명하겠죠? 하나의 화소는 명도, 채도 등에 따라 정수값을 갖게 되는데, 설계하는 사람 마음입니다만, 예를 들어 명도별로 0~255까지 쓸 수 있다고 가정하고 0이면 검은색 255이면 흰색이라고 정한다면, 128은 회색이 되겠고 200이면 칙칙한 회색이 되겠죠? 그러면 1024*768 영상은 0~255값을 갖는 거대한 1024행*728열의 수학적인 행렬이 되는 것입니다.
여러분께서 예전에 바닷가에서 친구들과 찍은 사진을 한 장을 꺼내보시면, 발 근처에는 황토색 모래가 쭈욱 있고, 머리 위에는 하늘색 하늘이 펼쳐져 있고, 뒤에는 시퍼런 수평선과 바다가 보이고, 머리에는 검은색 머리가 바람에 휘날리고 있을 겁니다. 사진의 부분부분마다 비슷한 색상이 모여 있지요? 즉, 하나의 화소 입장에서 보면 확률적으로 나랑 비슷한 색을 가진 놈이 근처에 있을 확률이 높은 것입니다. 이런 확률적 특성을 이용해서 화면을 잘잘히 쪼개서 무언가를 해보면 데이터량이 줄어들 수 있지 않을까 해서 생각해낸 방법이 바로 JPEG입니다!!!
이제 영상을 잘잘하게 쪼개봅시다. 1024*728 화면행렬을 8*8짜리 정사각형 행렬로 쪼개면, 총 가로 128 * 세로 91개의 8*8행렬로 나뉩니다. 영상이론에서는 이 8*8 행렬을 블록(block)이라고 부르고, 영상압축의 아주 기본 단위로 여깁니다. JPEG의 압축은 이 블록단위로 행해집니다.
이 8*8의 블록 행렬(고등학교 수학시간 때 행렬 배우셨죠? 바로 그 행렬입니다.)은 여러가지 수학적인 변환에 의해 아래와 같은 과정으로 정보량이 줄어듭니다. - DCT : 이 연산을 하면 왼쪽 위쪽으로 큰 숫자들이 몰립니다. 제일 좌측 상단에 있는 큰 숫자를 DC(저주파)값, 나머지 63개의 숫자들은 AC(고주파)값이라고 부릅니다. 특히 DC값 및 이 근처에 있는 숫자들은 블록전체의 명도를 좌지우지하는 매우 중요한 정보를 담고 있습니다
- 양자화(Quantization) : 전체적인 데이터량을 줄이기 위해 양자화 행렬이라는 설계자가 만든 임의의 정수행렬로 나눕니다. 그러면 작은 값들는 0으로 바뀌겠지요? 이렇게 0이 되어 사라진 숫자들 때문에, 약간의 정보손실(loss)가 발생하는 것입니다.
- 지그재그 스캐닝 및 허프만 코딩 테이블을 이용한 비트열 압축 : 지그재그 줄세우기로 만들어진 정수열을 이진수로 바꾼 후, 그 이진수의 인근값 특성 및 확률(0 또는 1이 연속으로 몇 개가 계속되는지 등등)을 이용한 허프만 코딩(자세한 설명은 생략하겠습니다.)을 이용해서 8*8행렬이 불과 몇 개의 0과 1의 조합으로 줄어들게 됩니다.
이처럼 원래의 8*8 정수 행렬이 DCT è 양자화 è 지그재그 스캐닝 è허프만 코딩 등의 과정을 거치면서, 데이터량이 엄청나게 줄어드는 것을 확인하실 수 있습니다. 단 양자화 과정에서 아주 작은 AC 값들은 손실되기 때문에 원래 영상에 비해 약간 화질이 저하되는 손실압축방식이 되는 것입니다.
- encoding과정의 역순으로 진행됩니다. 그렇게 복원된 영상과 원래의 영상값을 비교해보십시오. 별로 차이는 안나지만 다르죠? 색상으로 변환되면 사람의 눈으로 볼 때는 별차이를 못느끼지만 이 엄연한 값의 차이 때문에 JPEG을 손실압축방식이라고 부릅니다.
어떻게 jpeg에 대해 잘 이해가 되셨는지 모르겠습니다. 다음 기회에는 동영상 압축방식 표준인 MPEG에 대하여 설명 드리겠습니다. MPEG에는 기본적으로 JPEG이 차용되어 있습니다. 따라서 MPEG을 이해하시기 위해서는 JPEG에 대한 이해가 필수적입니다. 예제) 아래 bmp(미압축,좌측) 사진과 jpg(압축,우측) 사진의 화질을 눈으로 비교해보세요. 참고로 bmp파일은 224Kbytes이며, jpg파일은 18.9Kbytes입니다. 거의 열배 이상 데이터량이 줄어들었는데도 화질은 거의 같죠? ♣
< 그림 BMP, JPG 파일 비교 > | ||
MPEG 개요와 원리 정지영상 압축표준인 JPEG의 개요와 원리에 이어, 동영상 압축표준인 MPEG의 개요와 원리에 대하여, 아주 쉽고 간단히 설명을 드리겠습니다. 아무래도 MPEG은 움직이는 동영상에 대한 압축기술이기 때문에, JPEG에 비해서는 표준도 다양하고 그 안에 내재된 기술들이 다양하면서도 매우 복잡한 편입니다. MPEG에는 JPEG기술이 근간으로 채용되어 있기 때문에 MPEG 기본 개념을 이해하시기 위해서는 JPEG에 대한 이해가 필수적입니다.
가. 표준화 MPEG(Moving Picture Expert Group)의 약자로, JPEG과 마찬가지로 원래는 동영상 압축표준화를 논의하기 위한 관계자들의 협력모임을 의미하는 것이었으나, 지금은 가장 많이 쓰이는 동영상 표준, 또는 그 표준에 따라 만들어진 동영상 파일이라는 뜻으로 대개 많이 쓰이지요. 동화상 정보의 부호화에 대한 표준화를 담당하는 MPEG은 1988년에 ISO/TC97/WG9에서 처음으로 시작되었습니다.
- MPEG 1 : CD, HDD 등의 저장매체용으로 개발된 MPEG 압축규정입니다. - MPEG 2 : 방송(ex. 디지털TV방송)을 위한 MPEG 압축규정으로 여러 채널의 영상과 음성이 규정되어 있습니다. MPEG3도 있었는데 MPEG2와 별반 다르지 않아 MPEG2에 흡수되었답니다. - MPEG 4 : 통신(인터넷, IMT-2000, ATM, LAN 등)을 주타겟으로 설계된 MPEG 압축규격으로 특히 저전송속도에서 화상을 효과적으로 재현하기 위한 규정입니다. 특히 에러나 정보손실이 발생할 수 있는 통신용도로 개발되었기 때문에 전송에러에도 뛰어난 화질을 가질 수 있도록 여러가지 보완책들을 집어넣은 상당히 쓸만한 압축표준입니다. - MPEG 7 : 웹상에서 오디오및 비디오 데이터들을 색인하고 검색할수 있게 하는 기술입니다. 예를 들어 여러분이 웹상에서 시계를 손목에 찬 남자가 걸어가고 있는 장면을 보고 있다고 가정해봅시다. 그때 그 사람의 손목시계를 클릭하는 순간, 손목시계의 정보가 주루룩하고 나오고 해당 시계회사 웹페이지로 이동합니다. 그런 용도로 쓰기 위해서 만든 동영상 표준입니다. 아직은 실용화 단계라고 할 수는 없습니다. 2. MPEG 의 원리 기본적으로 이 세상의 모든 동영상(영화, 만화, TV, mpeg, 플래시애니 등등)은 사람의 착시현상, 즉 연속적인 정지화상을 보면 마치도 그 속의 주인공들이 움직이는 것처럼 보이는, 바로 그 인간의 시각적 잔상효과를 이용하여 고안된 것입니다. MPEG도 연속된 정지영상이 1초에 수 십장의 정지영상(MPEG에서는 이것을 frame 또는 Picture라고 하지요. 일단 그냥 한장의 스틸사진이라고 보셔도 되겠습니다.) 정보가 보이도록 한 원리에 기반을 둔 것입니다. 그런데 mpeg은 엄청난 정보압축율을 보입니다. 도대체 어떤 원리로 이런 정보 압축이 가능한 것일까요?
공간적 유사성이라는 것은, 바로 JPEG에서 설명했던 그 내용입니다. 즉, 하나의 스틸사진의 부분부분에는 서로 비슷한 색상이 모여있다. 바로 그 내용입니다. 이런 특성을 이용해서 압축을 한 기술이 JPEG이고, MPEG에서도 JPEG기술은 그대로 쓰입니다. 시간적 유사성이라는 것은, 앞에 말씀드렸지만 1초안에 수십장의 연속되는 정지영상이 지나가면, 사람들은 착시현상 때문에 주인공이 움직이고 있다고 착각을 합니다. 즉 앞 영상frame과 바로 뒤 frame, 딱 두 장을 놓고 보면 시간차가 거의 없기 때문에 거의 비슷한 배경에 비슷한 동작일 확률이 매우 높습니다. 이것이 바로 시간적 유사성이고 MPEG기술의 키포인트 입니다. 나 . MPEG의 기본 압축원리 쉽게 이해하기 만일 여러분이 영화감독이고, 야구공이 날아가는 장면을 담은 1초 분량의 영화를 1/10초 간격으로 10장의 필름에 담아서 찍었다고 가정해봅시다. 그러면 총 10장의 스틸사진 필름을 갖고 계시겠죠? 그런데 그 영화를 동영상파일로 만들어서 인터넷으로 누군가에게 보여주고 싶으시다면, 압축을 많이 해야 데이터량이 줄어들고, 그래야 HDD도 적게 먹고, 전송도 빨리 될 것입니다. 그러기 위해서 이제 그 10장을 MPEG으로 압축해보겠습니다. 먼저 10장의 필름사진, 즉 각 프레임을 모두 JPEG으로 압축해봅시다. 앞 글에서 설명드렸다시피 JPEG으로 압축하면, 영상정보의 공간적 유사성에 의해서 대개 10배 이상 데이터량이 줄어들겁니다. 이제 시간적 유사성에 의한 압축을 해봅시다. 만일 연속된 두 장면이 아래 그림과 같다고 가정합시다.
< 그림1, 첫 장면 Frame > < 그림2, 1/10 초 뒤의 두번째 장면 Frame > 그런데 불과 1/10초 사이이기 때문에, 야구공이 이동한 위치만 약간 다를 뿐 배경이나 색상은 거의 비슷합니다. 세번째, 네번째 그림도 비슷하겠지요? 그렇다면, 첫번째 사진만 JPEG으로 압축하고, 두번째 그림부터는 야구공이 어디로 이동했는지만 알려준다면, 엄청난 데이터량이 줄어들 것입니다. 특히 x축, y축으로 각각 얼마만큼 이동했는지에 대한 정보를 영상이론에서는 ‘Motion Vector’라고 부릅니다. 바로 이것이 MPEG 기술의 키포인트입니다.
이런 식으로 첫장면은JPEG으로 압축해서 전송하고, 두번째 장면부터는 단순히 야구공이 이동한 (x,y) 모션벡터 정보만을 전송하도록 하여, 총 데이터량을 현저하게 감소시키는 기술이 바로 MPEG입니다. 조금 어렵게 말하자면, MPEG 비디오의 핵심기술은 이전 frame과 현재의 frame의 차를 이용하여 움직임을 추정하고 이를 보상해주는 ME/MC(움직임 추정/보상, Motion Estimation/Motion Compensation) 기법과 유효 데이타를 최소화하기 위한 변환 부호화인 DCT의 적용이라고 볼 수 있다 어떻게 여러분의 이해를 돕는데 조금이나마 도움이 되었는지 모르겠네요. 이상에서는 너무도 간단한 예를 통해 단순하게 말씀드렸지만, 실제로는 모션벡터를 추정해내거나, 장면(Scene)이 바뀌었을 때를 대비한다던가, 에러로 손실된 정보를 복구해 낸다던가, 다시 압축을 풀어서 재생해내는 MPEG 코딩과정에서 엄청나게 복잡하면서도 효과적인 알고리즘과 첨단 기술들이 다양하게 이용되고 있으며, 지금도 계속해서 개발 중입니다. |
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- [JPEG] 정의 by Sol-t
- 2차원 DCT가 뭐에요? by hansune
- Tiff, Jpeg, Gif 의 차이점 by 깡뉴
# by | 2007/04/20 02:08 | 각종 공학지식 모음 | 트랙백 | 덧글(3)









☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
1)JPEG표준이란?
2)JPEG 2000표준이란?
3)JPEG-LS표준이란?
4)Bi-level영상압축 표준이란?
4개의 질문인데요..그림까지 포함해서 아시면 알려주세요~
알려주실수있을런지.. 메일주소남겨줄게요..길면길수록좋아요~~^^
아시는지 모르시는지 메일로 답좀주세요~~
god1kr2000@nate.com 이거예요~기다리고있을꼐요~
이는 특정 file format을 포함하는 것이 아닙니다. 기술적으로 약간 모호합니다.
encoding은 Sampling → DCT & quantization → Huffman coding(Entropy coding)
이런 순서로 진행됩니다.
JPEG는 용량을 15~20배로 압축할 수 있습니다. (bmp, png등과 비교하여)
이러한 압축은 인체공학적으로, 사람 눈의 약점(색상에는 크게 민감하지 않는다던가)들을 이용합니다.
기술적인 것은 검색해보시기 바랍니다... 이 좁은 데다가 적기 힘드네요.
2) 잘 모르겠네요.
3) JPEG-LS는 Lossless JPEG를 의미합니다. JPEG는 알고리즘 특성상 quality를 극도로 높여도 손실이 생길 수밖에 없습니다. Loseless JPEG는 일반적으로 불리는 JPEG와는 많이 다릅니다. 활용범위도 크지 않다고 보여집니다. 압축률도 2배 정도로 굉장히 압축을 못하는 것으로 알고 있습니다.
4) 잘 모르겠네요.