Skip to content

기계학습 파이썬을 활용한 Image processing #
Find similar titles

Structured data

Category
Computer science

Introduction #

Image processing은 컴퓨터 비전(Computer vision) 이라는 큰 범주 에 속한 기술 혹은 처리 방법으로 이미지를 예술적으로 처리하는 것이 아니라 디지털 이미지를 수학적으로 처리 하는 기법이다. 다시 말하여 이미지 파일이 이루어진 숫자정보를 이용하여 흔히 우리가 모바일 앱이나 포토샵으로 많이 경험해 왔던 이미지 처리(예를 들어 흑백 필터 적용, 잘라내기, 비틀기 등)를 컴퓨터 알고리즘을 사용하여 수행하는 것을 의미한다.

본 포스팅에서는 이미지 프로세싱이 발전한 역사 부터 시작하여 이미지 프로세싱의 다양한 기법들을 소개하고 최근 현장 및 실무에 어떻게 적용될 수 있는지를 소개할 것이다. 또한 이미지 프로세싱을 구현하기 위한 프로그래밍 언어와 대표적 라이브러리를 알아보겠다.

프로그래밍 언어를 사용하여 이미지 프로세싱? 어렵고 불편한데 왜? #

분명 이 글을 읽기 시작한 사람들 중에 이미지 프로세싱 기술을 필요에 의해 검색하다 오신분들이 아니라면 뭣하러 이미지를 어렵게 숫자 행렬로 보는 프로그래밍 기법을 써야 하는지 의아 할것이다. '차라리 요새 쏟아져 나오는 스마트폰의 어플을 다운받아 쓰거나 이미지 전문 프로그램인 포토샵을 이용하면 빠르고 간편하게 전문가의 손길을 거친 이미지가 나오지 않아?' 라고 묻는다면 필자는 '맞다' 라고 할것이다. 허나 이러한 질문은 마이크로소프트의 엑셀을 쓰지않고 프로그래밍 언어를 배우는 이유를 묻는 것과 같다.

첫 번째는 반복된 작업이 많아 질 경우 포토샵이나 엑셀은 GUI 기반으로 작업해야 하기 때문에 번거로운 클릭을 많이 한다. 물론 매크로나 단축키를 이용하여 어느 정도의 번거로움을 피할 순 있겠지만 프로그래밍과 비교할 바가 아니다. 두번째는 프로그래밍 언어를 사용하면 자신만의 기능을 만들어 프로그램화가 가능하며 커스터 마이징이 가능하다. 이 또한 포토샵을 전문적으로 활용하는 전문가들이 작업하는 수준으로 대부분 커버가 가능하겠지만 기능과 기능을 연계하여 내 입맛에 맞춰진 완성된 프로그램을 만드는 수준에는 미치지 못할 것이다. 이렇게 완성된 프로그램은 배포가 가능하며 여기에 그래픽만 씌운다면 새로운 기능을 하는 포토샵을 만드는 것과 같다. 마지막으로 프로그래밍언어에서 제공하는 라이브러리를 잘 사용하면 최근에 각광받고있는 딥러닝(Deep learning)기술을 활용하여 보다 정밀한 이미지 프로세싱을 진행할 수도있다.

이미지 프로세싱의 발전과 다양한 기법 소개 #

최근 컴퓨터를 이용한 이미지의 인식률이 사람의 능력을 뛰어넘는다는 이야기들이 많다. 예를 들어보면 매장에서 물건을 살 때 별도로 결제하지 않더라도 물건을 집는 장면을 인식해 자동으로 결제하는 아마존 고(Amazon Go)와 같은 서비스가 생기고 길, 사람, 신호, 표지판을 인식하는 기술을 활용한 자율 주행 자동차가 등장 했다. 허나 이러한 놀라운 발전은 생각보다 최근에 일어난 일이다. 20세기 중반까지만 해도 영상 처리는 아날로그로 이루어졌으며 대부분 광학(빛의 특성을 다루는)과 연관된 방법이였다. 허나 컴퓨터 처리 속도의 향상으로 인해 2000년대 부터는 디지털 영상 처리 기법으로 많이 대체가 되었으며 이미치 영상처리에 대한 컴퓨터 알고리즘도 많이 발전이 되고 오픈 소스의 라이브러리도 상당수의 공개가 되며 아날로그 방법 보다 일반적으로 사용되고 있다.(출처 위키피디아-영상처리)

MarkDown

그림 1. 이미지 프로세싱과 딥러닝을 활용한 아마존 고(Amazon go). 출처:1

이러한 디지털 이미지 프로세싱은 위성 영상, 의료 영상, 영상 전화, 광학 문자 인식 등 현재 까지도 많은 분야에서 쓰이고 발전하고 있는데 복구가 불가능한 훼손된 사진들을 복원하거나 품질이 좋지 않은 화질을 고화질로 향상시키기도 한다. 이외에도 물리학이나 핵의학, 기상관측등의 다양한 분야에서도 해당 기술이 사용되고 있다.

MarkDown

그림 2. 의학에서의 이미지 프로세싱 응용. 출처:2

그럼 범주가 넓은 이미지 프로세싱 기법을 정리 해보도록 하자. 현재에도 끊임 없이 발전하고 있는 기법들이 많지만 기본적으로 쓰이는 기법들은 다음과 같다. 아래의 기법들을 이해하고 프로그래밍으로 구현해본 경험이 있다면 이미지 프로세싱의 기초 및 기본을 해보았다고 이야기 할 수 있겠다.

이미지 crop, 색상 공간(color space)변경, 이미지 깊이(image depth)변경, 확대·축소·회전·뒤집기와 같은 기하학적 변환, 이미지 대비·밝기·색상 밸런스 조정·선명도 변경과 같은 색 변환, 이미지 합성, 필터(filter, kernel, mask)를 사용한 블러링, 팽창과 침식 연산을 사용한 모폴로지 연산(Morphological operations), 이미지 임계처리(thresolding), 이미지 내의 에지 검출(edge, corner detection), 영상 변형, 영상 인식(글자 인식, 얼굴 인식), 컨투어 검출(contour detection), 이미지 분할 등

이미지 프로세싱을 위한 프로그래밍 언어 선택과 라이브러리 #

위의 기법을 다루기 위해서 필자는 프로그래밍 언어 중 python을 이용하고 있으며 python의 경우 오픈 라이브러리로 Pillow, scikit-imageopenCV가 대표적으로 이용되고 있다. python이 아닌 언어도 당연히 이미지 라이브러리가 존재하며 대표적으로 C언어에서 openCV 라이브러리가 자주 업데이트 되고 있다.

만약 python을 이용한다면 위의 라이브러리 뿐 아니라 이미지를 다루기 위해 pandas(데이터 프레임 및 행렬 편집 및 계산), numpy(수치연산, matplotlib(이미지 출력) 처럼 추가 라이브러리도 어느정도 다룰 줄 알아야 원할한 이미지 프로세싱 분석이 가능할 것이므로 틈틈히 공부하길 권장한다.

마무리 하며 #

본 포스팅에는 이미지 프로세싱의 개요와 더불어 이미지 프로세싱에서 다루는 기법들에 대해서 알아 보았다. 또한 파이썬과 오픈 라이브러리를 소개하며 어떻게 영상 기법 구현에 접근 해야하는지도 알아보았다.실제 예제 코드만 사용하여 접근하는 식의 학문은 깊이 있는 응용이 안될 수도 있어서 이러한 주제는 다음 포스팅으로 미루도록 하고 대신 배경 및 이론을 참고할 수 있는 싸이트를 출처에 인용하겠다.4 다음 포스팅에선 파이썬과 라이브러리를 사용한 몇 가지 기법을 코딩해보록 하겠다.

출처 #

  • Amazon go buying experience.1
  • Medical Image Analysis, COMPUTER VISION AT THE UNIVERSITY OF BARCELONA (CVUB)2
  • 위키피디아-영상처리3
  • 파이썬 3로 컴퓨터 비전 다루기, 에이콘출판산, 카푸 저
  • OpenCV를 이용한 디지털 영상 처리 강의 4
0.0.1_20140628_0