이미지를 어떻게 표현하는지에 대해 알아보자.
이미지는 빛감지 센서로 빛을 감지해서 이 정도(Intensity)를 신호로 나타낸다.
ISP(Image Signal Processor)은 ADC(Analog to Digital Convertor)을 통해 사진 파일로 저장한다.
이미지는 좌측 상단을 (0, 0) 좌표라고 잡즌ㄴ다.
아래로 내려갈수록 x값이, 오른쪽으로 갈수록 y값이 증가하는 방향이다.
2차원의 축으로 위에 설명한 f(0,0) f(0, 1), ... f(0, N - 1)로 표현하는 것
2차원의 값을 1차원으로 값 1개로 표현하는 것이다.
밝기는 아까 ADC에서 Binary Code로 바뀐다고 하였다.
즉, 밝기는 2의 배수의 강도로 나타낼 수 있다.
비트가 주어지면 가지의 Intensity를 표현할 수 있는 것이다.
대부분 8bit로 밝기를 표현하며, 최근 ULED TV같은곳은 10bit도 사용한다.
또한 이 밝기는 0과 1사이의 값으로 Normalize되기도 한다.
OpenCV 같은 영상처리 라이브러리에선 밝기가 8bit이므로 이와 똑같은 형태인
uchar(unsigned char)을 사용하기도 한다. 그 이상의 bit는 uint16
사실 이 색깔은 RGB로 표현하기 때문에, 데이터의 종류는 여러개를 가져야한다.
R 150, G 150, B 0이면 노란색으로 150의 밝기를 나타낼 것이다.
이렇게 R채널, G채널, B채널 3가지를 보통 가지는 것이 대부분이다.
영상처리로 선을 감지하기도 하고, 이 선이 모여 물체와 물체를 구분하기도 하고,
나중에는 파이썬으로 Yolo모델 같은 것으로 물체가 무슨 형태인지, 무엇인지를 구분하기도 한다.
선을 감지하거나, 물체와 물체의 경계를 구분하는 것은 인공지능없이 영상처리만으로도 가능하다.
그래서 파이썬자체에서 영상처리를 다룰 수 있도록 OpenCV를 많이 사용한다.
OpenCV에서는 이미지를 3차원 배열에 저장한다.
[세로축][가로축][채널]
로 사용하며, 채널은 B, G, R순으로 0, 1, 2로 매핑되어 있다.
만약 1920*1080
의 이미지를 저장해서
OpenCV의 변수로 저장하면(cv.imread()
) (1080, 1920, 3)의 크기를 가지는 것이다.
유채색의 사진을 무채색인 회색조의 사진으로 바꾸려면 어떻게 해야할까?
의 식으로 회색조의 Intensity value를 가진다.
왜 이식이 나왔냐?
시신경 분포여기서 나온 R, G, B를 감지하는 간상세포의 인식범위와 그 개수에 의해 결정되었다.