본문 바로가기

대학 수업

디지털 카메라, DCT, Quantization, Huffman Encoding - 임베디드 컴퓨터 구조

반응형

시험에 안 나올 거 같은데

디지털 카메라 구성

  • 이미지 캡쳐
  • 이미지 디지털 포맷으로 저장
    • 필름 없음
    • 여러 장의 이미지가 저장된다
      • 저장되는 이미지의 수는 메모리 크기와 이미지 당 소모하는 비트 수에 의해 결정
  • 이미지를 PC로 저장
  • System-on-a-chip
    • 여러 프로세서와 메모리가 하나의 IC 칩에
  • 고용량 플래시 메모리
  • 많이 간략화 된 구성임을 알려드립니다

하드웨어 디자이너의 관점에서 본 디지털 카메라

  • 이미지 처리 및 메모리 저장
    • 셔터가 눌리면:
      • 이미지 캡처
      • CCD(Charge-Coupled Device) 통해 디지털 형태로 전환
      • 압축하여 내부 메모리에 저장
  • 이미지 업로드
    • 디지털 카메라를 PC에 연결
    • 압축된 이미지를 시리얼로 전송하기 위한 특수한 소프트웨어 명령어

Charge-Coupled Device (CCD)

  • 이미지 센서
  • 빛에 반응하는 cell로 이루어진 실리콘 solid-state 장치
  • 빛에 노출되면 각 셀은 전기적으로 충전됨
    • 8비트 값으로 표현된다
    • 0~255, 0은 검정, 255는 강한 빛

Zero-Bias Adjustment

  • Covered Column은 검정 테이프 등으로 가려져있음 => 검정색을 의미
  • 센서 노이즈로 인해 정확히 0 값이 아님
  • 해당 row의 셀 값에서 Covered 된 값을 빼준다
  • covered 된 cell에서 읽힌 값을 Zero-bias Error라고 하며,
  • 이를 통해 전체적인 셀 값을 보정하는 방식을 Zero-Bias Adjustment라고 한다

Compression

  • 더 많은 이미지를 저장할 수 있도록 만든다
  • 이미지를 PC로 옮길 때 더 적은 시간이 걸린다
  • JPEG(Joint Photographic Experts Group)
    • 디지털 이미지를 압축하는 가장 인기있는 표준 포맷
    • 다양한 작동 모드를 제공한다
    • 여기서는 높은 압축률을 위한 모드 사용 (DCT, Discrete Cosine Transform)
    • 이미지 테이터를 8x8 픽셀 블록으로 나눈다
    • 각 블록에 대해 세 가지 과정을 거친다
      • DCT(Discrete Cosine Block)
      • Qunatization
      • Huffman Encoding

DCT

  • 8x8 블록을 Cosine-Frequency Domain으로 변환한다
  • 왼쪽 위 코너 값은 이미지에서 더 중요한 정보를 나타낸다
  • 오른쪽 아래 코너 값은 디테일
    • 이 부분의 정확도를 낮출 수 있고 그렇게 해도 어느 정도 이미지 품질이 유지된다
  • FDCT(Forward DCT) formula
    • C(h) = if (h == 0) then 1/sqrt(2) else 1.0
      • 메인 함수 F(u, v)에서 사용되는 보조 함수
    • F(u, v) = 1/4 * C(u) * C(v) * sum(for x=0..7 y=0..7 Dxy * cos(pi * (2x + 1) * u / 16) * cos(pi * (2y + 1) * v / 16))
      • u: row, v: column
      • 인코딩 된 픽셀 반환
      • Dxy는 원래 픽셀 값 (row x, column y)
  • IDCT(Inverse DCT)
    • 원래 블록으로 복원하기 위해 필요한 함수
    • 이번 예시에서는 다루지 않음

Quntization Step

  • 높은 압축률을 위해 이미지 품질을 낮춤
  • 중요하지 않은 하위 비트를 제거하여 이를 달성
  • Shift Right로 제거 (8비트 -> 5비트)
  • Dequantization은 Shift Left (정보는 이미 손실됨)

Huffman Encoding

  • Pixel Frequencies는 해당 픽셀 값이 몇 개의 픽셀에서 나타났는지를 표시한다
  • 자주 나타나는 값일수록 Huffman Code로 표현할 때 더 적은 비트를 사용한다

  • 8x8 블록을 위 그림과 같이 지그재그 패턴으로 Huffman Code를 참조하여 직렬화한다
  • Huffman Encoding을 하면 더 자주 발생하는 픽셀은 더 짧은 바이너리 코드를 가질 수 있다
  • 시리얼 리스트의 각 픽셀은 Huffman Encoded Value로 변환될 것
  • 이 과정에서 압축되기 때문에 기존보다 짧아진다
반응형