OpenCV - 컴퓨터 비전 개요

2 분 소요

컴퓨터 비전 (Computer Vision):

컴퓨터를 이용하여 정지 영상 또는 동영상으로부터 의미 있는 정보를 추출하는 방법을 연구하여 사람이 눈으로 사물을 보고 인지하는 작업을 컴퓨터가 동등하게 수행할 수 있게끔 만드는 작업.

  • 컴퓨터 비전에서 주로 활용하는 영상 정보: 밝기, 색상, 모양, 텍스처
  • 컴퓨터 비전과 연관된 분야: 수학, 신호처리, 광학, 로복공학, 머신러닝, 컴퓨터과학, 인지과학, 컴퓨터 그래픽스
  • 구현언어: C++, 파이썬 (라이브러리는 C++ 위주로 구현되었기 때문에 최신 C++ 문법과 클래스 및 상속 관계, STL(표준 템플릿 라이브러리)에 대한 이해도 필요하다)
  • 주 활용분야: 스마트폰 카메라의 HDR 및 필터 기능, 제품 검사/측정/불량판정 및 공장 자동화 (머신 비전, Machine Vision), CCTV 활용, 자동차 자동 주행, CPU/GPU 하드웨어 발전, 센서 융합, 딥러닝 등

영상의 구조 및 표현방법

영상의 획득 과정

  1. 피사체로 부터 반사된 빛을 카메라 렌즈를 통해 카메라 내부로 수집.
  2. 렌즈에서 모인 빛이 카메라의 이미지 센서에 닿으면 포토 다이오드가 빛을 전기적 신호로 변환. 빛을 많이 받은 포토 다이오드는 큰 신호를 생성하고 빛을 적게 받은 포토 다이오드는 작은 크기의 신호를 생성 → 명암이 있는 2차원 영상 구성 가능.
  3. 포토 다이오드의 전기적 신호를 아날로그-디지털 변환기(ADC, Analog-to-Digital Convertor)를 통해 디지털 신호로 변환.
  4. 카메라의 ISP(Image Signal Processor)로 디지털 신호를 전달.
  5. ISP에서 화이트밸런스 조정, 색 보정, 잡음 제거 등의 기본 처리를 수행한 후 2차원 디지털 영상 생성.
  6. 생성된 디지털 영상은 곧바로 컴퓨터로 전송되거나 JPG, TIFF 등의 파일 형식으로 변환되어 저장.

영상의 구조

픽셀(Pixel):

  • Picture + Element, **영상을 구성하는 최소 단위. =화소
  • 하나의 픽셀은 하나의 밝기 또는 색상을 표현

이미지는 여러 픽셀들의 집합이며, 동영상은 여러 이미지들을 연속적으로 출력함으로써 구현된다.

0-기반 (zero-based) 표현:

영상은 바둑판처럼 균일한 격자형태로 픽셀들을 배열하여 표현. 이 때, 2차원 xy 좌표를 사용하여 x는 왼쪽에서 오른쪽으로 증가하고, y는 위에서 아래로 증가. 좌표의 시작을 0부터 표현하기 때문에 0-기반 표현이라고 부른다.

수학적으로는 영상을 함수 f로 표기할 수 있으며, (x, y) 좌표에서의 픽셀 값은 f(x, y)로 표현한다.

행렬 (Matrix) 표현:

영상은 2차원 평면 위에 픽셀 값이 나열된 형태이기 때문에 2차원 행렬로 표현할 수도 있다. 행 개수가 M이고 열 개수가 N인 행렬의 각 원소는 x,y 좌표와 마찬가지로 y좌표에 해당하는 행 번호 j와 x좌표에 해당하는 열 번호 i를 가지게 된다.

0-기반 표현과의 차이점은, 가로x세로 x,y 순으로 표현하는 것과 다르게 행렬은 행과 열, M x N 순으로 표현하며 행 번호와 열 번호가 0에서 시작하지 않고 1부터 시작하는 형태로 표기된다.

그레이스케일 영상 & 컬러 영상

그레이스케일 영상 (grayscale image)

흑백 사진처럼 오직 밝기 정보만으로 구성된 영상. 그렇다고 2톤으로 표현된 것은 아니며, 밝기 정보를 256단계로 구분하여 표현한다.

그래서 하나의 픽셀은 0부터 255 사이의 정수 값 (그레이스케일 레벨, grayscale level)을 가지며, 0은 가장 어두운 검은색을 표현하고 255는 가장 밝은 흰색을 표현한다.

트루컬러 영상 (truecolor image)

컬러 사진처럼 다양한 색상을 표현할 수 있는 영상. 과거에는 256개 이하의 색상으로 구성된 컬러 영상과 구분하기 위해 트루컬러라는 표현을 썼지만, 최근에는 그냥 컬러 영상이라고도 부른다.

Red, Green, Blue 세 개의 생상 성분 조합으로 픽셀 값을 표현. 각 색상 성분은 0부터 255 사이의 정수 값으로 현되며, 0은 해당 색상 성분이 전혀 없음을 255는 해당 색상 성분이 가득 차 있음을 의미한다.

영상 데이터의 자료형

그레이스케일 영상의 픽셀은 그레이스케일 레벨 하나로 표현되고, 트루컬러 영상의 픽셀 하나는 R, G , B 색상 성분 값 세 개를 이용하여 표현이 가능하다. 이 때 각 그레이스케일 레벨 또는 색상 성분 값은 unsigned char 자료형을 사용하여 저장된다.

unsigned char 자료형은 1바이트의 크기를 가지며 부호 없는 8비트 정수 값, 즉 0부터 255사이의 정수를 저장할 수 있다. 그런데 각 운영 체제 및 라이브러리 별로 unsigned char 자료형 이름을 다르게 재정의하여 사용한다: 윈도우 운영체제에서는 BYTE, 리눅스에서는 uint8_t, OpenCV 라이브러리에서는 uchar 라는 이름을 사용한다.

8비트 unsigned char 외에도 영상 데이터를 저장하는 자료형들이 다음과 같이 존재한다:

1

댓글남기기