데이터분석/Vision Recognition

영상정합 (Registering Images)

늘근이 2016. 3. 20. 18:41

영상정합은 컴퓨터 비전을 다른시점이나 관점에서 촬영했을때, 이를 하나의 좌표계에서 처리하기 위한 기법이다. 다른 말로 말하면, 이미지를 비교할수있게 잘 조정하는것.

아래와 같은 의료영상을 시간에 따라 비교하거나 할때 영상정합 과정을 거쳐서 이미지 보정을 할 수 있다.

출처 : http://2014.ncigt.org/pages/File:Resection.png


예를들어 나의 17년간의 얼굴을 평균내고 싶다고 하자. 이를 평균내려면 언제는 작게 찍히고 언제는 크게 찍히는 경우가 있을텐데 이를 보정해서 평균을 낼 필요가 있다.

다음의 대단한 사람을 참조하면

http://jk-keller.com/daily-photo/

총 17년동안 자기 이미지만을 찍어서 올린사람인데, 동영상을 찍기전에는 내부적으로 평균을 맞춰서 이미지를 보정한후 올렸다.

이를 맞추기 위해서는 사실 쉽다.

그냥 얼굴에서 자신의 특정한 특징점을 잡아 그걸 기준으로 맞추면 된다. 예를들어 눈사이의 거리와 입의 위치등을 통해서 말이다.


파이썬의 scipy라이브러리에서 에서 제공하는 기능은 linalg.lstsq이라는 기능인데, 이는 최소자승법을 통해 해를 구하는 메서드이며, 결과적으로는 affine변환등을 통해 이미지를 하나로 통일할수 있도록 해준다.


변환공식은 다음에서부터 출발하는데,



이미지를 변환할 특정 타겟 로케이션을 잡기위한 공식이며, 이는 다음과 같이 변환가능하다



최종적으로, 아래와 같은 공식을 통해 a,b,tx,ty값을 추출가능하다.

a,b,tx,ty = linalg.lstsq(A,y)[0]