Cloud&BigData/Machine Learing

OpenCV 이미지 유사도 비교 #1 - 피처 매칭

루키~ 2015. 9. 22. 08:52

OpenCV의 설치자바 프로그래밍 테스트를 살펴봤으니, 

이제 이미지 유사도 비교를 해보도록 하자. 

OpenCV를 활용한 이미지의 유사도 비교는 

히스토그램 비교, 템플릿 매칭, 피처 매칭의 세 가지 방법이 있다. 

오늘은 이 중에서 피처 매칭(Feature Matching)을 알아보도록 하자. 


Feature Matching

먼저 전체 소스를 살펴보면 다음과 같다. 

일반적으로 C로 구현되어 있는 Feature Matching 소스를 자바로 변환한 것이다. 


이미지 파일 2개를 받아서 서로 비교하는 compareFeature라는 메소드를 만들었다. 

핵심은 이미지에서 KeyPoint를 지정해서 서로 비교해서 거리를 계산한다. 

각 피처의 거리가 어느정도 일때, 두 이미지가 유사하다고 볼 건지를 결정하는 것이 가장 중요하다. 


90~94번째 소스를 보면, 10 이하일 때를 유사하다고 판단하는 것으로 우선 설정했다. 

다양한 이미지로 테스트하면서 이 값을 정하는 것이 필요할 것으로 보인다. 


위 로직에 따라 유사한 것으로 판단된 피처의 개수를 리턴했고, 

메인함수에서는 유사한 피처가 한개 이상이면 동일한 이미지라고 판단하도록 구성했다. 


추가로 76번째의 if 문은 완전히 서로 다른 이미지를 함수에 넣었을 때 발생하는 Assert 오류를 피하기 위해 적용했다. 


Feature Matching Test

다음의 세 개의 아이폰 이미지를 가지고 테스트를 해 봤다. 


먼저 동일한 이미지인 iphone1.jpeg를 비교하면 다음과 같이 동일하다고 나온다. 

 

이번에는 거의 비슷해 보이는 iphone1.jpeg와 iphone2.jpeg를 비교해보자. 

두 이미지의 피처간 거리가 있기는 하지만, 10 이하의 값이 2개가 나와서 유사한 이미지로 판단했다. 


마지막으로 완전히 다른 iphone1.jpeg와 iphone3.jpeg를 비교해 보면 다음과 같다. 

최소 거리값이 24가 나오면서 전혀 다른 이미지라고 나타났다. 


위 예제를 잘 활용하면, 피처 매칭으로 이미지 유사도를 비교해 볼 수 있을 것 같다. 

다음에는 히스토그램을 이용한 비교를 살펴보려고 한다. 


OpenCV 더보기..

OpenCV를 활용한 이미지 유사도 비교 방법~

OpenCV 설치 및 자바 이클립스 환경 설정~

OpenCV 자바 이클립스에서의 프로그래밍 시작하기~

OpenCV 이미지 유사도 비교 #1 - 피처 매칭

OpenCV 이미지 유사도 비교 #2 - 히스토그램 비교