OpenCV - 컴퓨터 비전 개요
컴퓨터 비전 (Computer Vision):
컴퓨터를 이용하여 정지 영상 또는 동영상으로부터 의미 있는 정보를 추출하는 방법을 연구하여 사람이 눈으로 사물을 보고 인지하는 작업을 컴퓨터가 동등하게 수행할 수 있게끔 만드는 작업.
- 컴퓨터 비전에서 주로 활용하는 영상 정보: 밝기, 색상, 모양, 텍스처
- 컴퓨터 비전과 연관된 분야: 수학, 신호처리, 광학, 로복공학, 머신러닝, 컴퓨터과학, 인지과학, 컴퓨터 그래픽스
- 구현언어: C++, 파이썬 (라이브러리는 C++ 위주로 구현되었기 때문에 최신 C++ 문법과 클래스 및 상속 관계, STL(표준 템플릿 라이브러리)에 대한 이해도 필요하다)
- 주 활용분야: 스마트폰 카메라의 HDR 및 필터 기능, 제품 검사/측정/불량판정 및 공장 자동화 (머신 비전, Machine Vision), CCTV 활용, 자동차 자동 주행, CPU/GPU 하드웨어 발전, 센서 융합, 딥러닝 등
영상의 구조 및 표현방법
영상의 획득 과정
- 피사체로 부터 반사된 빛을 카메라 렌즈를 통해 카메라 내부로 수집.
- 렌즈에서 모인 빛이 카메라의 이미지 센서에 닿으면 포토 다이오드가 빛을 전기적 신호로 변환. 빛을 많이 받은 포토 다이오드는 큰 신호를 생성하고 빛을 적게 받은 포토 다이오드는 작은 크기의 신호를 생성 → 명암이 있는 2차원 영상 구성 가능.
- 포토 다이오드의 전기적 신호를 아날로그-디지털 변환기(ADC, Analog-to-Digital Convertor)를 통해 디지털 신호로 변환.
- 카메라의 ISP(Image Signal Processor)로 디지털 신호를 전달.
- ISP에서 화이트밸런스 조정, 색 보정, 잡음 제거 등의 기본 처리를 수행한 후 2차원 디지털 영상 생성.
- 생성된 디지털 영상은 곧바로 컴퓨터로 전송되거나 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 외에도 영상 데이터를 저장하는 자료형들이 다음과 같이 존재한다:
댓글남기기