computer science

[MultimediaSystem] Image Compression & Image Processing

갬짱 2024. 6. 23. 23:28

 
참고자료 : MultimediaSystemBook_20230424, 박규식교수님 수업자료
 


 

Image compression

  • 이미지 압축의 목적 : 저장비용(cost for storage)과 전송비용(cost for transmission) 줄임
  • 이미지 압축의 종류 :
    • 비손실 압축(Lossless) : 손실은 없음, 압축률(compression ratio)가 낮다 / PNG, PCX
    • 손실압축(Lossy) : 허용가능한 손실, 압축률이 높다 / DCT, JPEG, JPEG2000
  • 주파수 영역에서의 분석( 이미지압축 프로세스의 필수과정 )기본적으로 일반 데이터에 대해서 Time-domain waveform( time-amplitude )을 저장 → FFT알고리즘을 적용하여 Frequency-domain spectrum( frequency(Hz)-magnitude )을 도출
  • 이미지 인식 = 공간주파수 분석( spatial frequency )
    : 픽셀단위의 2D상 이미지에서 배경은 낮은 주파수요소로, 경계선은 높은 주파수 요소로 인식

 


 

DCT( discrete cosine transform )

: 이미지의 픽셀 데이터를 주파수 데이터로 변경 ( Time-frequency transform = Spatial-frequency transfrom ) ⇒ DCT spectral coefficients( 주파수 성분들 ) 도출하는 일종의 압축 알고리즘, JPEG 압축과정의 핵심 알고리즘
 

  • Energy compation: 대부분의 에너지(90%)는 저주파영역(low freq.area)에 집중되더있음 & 고주파 영역(high freq.area)에는 적게 집중
  • Bit allocation : 이러한 에너지분포에 따라 비트를 할당높은 주파수, 작은 에너지에 더 적은 비트 할당 ⇒ 최종적으로 비트수를 아낌 = 즉 낮은 주파수, 큰 에너지에 더 많은 비트 할당( 모두 동일한 24bit할당X )
  • zigzag pattern read로 나열 = 저주파에서 고주파 성분값을 나열

 

 

DCT를 취하였을때,

DC성분 : 주파수가 0일때, 맨왼쪽 성분 ↔ AC성분 : 주파수가 0이상, 이외성분
DC에서 AC오른쪽 하단으로 내려갈수록(주파수가 높아질수록) 픽셀값(부호무시한 크기값=절대값)이 점점 낮아짐

 
 


 

JPEG

1992년 표준화된 압축알고리즘( ISO/IEC JTC1 SC29 WG1 )으로 이미지 데이터를 약 10:1 정도로 압축이 가능하다.
 

[  JPEG Encoder  ]

:: hybrid coding(혼합코딩) = DCT coding + DPCM, RLC, Entropy coding
 

 
(1) Image preparation

  • RGB color model → YCbCr color model 변환
  • 각 채널을 MB(Macro block)단위로 표현 (8X8)

(2) DCT : 8X8 MB단위 spatial-domain pixels(f) ⇒ 8X8 frequency-domain pixels(F)
     (ex) DC값인 F(0,0) => 235.6

각 MB를 주파수값으로 변환하는 일종의 수식

 
 
(3) Quantization
Round ( DCT coefficients/quantization table ) ⇒ Quantized DCT coefficients도출
: 저주파값들은 큰 값으로 & 고주파값들은 작아지거나 0으로 수렴
 

  • Quantization table( 나누는 값 ) : 압축비율을 조정하는 핵심역할!
    Q.table의 값이 커짐 = 높은 압축률 & Q.table의 값이 작아짐 = 낮은 압축률( 이미지 quality는 좋음 )
  • DC영역의 값이 상대적으로 작음 → 고주파영역의 값으로 갈수록 값이 커짐
  • Quantized DCT coefficients : DC요소에 가장 큰 값, AC요소는 고주파로 갈수록 값이 점점 작아짐(0에 수렴)

(ex) round(-415.38/16)=-26 & round(-30.19/11)=-3

 
 
(4) ZigZag scan
: Quantized DCT coefficients의 일차원화 / 2D Quantized DCT(8X8) ⇒ 1D vectors(1X64)

 
 
(5) DPCM coding for DC & RLE(RLC) coding for AC

  • Quantized DCT coefficients = 1 DC + 63 AC
  • DC는 DPCM( different PCM ) coding : 각 MB단위의 DC값이 유사하다면 이웃한 MB들의 차이만 코딩( 기준 DC는 원본값 그대로 코딩 )
45, 54, 48코딩( 8bit ) -->> 45, 9, -6코딩(2~3bit), 부호무시
  • AC는 RLE( Run length encoding )
    AC값들은 반복되는 숫자가 많음 → 반복숫자를 counting하여 코딩, bit saving!

 
(6) Entropy coding : Huffman coding을 수행
 
(7) 최종결과물 :  Data(압축 데이터, binary bit) + header( n번째 MB ) + tables( Q테이블, Entropy tables ) 
 
 

[  JPEG Decoder  ]

: JPEG Encoder와 반대로 동작

  • Sequential mode : 순차적으로 압축된 이미지를 디스플레이
  • Progressive mode : 전체적으로 압축된 이미지 디스플레이, 해상도가 낮은 것부터 시작해서 높은 것으로 디스플레이

 
 


 

JPEG 2000

  • JPEG보다 높은 압축률, 높은 품질 ⇒ 그럼에도 JPEG이 주류로 이용
  • JPEG은 DCT기반 ↔ JPEG2000은 wave-let기반( 더 나은 사양의 하드웨어(프로세서)가 요구됨, 벤더사들의 플랫폼 변경이 요구됨 )

 


 

Image Processing

 
Post correction( 후보정 ) : 경계선강화, 잡음제거, 밝기/색상 변경의 작업 → 다양한 기술과 알고리즘이 사용됨

  • MATLAB의 IPT( image processing toolbox : 이미지 분야에서 사용되는 빌트인 라이브러리들 )을 적절하게 활용

 
(1) Histogram equalization = 대비개선

  • Histogram : 각 픽셀값(밝기)의 빈도수를 표현( imhist ), grayscale = 0~255
  • 어두운 이미지( low key ) : 왼쪽 부분에 분포 ↔ 밝은 이미지( high key ) : 오른쪽 부분에 분포
    ⇒ 적절한 대조(contrast)가 필요 ( 사물식별을 수월하기위한 밝기, 색상의 차이 )
  • Histogram equalization : 히스토그램의 분포를 균일하게 함 ⇒ 이미지의 대조높임( histeq )
  • True color img(RGB)의 대비개선
    • 1) 채널별로(R, G, B) 분리하여 equalization을 실행하고 통합 → 균형이 망가짐

    • 2) RGB → HSV or YCbCr로 transform( rgb2hsv(w) ) → luminance채널(V, Y)에 equalization을 실행하고 통합( histeq(w(:,:,3)) )
      명도채널만 균등화 → 원본이미지의 색상균형을 유지하면서 대비를 향상

 
 
(2) Spatial filtering ( convolution ) : 특정 필터의 적용 -> 이웃한 픽셀들의 가중합( weighted sum )

  • element & element multiplication → sum :: 맨왼쪽부터 시작하여 오른쪽으로 shift하며 가중합 연산

 
 
weight = mask = filter = kernel = template 의 종류

  • LPF( low pass filter ) : 이미지의 저주파 성분(배경)만 통과, 고주파 성분(경계, 거친 잡음)은 제거
    ⇒ blurring( 경계선이 제거 ), 부드럽고 따뜻한 느낌고주파 성분을 평균값으로 바꾸는 효과 = 픽셀간 차이를 완화(평균화)

    이때 필터의 계수값의 총합은 1을 유지한다( 픽셀크기에 따라 정해짐 : nxn은 모두 1/nxn )
  • HPF( hig pass filter ) : 이미지의 고주파 성분(경계, 잡음)만 통과, 저주파 성분(배경)은 통과
    ⇒ sharpening( 경계선 강조 ), 선명해짐 

이때도 계수값의 총합이 1을 유지한다 : -1을 채우고 +양수

 

  • imfilter( 이미지, 정의한 필터 ) : 해당 이미지에 필터를 씌우는 MATLAB 함수
  • 필터값은 계수의 합이 1이 된다 = 필터링된 값이 범위초과하는 것을 막음 = energy preservation

 
 
(3) Noise filtering

  • Noise : salt&pepper( 흩어진 노이즈 ), Gaussian noise( 문드러진 효과 )
    => imnoise함수로 인위적으로 생성가능
  • median filter : 각 픽셀값을 읽어 순서대로 sorting → 중간값(median)으로 대체 ⇒ salt&pepper 노이즈를 필터링
    <-> mean filter : 각 픽셀값을 읽어 평균값(mean)으로 대체= LPF

 
 
(4) Edge detection : 상당한 변동값( 경계값 )을 감지 = 일종의 HPF

  • 다양한 알고리즘을 이용하여 진행가능 -> edge( w, ‘Sobel’ ); edge( w, ‘Prewitt’ ); edge( w, ‘Roberts’ );

 
(5) interpolation : 이미지 크기의 확대 → 공백부분( unknown pixels )을 임의값으로 채움
     +) imresize( 이미지, 몇배수, 알고리즘 ) : imresize( w, 2, ‘nearest’ ); imresize( w, 4, ‘bilinear’ );

  • Nearest neigbor : 간단하게 가장 근접한 이웃의 픽셀값을 취함
  • Bilinear : 인접한 2X2픽셀들의 거리비율(distance ratio)로 새로운 값을 추정
  • Bicubic : 인접한 4X4픽셀들의 거리비율(distance ratio)로 새로운 값을 추정

 
 
(6) Image rotation & reflection

  • imrotate( 이미지, 각도 );
  • flipud( 이미지 ) : 위아래 뒤집기 / fliplr( 이미지 ) : 좌우뒤집기