본문 바로가기

Theory/DataScience

영상 인식으로 월리를 찾아볼까? -mahotas-

이미지나 영상관련해서는 알게 모르게 제가 초보 주제에 생각보다는 많은 글을 올린것 같습니다.^^ 이번에는 mahotas를 소개할까 합니다. 꽤 괜찮은 모듈인데.. Python 3.5부터 버전이 지원되지 않아서 아쉬웠는데 최근 업데이트를 해주어서 3.6에서도 잘 동작합니다. mahotas 모듈을 가지고 재미있는 공부를 많이 했거든요. 그러다가 그들의 공식홈페이지에 공개되어 있는 예제 중에 월리를 찾는 예지를 보고 저도 한 번 돌려 봤습니다. (이 이야기는 제가 짠 코드가 아니라는 거죠 ㅎㅎㅎ) mahotas는 conda 명령으로 설치하는게 편하더군요.

import matplotlib.pyplot as plt
import mahotas as mh
%matplotlib inline

wally = mh.demos.load('Wally')

plt.figure(figsize=(14,14))
plt.imshow(wally)
plt.show()

먼저 mahotas를 import하고 월리를 읽어보도록 하겠습니다.~~

오랜만이죠? 먼저 눈으로 한 번 찾아보시죠 월리~~~~~ 월리의 특징은 힌색 빨간색이 번갈아 나타나는 셔츠를 입고 있다는 것입니다.

import numpy as np

wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
w = wfloat.mean(2)

pattern = np.ones((24,16), float)
for i in np.arange(2):
    pattern[i::4] = -1
    
pattern

이렇게~ 그 흰색-빨간색 패턴을 지정하기 위한 작업을 좀 하구요~~~

그리고,

v = mh.convolve(r-w, pattern)
mask = (v == v.max())
mask = mh.dilate(mask, np.ones((48,24)))
np.subtract(wally, .8*wally * ~mask[:,:,None], out=wally, casting='unsafe')

plt.figure(figsize=(14,14))
plt.imshow(wally)
plt.show()

이렇게 컨볼루션 연산을 통해 이미지 전체에 마스크를 씌어주면~

그냥~ 월리를 찾네요.. 전 영상인식을 제대로 공부한 적이 없어서 참 신기한데요. 이번 기회에 컨볼루션 연산이 영상 인식에 어떤 영향을 주는 건지 공부해야겠어요~~~^^

반응형