영상처리 - Ditial Image Reprensentation

milkbottle·2024년 4월 9일
0

영상처리

목록 보기
2/12

Digital Image Representation

이미지를 어떻게 표현하는지에 대해 알아보자.

Image Sensing & Acquisition

이미지는 빛감지 센서로 빛을 감지해서 이 정도(Intensity)를 신호로 나타낸다.

ISP(Image Signal Processor)은 ADC(Analog to Digital Convertor)을 통해 사진 파일로 저장한다.

ADC

  1. Sampling Process
    Continious(연속적 실수전체영역) 시간 -> Discrete(1, 2초 끊어진) 시간
  2. Quantization Process
    Continous(제일어둡다~제일밝다) value -> Discrete(0, 1, ...255) value
  3. Coding Process
    Discrete value -> binary code
    ex) 7 -> 00000111, 16 -> 00010000

Representing Ditial Images

이미지는 좌측 상단을 (0, 0) 좌표라고 잡즌ㄴ다.

아래로 내려갈수록 x값이, 오른쪽으로 갈수록 y값이 증가하는 방향이다.

Coordinate Indexing

2차원의 축으로 위에 설명한 f(0,0) f(0, 1), ... f(0, N - 1)로 표현하는 것

Linear Indexing

2차원의 값을 1차원으로 값 1개로 표현하는 것이다.

  • Column Scan
    열을 먼저 인덱싱을 하는 것
  • Row Scan
    행을 먼저 인덱싱을 하는 것

Intensity Levels

밝기는 아까 ADC에서 Binary Code로 바뀐다고 하였다.

즉, 밝기는 2의 배수의 강도로 나타낼 수 있다.

NN 비트가 주어지면 2N2^N가지의 Intensity를 표현할 수 있는 것이다.

대부분 8bit로 밝기를 표현하며, 최근 ULED TV같은곳은 10bit도 사용한다.

또한 이 밝기는 0과 1사이의 값으로 Normalize되기도 한다.

OpenCV 같은 영상처리 라이브러리에선 밝기가 8bit이므로 이와 똑같은 형태인
uchar(unsigned char)을 사용하기도 한다. 그 이상의 bit는 uint16

Multiple Components Image

사실 이 색깔은 RGB로 표현하기 때문에, 데이터의 종류는 여러개를 가져야한다.

R 150, G 150, B 0이면 노란색으로 150의 밝기를 나타낼 것이다.

이렇게 R채널, G채널, B채널 3가지를 보통 가지는 것이 대부분이다.

OpenCV

영상처리로 선을 감지하기도 하고, 이 선이 모여 물체와 물체를 구분하기도 하고,

나중에는 파이썬으로 Yolo모델 같은 것으로 물체가 무슨 형태인지, 무엇인지를 구분하기도 한다.

선을 감지하거나, 물체와 물체의 경계를 구분하는 것은 인공지능없이 영상처리만으로도 가능하다.

그래서 파이썬자체에서 영상처리를 다룰 수 있도록 OpenCV를 많이 사용한다.

Image Representation

OpenCV에서는 이미지를 3차원 배열에 저장한다.

[세로축][가로축][채널]로 사용하며, 채널은 B, G, R순으로 0, 1, 2로 매핑되어 있다.

만약 1920*1080의 이미지를 저장해서

OpenCV의 변수로 저장하면(cv.imread()) (1080, 1920, 3)의 크기를 가지는 것이다.

Color -> Gray

유채색의 사진을 무채색인 회색조의 사진으로 바꾸려면 어떻게 해야할까?

I=round(0.299×R+0.587×G+0.114×BI = round(0.299\times R+0.587\times G+0.114\times B
의 식으로 회색조의 Intensity value를 가진다.

왜 이식이 나왔냐?
시신경 분포여기서 나온 R, G, B를 감지하는 간상세포의 인식범위와 그 개수에 의해 결정되었다.

0개의 댓글