OpenCV를 활용한 Computer Vision - Computer Vision이란?

Computer Vision

  • Computer Vision
    • 컴퓨터를 이용하여 정지 영상 또는 동영상으로부터 의미 있는 정보를 추출하는 방법을 연구하는 학문
    • 즉, 사람이 눈으로 사물을 보고 인지하는 작업을 컴퓨터가 수행하게끔 만드는 학문
  • 아래 그림과 같이 사과라는 이미지를 컴퓨터가 인식할 수 있게끔 처리하는 과정은 그렇게 쉽지많은 않다. 둥글고 빨간색 부분을 사과라고 인식시킨다면, 예를 들어 신호등의 빨간신호도 사과로 인식하게 될것이다. 그렇다면, 꼭지를 갖고 있는지에 대한 여부도 포함시켜야 할 것이다. 이런 처리를 해주는 것이 쉬운 일은 아니다.

Computer Vision의 예시

  • 이미지를 지칭하는 용어를 보통 영상이라고 하며, 우리가 흔히 이야기하는 동영상은 비디오 또는 moving picture 라고 지칭한다.

Computer Vision과 영상처리의 정의

  • 컴퓨터 비전의 역사는 아래와 같다.

Computer Vision의 역사

  • 컴퓨터 비전과 관련된 분야는 아래 그림과 같으며, 기초적인 선수지식은 선형대수 및 기하학적인 측면을 알고 있는 것이 좋다. 또한, 컴퓨터 사이언스와 접목되며, 딥러닝 또는 머신러닝 분야에서 활용되어 패턴인식의 학문과도 연관이 깊다.

Computer vision 관련 분야

  • 컴퓨터 비전 연구는 이미 우리들 주변에 많이 활용되는 모습에서도 찾아볼 수 있다. 특히 스마트폰으로 사진찍기를 좋아하시는 분들이 많이 사용하는 카메라 어플의 필터들이 이에 해당된다. 최근에는 국내 Naver에서 만든 Snow라는 카메라 어플에서 사용되는 다양한 필터들도 이러한 컴퓨터 비전과 연관된 분야이다. 영상의 Noise들을 제거해주는 Image noise Reduction과 어두운 사진과 밝은 사진을 여러장 찍어서 전체적으로 암부와 명부의 윤곽이 다 잘 보이도록 만드는 High Dynamic Range 사진을 찍는 기술도 있다. 확대를 했을 때 좀 더 선명하게 만들어 주는 Super Resolution같은 기술도 연구가 되고 있다.

컴퓨터 비전 연구 분야 - 01

  • 또한, Object Detection 분야도 다양하게 발전하고 있다. 보행자를 검출하는 거나 아니면 동일한 영상을 다른 영상에 매핑하여 찾아내는 task, 동전을 segmentation을 하여 동전이 몇개 존재하는지를 세는 task, 특정 객체의 윤곽을 따내어 해당 객체가 어떤 사물인지 분류해내는 task도 가능하다.

컴퓨터 비전 연구 분야 - 02

  • 이러한 연구가 진행되면서 최종적으로는 인식을 하는 고차원적인 이해를 필요로 한다. 예를 들어 아래 그림과 같이 도형을 인식하거나, 필기체 숫자를 인식하거나 글자를 찾아내어 글자를 인식하는 OCR분야도 이에 해당한다.

컴퓨터 비전 연구 분야 - 03

  • 컴퓨터 비전의 응용 분야로는 공정분야에서 머신비전을 예로 들 수 있다. 아래 설명과 같이 공장 자동화에서 많이 사용되고 있다. 특히 최근 코로나 관련 검진 키트를 만드는 작업은 불과 몇개월 전까지 사람의 인력이 대다수를 차지하는 공정 과정이었다. 그러나, 컴퓨터 비전 및 기계를 사용하여 여러 과정을 자동화하여 이전과 비교하여 많은 과정들이 편리해졌다.

COVID-19 검진키드에 스마트 공장 사용하니 생긴 일

컴퓨터 비전 응용 분야 - 01

  • 인공지능 서비스 내에서도 영상을 통해 인식하여 처리하는 일들이 많이 개발되고 있다. 자율주행 분야나 무인 편의점 같은 서비스를 예를 들 수 있다.

컴퓨터 비전 응용 분야 - 02

Amazon go

테슬라의 자율주행

참고 자료)

영상의 표현 방법

  • Pixel은 Picture element의 약자로서, Pixel이 바둑판 모영의 격자에 나열되어 있는 형태(2차원 행렬)을 의미한다.
  • 아래 그림 중 맨 왼쪽에 있는 부분은 카메라의 센서를 의미하며 과학적 신호를 전기적 신호로 바꿔주는 역할을 한다. 보통 센서 위에 그림과 같이 R, G, B 필터가 존재하여 이를 통해 입력되는 광학적 신호를 각각 채널별로 갖고있는 부분이 얼마나 있는지를 전기적 신호로 바꿔준다. 전기적 신호로 인해 표현 된 값이 Pixel로 각 채널별 존재하게 된다. 이 3가지 채널을 혼합시켜 우리가 보는 화면이 탄생되어 지는 것이다.

영상이란?

  • 영상의 표현 방법은 크게 2가지로 나누어 질 수 있다. 그레이 스케일(grayscale)영상트루컬러(truecolor)영상으로 나누어 질 수 있는데, 그레이 스케일은 밝기 정보만을 통해 구성하였으며 보통 밝기 성분을 256단계(0~255)로 나누어서 표현한다. 반대로 트루컬러 영상은 R, G, B 각 색상의 조합으로 색을 만들어 컬러로 표현 할 수 있다.

영상의 표현방법 - 01

  • 그레이스케일에 대해 더 설명해보자면, 0이 검정색 255가 흰색으로 값이 높아질수록 밝기가 밝아진다(명도가 높아진다). 1Byte가 표현할 수 있는 경우의 수인 256과 동일하기 때문에 1 Byte를 사용하며,
  • C/C++은 unsigned char라는 자료형을 사용하고, Python에서는 numpy의 unit8을 사용하면 된다.

영상의 표현방법 - 02

  • 트루컬러스케일은 각각의 채널별 R, G, B의 색 성분의 크기를 각각 256단계로 나누어 조합으로 표현하는 것이다. 높은 값을 갖을 수록 해당 채널의 성분을 많이 갖고 있는 것이다.
  • C/C++은 위에서 설명한 방법처럼 unsigned char를 3개 묶어서 사용하는 구조체 또는 클래스, Python은 numpy의 unit8의 구조를 3개 사용하여 튜플로 묶어주거나 numpy.ndarray를 사용한다.

영상의 표현방법 - 03

  • 영상에서 주로 표현되는 자표계는 아래 2가지로 나누어 볼 수 있다. 좌측의 좌표계를 OpenCV에서는 많이 사용하지만 deep learning이나 다른 기계학습에서는 대부분 우측의 좌표계를 많이 사용할 것이다. 그러므로 2가지를 오가며 좌표계를 생각해야 할 것이다. 또한, 협업을 하는 경우에는 알 수 있도록 영상의 크기를 명확히 명시해주는 것이 좋다.

영상의 표현방법 - 04

그레이 스케일 표현방법

  • 트루스케일은 그레이 스케일과 다르게 아래 그림에서의 3가지 채널을 concatnate 시켜 준다. Python 내부에서는 RGB 순이 아니라 BGR순서로 채널이 쌓여있으므로 주의하자.

투르컬러 스케일 표현방법

  • 영상 데이터를 저장하기 위해 필요한 데이터의 크기를 살펴보자. 그레이스케일의 경우 한 Pixel당 1Byte 이므로 단순히 영상의 크기의 용량이 필요하며, 컬러영상의 경우 3채널이므로 영상의 크기에 3을 곱하면 된다.
  • 영상처리에서 처음에 당황스러운 부분이 알고리즘을 조금만 잘못 설정하게 되면, 학습속도가 많이 소요되거나 메모리도 많이 소요되기 때문에, Optimization 같은 부분이라던지 알고리즘의 효율을 상당히 중요시되는 분야이기도 하다.

영상 데이터의 크기

  • JPG의 손실압축은 쉽게 말해 Pixel값들이 조금씩 변동되는 것을 의미한다. 허나, 이렇게 바뀌는 정도가 사람이 살펴볼 경우는 크게 차이를 느끼지 못하지만, 컴퓨터의 경우 연산시 잘못된 연산을 수행할 수 있기 때문에, Computer Vision 쪽에서는 JPG 파일을 잘 사용하지 않는다. Pixel
  • GIF 파일은 인터넷에서 움짤 만들떄 주로 사용되어지며, 영상처리에서는 거의 사용되지 않는다. 트루컬러 영상을 표현하지 못한다.
  • PNG 파일은 BMP 파일과 JPG 파일의 중간정도라고 생각하면 된다. 압축을 하되 Pixel값이 바뀌지 않는 무소실 압축을 통한 파일이다. 투명도도 지원하기 때문에 투명도에 관한 채널도 함께 받을 수 있다.

파일 형식의 종류