끄적끄적

파일 압축에 대해

aeongsseu 2023. 9. 12. 00:02

음.. 파일 압축에 대해 적어보려한다. 살짝 POC? 같은 느낌이려나

많이들 신경쓰진 않지만 파일 압축은 꽤나 중요하다.(굳이 zip말고도 jpg 같은거)

예시로 아이폰 11로 찍은 파일의 픽셀이 3024 * 4032이다. 그리고 이를 단순히 rgb값만으로 파일의 크기를 계산한다면

픽셀하나가 16진수3개이므로 24비트 즉 3바이트이고 3*3024*4032 = 36,578,304 바이트 즉 36 메가바이트이다.

하지만 정보에서 사진 크기는 1.4 메가바이트라고 뜬다.

이처럼 만약 파일이 압축되지 않았다면 여러분의 폰은 사진 몇번 찍고(동영상은 더더욱) 외장하드디스크에 전부 사진과 동영상을 옮기는 작업을 했어야 했을거다. 

 

본론으로 돌아가자면 옛날에 프랑스에서 베르티옹 코드라는 것으로 범죄자들을 분류했는데, 각 카테고리 별로 세 범위로 나눠 분류했다.

무슨 말이냐면 대충 카테고리에는 키/손크기/몸무게/큐빗 길이 가 있고 작다/중간/크다 세 범위로 나눠 각 카테고리를 기록해 범죄자를 분류하는 방식이다.

이러면 각 카테고리 별로 정보량이 3씩 곱해지니 카테고리가 4개만 있어도 81가지 종류로 범죄자를 분류할 수 있다.(실제로는 눈과 머리카락의 개수까지 분류해 7을 곱해준다)

카테고리가 늘어날 수록 이 종류 수는 기하급수적으로 늘어난다.

카테고리가 조금만 더 늘어나도 범죄자 한명 당 한 종류에 속하게끔 할 수 있다. 

하지만 문제는 실제로 카테고리가 키/손크기/몸무게 이런거였단거다. (정확히 이 카테고리들은 아니다)

? 키가 크면 당연히 손도크고 몸무게도 무겁지 않겠는가.

즉 각 카테고리 별로 상관관계가 있는것이다.

그래서 종류가 7*3^5 = 1701개 이지만 사실상 최악의 경우 두 카테고리가 아예 묶여버리니 (작은손/짧은 큐빗, 중간손/중간 큐빗, 큰손/긴 큐빗) 7*3^5 = 567 개가 되는 것이다.

실제 크기만큼 정보량을 가지고 있지 않은것이다

이것이 바로 현재 압축의 POC?이다.

일반적으로 풍경사진을 찍었을때 사진위쪽(하늘)은 하늘색 픽셀 옆에 하늘색 픽셀이 있을 확률이 크다.

그리고 사진 아래쪽(잔디)은 초록색 픽셀 옆에 초록색 픽셀이 있을 확률이 크다.

 

픽셀과 주변 픽셀에 대해 상관관계가 있다고는 못하지만 궁극적으로는 정보량의 문제이긴하다.

 

실제로 압축이 어떤 알고리즘으로 수행되는지는 다음에 알아보겠다. 다시 책 읽으러..

위 책의 내용을 참고했다.