기술면접 준비

JPG와 PNG 차이점

Woonys 2022. 3. 20. 19:13
반응형
JPG와 PNG의 가장 큰 차이점은 각각 사용하는 압축 알고리즘이 다르다는 점입니다.

JPG는 손실 압축 알고리즘(lossy compression algorithm)을 사용합니다. 파일 크기를 줄이기 위해 이미지 정보 중 일부를 버립니다. 반면 PNG는 무손실 압축 알고리즘(Lossless compression algorithm)을 사용합니다. 이로 인해 나타나는 차이점은 파일의 용량 및 화질입니다.

JPG는 PNG에 비해 더 작은 파일 크기를 가질 수 있으나 그만큼 화질에서 손해를 보기 때문에 용량이 중요할 때는 JPG를, 용량보다 품질이 중요할 경우에는 PNG를 사용하는 것이 좋습니다. (추가로, 투명 배경이 필요할 경우에도 PNG를 사용합니다.)

 

참고: 이미지 파일 형식(Image file format): 이미지 데이터를 저장하고 표현하기 위한 방식

  1. 래스터(Raster) 방식: 이미지를 색상 정보가 담긴 픽셀로 표현 - JPG, PNG
    1. 픽셀 수 많을 수록 화면 질 향상되나 그만큼 용량이 커짐.
    2. 화질 손실 없이 이미지 사이즈를 확대/축소시키는 것이 불가능
  2. 벡터 방식: 수학식으로 이뤄진 점, 직선, 곡선, 다각형 등으로 표현
    1. 확대 및 축소에 자유로우나 색상의 자연스러운 변화 혹은 세밀한 표현이 어려움
    2. 복잡한 계산이 필요한 이미지의 경우 컴퓨터에 많은 연산 부담을 준다.

 

꼬리 1: 손실 압축과 비손실 압축은 무엇인가요?

손실 압축

 손실 압축은 사람이 인지하지 못하는 영역의 주파수인 고주파 정보를 이미지에서 제거함으로써 용량을 줄이는 방식입니다. 이 주파수 영역대를 낮은 쪽으로 더 크게 잡을수록 이미지 용량이 더 줄어들지만 그만큼 사람이 인지하는 영역의 정보까지 제거될 수 있어 화질이 나빠집니다.

 

이미지와 주파수 사이 상관관계: 이미지를 주파수로 변경해보면

    • 전체적인 구조: 저주파 성분 → 픽셀 간 색상 및 밝기 변화가 크지 않을 때 ⇒ 사람이 인지하기 쉬운 영역
    • 디테일한 변화: 고주파 성분 → 픽셀 간 색상 및 밝기 변화가 클 때 ⇒ 사람이 인지하기 어려운 영역

이러한 특징을 이용해 고의적으로 고주파 성분 중 일부를 제거하는 것.

 

무손실 압축

무손실 압축은 압축된 상태에서도 디지털 원본과 100% 똑같은 형태를 유지하는 압축 방식입니다. DEFLATE라는 무손실 압축 알고리즘으로 압축하는데, 반복 표현되는 정보를 최대한 줄이는 방식으로 비슷한 값이 자주 나타날수록 더 적은 비용으로 압축할 수 있습니다.

 

꼬리 2: 손실 압축과 비손실 압축은 구체적으로 어떻게 동작하나요?

 

손실 압축 알고리즘: RGB to YCrCb → 다운샘플링 → DCT(이진코사인변환) & 양자화 → 지그재그 스캔 → 허프만 코딩

 

손실 압축 알고리즘은 먼저 색 공간 변환 과정을 거쳐 RGB를 YCrCb 성분으로 변환합니다. 색 공간을 변환하는 이유는 다음 과정인 다운샘플링을 위해서입니다. 사람의 시신경은 이미지 정보를 받아들일 때 색 정보보다 밝기 정보를 중요하게 받아들입니다. 따라서 RGB에서 색차인 Cb,Cr 성분과 밝기 Y 성분을 분리할 수 있는 색 공간으로 전환한 뒤, 다운샘플링 과정을 거쳐 색차 성분 정보를 제거합니다.

이어서 이진코사인변환을 수행합니다. 채널별로 구간을 나눈 뒤 이미지를 주파수로 변환합니다. 이어서 양자화를 통해 고주파 성분을 제거하고, 지그재그 스캐닝으로 이미지를 한 줄로 만든 뒤 허프만 인코딩으로 빈도수 별로 비트를 부여해 압축합니다.

 

 

1. 이미지 색 공간 변환: RGB 색 공간에서 YCbCr 색 공간으로 전환한다.

 

Y 성분은 픽셀의 밝기를, Cb와 Cr은 색차 성분을 나타낸다. 이렇게 분리하는 이유는 아래 있을 다운 샘플링을 위해서다.

 

2. 다운샘플링: 색과 관련된 채널은 밝기 채널에 비해 덜 중요하므로 해당 정보를 제거함으로써 용량을 줄이는 다운샘플링을 수행한다.

 

이 작업의 전제는 사람의 시각 정보 인식 방식에 근거한다. 사람의 시신경은 색 정보보다 밝기 정보를 더 중요하다고 판단한다. 따라서 밝기 정보(Y)는 그대로 두고 색차 정보(Cb,Cr) 크기를 줄여 용량을 압축한다. RGB는 색차와 밝기가 섞여있기 때문에 1의 색 공간 변환 과정이 필요한 것이다.

 

다운샘플링은 J:a:b 비율로 픽셀을 제거한다. J는 픽셀 블럭의 가로 길이(세로 길이는 2로 고정)를 의미하며 만약 J값이 4면 2 X 4 사이즈의 픽셀 블럭을 옆으로 옮기면서 샘플을 추출한다. JPG의 다운샘플링 비율은 4:2:0으로 정해져있다.

 

 

3. 이진코사인변환(DCT): 각 채널을 8X8 블럭으로 분할한 다음에 각 블럭마다 이진코사인변환을 수행한다. 이진코사인변환은 이미지 정보를 frequency 도메인으로 변환함으로써 변화에 초점을 맞추는 방식으로 이해할 수 있다.

 

왜 주파수로 바꿀까? 주파수로 바꾸면 변화량 혹은 주기와 같은 빈도수를 쉽게 파악할 수 있다. 위에서 언급한 것처럼 손실 압축 알고리즘은 인간이 인지하지 못하는 고주파 성분을 제거함으로써 용량을 줄이는 방식이기에 DCT를 이용해 주파수 도메인으로 변경하면 고주파 성분을 쉽게 제거할 수 있다.

 

 

4. 양자화: DCT 계수를 양자화해서 높은 고주파 신호와 관련된 계수는 대부분 0이 되게 한다.

 

양자화란 일종의 반올림과 같이 근사하는 과정이라 생각하면 된다.

 

5. 지그재그 스캐닝: 2차원 배열에 담겨있는 주파수 계수를 지그재그 순서로 읽어 1차원 벡터 형태로 변환한다.

 

여기서 이렇게 지그재그로 읽어들이는 이유는 벡터의 뒷부분에 최대한 0을 많이 모으기 위함이다. 주파수 도메인을 보면 왼쪽 위를 중심으로 오른쪽 혹은 아래쪽으로 갈수록 높은 주파수 영역에 해당한다. 위에서 양자화를 통해 고주파 성분을 0으로 바꿨으니 지그재그로 읽어들이면 0 성분이 최대한 뒤쪽 끝에 모이게 만들 수 있다. 이렇게 하는 이유는 바로 다음 과정인 허프만 코딩을 위해서이다.

 

6. 허프만 코딩: 엔트로피 부호화 과정으로 데이터가 얼마나 자주 출현하는지 빈도를 파악해 빈도수가 높은 기호에 짧은 접두어 코드를 부여한다. 따라서 많이 사용되는 데이터에 부요하는 코드의 비트 크기가 작을수록 공간이 절약된다.

 

ex) aaaabbbccd 라는 문자열에서 a(4번) b(3번)c(2번) d(1번) 의 빈도를 가진다. 그러면 이 순서대로 짧은 비트를 부여한다.

 

a = 0, b = 01, c = 011, d = 111 이런 식으로 빈도가 높은 문자열일수록 작은 비트를 부여한다. 이를 압축하면 0000010101011011111이 된다.

 

 

무손실 압축 알고리즘: DEFLATE(LZ77 + 허프만 코딩)

 

무손실 압축 알고리즘은 DEFLATE로, LZ77 알고리즘과 허프만 코딩의 조합으로 이뤄집니다. LZ77 알고리즘은 사전(dictionary) 방식의 압축 알고리즘으로 현재 압축하려는 데이터가 이전에 존재했는지 파악해 반복 여부를 표시합니다. 그다음, 허프만 코딩으로 이미지를 0과 1로 부호화합니다. 데이터 문자가 얼마나 자주 출현하는지 빈도를 파악해 빈도수가 높은 기호에 짧은 접두어 코드를 부여합니다. 

 

1. LZ77 알고리즘: 사전 방식 압축 알고리즘

 

현재 압축하려는 데이터가 이전에 존재했는지 파악해 부호화 도중에 새로 나타나는 심볼열을 사전에 기록하고 해당 내용을 다음 부호화에 사용하는 형태.

 

왼쪽 이미지는 우리가 압축하려는 원본 이미지이고 이를 엔트로피 부호화한 게 오른쪽 이미지이다. 파란색은 낮은 정보량을 뜻하고 빨간색일 수록 정보량이 크다는 뜻(용량이 크다는)이다.

왼쪽 위부터 정보를 읽어들인다고 해보자. 맨 왼쪽 위의 까만 공은 가장 처음 등장하므로 사전에 기록되어있지 않아 정보량이 크다.  그런데 한 번 사전에 입력된 정보는 그 이후로 정보량이 낮아진다. 이미 사전에 저장되어 있는 것을 갖다쓰기만 하면 되기 때문.

 

그 다음으로 처음 등장하는 빨간공은 사전에 없던 정보이니 사전에 저장할 때 정보량이 크다. 하지만 역시나 이후부터는 정보량이 낮아진다.

 

 여기서 질문. 그러면 청록색 공이 등장한 시점에서 새로 등장하는 빨간 공은 왜 정보량이 높지? 이미 사전에 저장되어 있지 않았나? 이는 거리가 멀어서라고 하는데, 명확하지 않다. 한 번 더 찾아보기.

 

 

반응형