안경잡이개발자

728x90
반응형

● 이미지 압축

 

  이번 시간에는 이미지 압축에 대해서 소개하는 시간을 가지겠습니다. 이미지 압축이란 기존의 큰 용량의 이미지를 압축하여 누구나 쉽게 사용할 수 있도록 한다는 것에 의의를 두고 있습니다. 그 전에 이미지의 디지털화와 이미지 필터링에 대해서도 배우는 시간을 가지겠습니다. 기본적으로 아날로그 이미지는 픽셀들로 구성된 디지털 이미지로 변환을 해야만 컴퓨터에서 처리가 가능합니다. 이를 위해 표본화(Sampling)과 양자화(Quantization) 과정을 거치게 됩니다.

 

 - 표본화(Sampling)

 

  표본화는 이미지의 위치 정보를 디지털 데이터로서 정하는 것을 말합니다. 표본점은 픽셀로서 표현이 되기 때문에 표본화를 쉽게 말해 '이미지를 픽셀단위로 쪼개는 것'이라고 할 수 있습니다. 그 간격을 적게 할수록 고해상도이고 간격이 클수록 저해상도가 되는 것은 당연하겠습니다.

 

 - 양자화(Quantization)

 

  양자화 '연속적인 색상의 값을 이산적인 값으로 변환하는 것'을 의미합니다. 표본화 과정에서 표본 위치를, 양자화는 이 위치에서의 색상 값을 결정합니다. 각 화소의 밝기 또는 색을 숫자로 표현할 수 있습니다. 일반적으로 흑백 사진은 8 bit로 256 레벨, X선 이미지는 10bit로 1024 레벨로 구성합니다. 다만 양자화를 할 때 양자화 에러(Quantization)라고 하는 오류가 발생할 수 있습니다. 이는 양자화 레벨이 불충분할 때 발생하며 '계단현상'이 나타날 수 있게 됩니다.

 

  이제 이미지 필터링에 대해서 알아보도록 하겠습니다. 이미지 필터링이란 '기본 이미지에 임의의 변환을 가하여 특수한 효과를 얻는 것'을 의미합니다. 카메라 등에서는 매우 어렵거나 불가능한 효과들이 필터링을 통해서는 쉽게 가능합니다. 특수 효과에만 그 쓰임이 국한되는 것이 아니라 필터링을 이용해 잡음이나 왜곡으로 인해 변형된 이미지를 원래의 품질로 복원시킬 수도 있습니다.

 

 1) 윤곽선 추출 필터(Edge Detection) 

 

  이미지의 그레이 레벨이 급격하게 변하는 부분을 감지하여 표시합니다.

 

 

 

 2) 평균값 필터(Average Filter)

 

  이미지의 각 픽셀에서 일정한 주위의 픽셀 값의 평균치를 구하며 현재 픽셀 값을 그것으로 대체하는 필터입니다.

손으로 문지른 것처럼 흐려지는 효과가 있으며 잡음을 감소시키고 경계를 흐릿하게 할 수 있습니다.

 

 

 

 3) 밝기 조절 필터(Brightness Filter)

 

  이미지의 밝기 값을 변경시키고자 할 때 사용하며 픽셀 값이 작을수록 어둡고, 클수록 밝으므로 전체적으로 일정 값만을 곱하여 처리합니다.

 

 4) 예술적 필터(Artistic Filter)

 

  예술적인 효과를 나타낼 수 있는 다양한 필터가 개발되었습니다. 유화나 수채화 효과, 연필로 스케치한 효과, 찢어붙이기 효과, 모자이크 효과,

나이프 유화 등 각종 붓이나 물감에 따른 효과를 표현할 수 있습니다.

 

 

 5) 히스토그램 평준화(Histogram Equalization)

 

  한쪽으로 밀려있는 히스토그램을 전체적으로 넓게 분산되도록 합니다. 즉, 이미지에서 명암도에 따른 픽셀의 수를 고르게 분포시키는 기법입니다.

어두운 이미지는 전체적으로 밝아지고, 밝은 이미지는 전체적으로 어두워져서 명암차이가 쉽게 구분됩니다. 이미지의 밝고 어두운 부분이 거의

균등하게 분포되도록 할 수 있습니다.

 

 

  이제 데이터 압축에 대해서 알아보도록 하겠습니다. 데이터 압축의 목적저장공간의 절약적인 측면뿐만 아니라 빠른 전송을 위하는 것에 있습니다. 이미지의 데이터 용량 크기 줄이는 방법은 다양합니다. 예를 들어 한 화소 당 데이터의 양을 줄이는 방법, 이미지를 구성하는 화소의 수를 줄이는 방법, 그리고 데이터를 압축하는 방법이 있습니다. 화소 당 데이터의 양을 줄이는 방법은 미묘한 농도의 화상을 표현이 어렵게 된다는 단점을 초래합니다. 그래서 자주 쓰이는 색으로만 구성된 팔레트를 사용하기도 합니다. 그리고 이미지를 구성하는 화소의 수를 줄이는 방법은 섬세한 선을 표현하기 어려워지며, 모자이크 현상이 발생할 수 있게 됩니다. 마지막으로 데이터를 압축하는 방법이 있을 수 있습니다. 이 방법은 화상의 변질을 최소화하면서 데이터 크기를 축소할 수 있습니다. 시각적인 영향이 적은 색상 영역에서의 정보량을 축소하는 JPEG 압축 방식과 이웃한 화소들이 같은 값을 가질 때 이들을 압축하는 GIF 압축 방식이 있습니다.

 - GIF 압축

  GIF 압축 방식은 이미지 파일 전송 시간을 줄이기 위해 개발되었습니다. GIF 압축 방식은 RLE​(Run Length Encoding) 방식을 응용한 알고리즘을 채택합니다. RLE란, 값은 값이 몇 번 반복되는가를 나타냄으로써 압축하는 방식입니다. 예를 들어 ABBBBBBBBA의 경우 A1B8A1와 같은 식으로 표현하는 것입니다. GIF는 수평으로 데이터를 읽으며 압축을 수행하기 때문에, 수평으로 같은 색을 갖는 이미지의 경우 압축 효과가 더욱 큽니다. 결과적으로 GIF 압축 사진은 사진 이미지보다는 그래픽에 더 높은 압축률을 보이며 더 많이 사용된다고 할 수 있습니다.

 - JPEG 압축

  특별히 컬러 사진의 압축을 위하여 1992년 국제 표준으로 JPEG 알고리즘이 확정되었습니다. JPEG에는 다양한 압축 모드가 있는데, 그중 무손실(Loseless) 압축은 X-레이나 CT사진에서와 같이 픽셀 하나하나가 중요한 경우에 사용됩니다. 손실(Lossy) 압축은 JPEG에서 일반적으로 사용되는 방식입니다. 보통 24비트 컬러를 사용하며, 압축 특성으로 인해 일러스트레이션을 압축할 경우 색 번짐 현상이 나타날 수도 있습니다. JPEG2000 사양에서는 점진적인 압축, 무손실 압축 높은 압축효율, 대중 해상도 등의 특성을 포함합니다. JPEG의 압축 과정은 아래와 같습니다.

​ 1) RGB 모델에서 YIQ 모델로 변환합니다.

​  인간의 시각이 색상보다는 화상의 밝기에 더 민감하다는 원리에 착안하여 Y에 대하여 더 정교하게 압축하기 위해서 RGB 모델을 행렬의 곱을 이용해서 YIQ 모델로 변환합니다.

 2) YIQ의 매크로 블록화

  이미지를 미리 정해진 크기의 16 X 16 픽셀영역으로 나눕니다. Y 매크로 블록​은 그대로 두고 I와 Q 매크로 블록은 다시 한 픽셀씩 뛰어넘어 8 X 8 픽셀 크기로 표현합니다. 그 이유는 인간이 위에서 말했듯이 화상의 밝기(Y)에는 민감하나 색상(I와 Q)에는 덜 민감하기 때문에 서브 샘플링을 통해 표본화(Sampling)을 줄이기 위해서입니다.

 3) 매크로 블록을 8 X 8 블록화​

  JPEG 압축은 8 X 8 픽셀 블록 단위로 나누어 압축을 수행합니다. 따라서 Y, I, Q 매크로 블록은 각각 4개, 1개, 1개의 8 X 8 픽셀 블록단위로 나누어집니다.

 4) DCT 변환

  DCT 변환은 2차원 평면공간의 픽셀값을 2차원의 주파수 정보로 푸리에 변환(Fourier Transform)하는 과정입니다.​ 이 과정을 거치면 인간의 시각에 민감하게 반응하는 부분과 그렇지 않은 부분을 구분할 수 있게 됩니다. DCT 변환을 거치면 64개의 DCT 계수를 얻게 되는데, 이 중에서 가장 처음에 얻는 값 B(0, 0) DC 계수라고 하며 8 X 8 픽셀 블록의 평균값을 나타내고 나머지 63개를 AC 계수라고 하며 DC 계수와의 차이값을 나타냅니다. 이 64개의 DCT 계수를 8 X 8 블록의 형태로 배열하는데, DC 계수는 제일 왼쪽 위에 위치합니다. 왼쪽 위가 가장 낮은 주파수의 DCT 계수가, 오른쪽 아래로 갈수록 높은 주파수의 DCT 계수가 위치하게 됩니다. 인간의 시각은 저주파수에는 매우 민감하지만 고주파수에는 민감하게 반응하지 않는 성질이 있습니다. 따라서 이미지를 압축할 때 높은 주파수대는 이미지 인식에 큰 영향을 미치지 않는 부분으로 이 부분을 더 압축하더라도 이미지의 질에는 큰 문제가 없습니다.

 5) 양자화

  양자화란 인간의 감각 능력으로는 구별하기 힘든 범위 내에서 DCT 계수를 정수로 나누어 반올림하는 과정입니다. 이 때 인간의 눈이 민감하게 반응하는 낮은 주파수는 작은 상수로 나누어 원래 값과 큰 차이가 없도록 하며, 높은 주파수는 원래 값과 어느 정도 차이가 나더라도 잘 인식하지 못하기 때문에 큰 수를 사용하여 나누게 됩니다. 여기서 가장 많은 데이터 압축이 일어납니다.

 6) 지그재그 스캐닝

  양자화를 거친 뒤 데이터에서 DC 계수에 대하여 이전 블록의 DC 계수와 차를 계산하여 그 결과를 저장합니다. 그런 뒤에 계수를 지그재그 형태로 읽어 일차원 형태로 배열합니다. 이러한 형태로 읽어들이면 낮은 주파수의 계수는 앞쪽에, 높은 주파수의 계수는 뒤쪽에 위치하게 됩니다.

 7) 엔트로피 코딩

  JPEG 알고리즘의 마지막 단계로 무손실 압축을 사용하여 최종 압축을 수행하는 과정입니다. 엔트로피 코딩에는 RLE 방식과 허프만 코딩의 두 가지 방법이 있는데 보통 허프만 코딩(Huffman Coding) 방식을 많이 사용합니다.

728x90
반응형