'이미지 유사도'에 해당되는 글 2건

  1. 2015.09.24 OpenCV 이미지 유사도 비교 #2 - 히스토그램 비교 (6)
  2. 2015.08.04 OpenCV를 활용한 이미지 유사도 비교 방법~ (1)

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

|



OpenCV를 활용한 이미지의 유사도 비교에서 먼저 피처 매칭을 살펴봤다. 

오늘은 히스토그램 비교를 알아보도록 하자. 


히스토그램은 매개변수에 따라 Correlation, Chi-square, Intersection, Bhattacharyya 각각의 결과값을 가질 수 있다. 

그래서 중요한 부분이 각각의 결과값을 어떻게 해석하는 것이다. 

Correlation과 Intersection은 값이 클수록 유사한 것이고, 

Chi-square와 Bhattacharyya는 값이 작을수록 유사한 것으로 판단한다. 


Comparing Histogram

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

마찬가지로 C로 구현되어 있는 Histogram 소스를 자바로 변환한 것이다. 


여기에서도 중요한 부분이 102~105번째 줄에 있는 유사성을 판단할 값이다. 

몇 번의 테스트를 통해서 대략적으로 값을 설정했지만, 좀 더 정교하게 다듬을 필요가 있다. 


히스토그램 방식에서는 4개의 결과값을 자체 기준으로 비교해서 세 개 이상이 적합할  때 

두 이미지가 유사한 것으로 판단하는 형태로 코딩을 했다. 


이런 조건들은 자유롭게 변경하면서 테스트하면 좋을 듯 하다. 


Histogram Test

피처 매칭과 동일하게 아이폰 이미지를 가지고 테스트를 해 봤다. 



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


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

Chi-square를 제외한 나머지 세개가 조건을 충족해서 유사한 이미지로 판단했다. 


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

Correlation과 Bhattacharyya이 조건을 만족했지만, 전체적으로 3개가 넘지 않아서 다르다고 판단했다. 

히스토그램을 사용하면 조건에 따라 오판하는 경우도 종종 있을 것으로 보인다. 

하지만, 이런 형태로 히스토그램을 사용할 수 있다는 것을 알아 두면 좋겠다. 


잠시 이미지 유사도 비교를 할 필요가 있어 OpenCV를 테스트를 해봤다. 

OpenCV가 실시간 이미지 프로세싱을 위한 라이브러리여서 이미지 유사도에 최적화되어 있지는 않지만, 

이런 형태로 활용할 수 있다는 점을 참고했으면 한다. 


OpenCV 더보기..

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

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

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

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

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





Trackback 0 And Comment 6

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

|



OpenCV는 인텔이 개발한 오픈소스 컴퓨터비전 C 라이브러리이다. 

실시간 이미지 프로세싱을 위한 라이브러리로 윈도우, 리눅스 등 여러 플랫폼에서 활용할 수 있다. 

원래 C 언어로 되어 있지만 최근에는 Java 언어로도 적용할 수 있고, 안드로이드 및 아이폰과 같은 모바일 환경도 지원한다. 



다양한 이미지 프로세싱 알고리즘을 지원하기 때문에 

처음에는 두 이미지가 동일한지 비교하는 메소드 같은 것이 존재할 줄 알았다. 

그러나 두 이미지의 동일성을 OpenCV로 비교하는 것은 생각보다 쉽지 않았다. 


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

각각의 방법으로 구현한 다음 많은 테스트를 통해 실제 어느 정도 값이 나오면 일치한다고 판단할지를 정해야 한다. 

이 부분은 다음 번 글에서 자바 기반의 소스와 함께 정리하면서 한번 더 논의해 보기로 한다. 


OpenCV를 활용한 이미지 비교와 관련해 위에서 언급한 세 가지 기술에 대해 살펴보도록 하자. 


Comparing histograms

히스토그램을 이용한 비교는 간단하면서 처리 속도가 빠른 방식으로 가장 오래된 방식이기도 하다. 

이 방식은 숲 이미지는 녹색 계열로 되어 있고, 바다는 청색 계열로 되어 있을 것이라는 아이디어에서 출발한다. 

그래서 숲과 관련된 두 장의 사진을 비교한다면, 두 이미지 모두 녹색을 많이 가지고 있기 때문에 히스토그램 사이에 유사성이 나타나게 된다. 


하지만 이 방식을 사용할 경우, 바나나와 노란색으로 이루어진 벤치를 같은 이미지로 착각하는 오류를 일으킬 수 있다. 

OpenCV 메소드는 compareHist()이며 C 언어 기반의 사용 예제는 여기를 참고하기 바란다. 

매개변수에 따라 Correlation, Chi-square, Intersection, Bhattacharyya 형태의 결과값을 제공한다. 


혹시 자바로 만든 예제를 원할 경우, OpenCV 이미지 유사도 비교 #1 - 피처 매칭 을 참고하기 바란다. 


Template matching

템플릿 매칭은 큰 이미지에서 주어진 작은 이미지가 존재하는지를 검색하는데 주로 사용한다.

아래 그림처럼 작은 이미지의 강아지가 큰 이미지에서 있는 부분(우측의 빨간색 사각형 부분)을 찾을 때 효과적이다. 


 

그러나 템플릿 매칭은 동일한 크기와 방향을 가진 똑같은 이미지를 가지고 검색할 때 좋은 결과가 나온다. 

즉, 서로 다른 이미지가 얼마나 유사한지를 확인하는 것은 쉽지 않다. 

OpenCV 메소드는 matchTemplate()이며, C 언어 기반의 사용 예제는 여기를 참고한다. 


Feature matching

피처 매칭은 개인적으로 이미지 유사성 비교를 할 때 가장 효과적인 방식이라고 본다. 

이미지로부터 수 많은 피처(feature)를 추출하는데, 해당 부분이 회전되거나, 확대/축소되거나, 찌그러져도 동일한 피처으로 인식하도록 보장한다. 

이런 방식으로 추출된 피처들을 다른 이미지의 피처셋과 비교하면서 유사성을 검사하게 된다. 

두 개의 이미지에서 추출한 피처들이 높은 비율로 일치한다면 동일한 또는 유사한 이미지로 볼 수 있다는 것이다.  



그러나 세가지 방식 중 가장 속도가 느리고, 완전히 정확하지는 않다는 단점이 있다. 

피처 매칭과 관련된 예제는 여기를 참고하면 된다. 


실제 피처 매칭을 적용하려고 해도 결과값을 수치화해서 유사하다고 판단할 수 있는 범위를 산정해야 한다. 

이를 위해서는 많은 테스트가 필요하지 않을까 한다. 


마찬가지로 자바로 만든 예제를 원할 경우, OpenCV 이미지 유사도 비교 #2 - 히스토그램 비교 을 참고하기 바란다. 


다음 글에서는 히스토그램과 피처 매칭을 자바로 구현한 다음 그 값의 범위를 정하는 것에 대해서 정리해 보려고 한다. 


OpenCV 더보기..

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

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

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

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

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





Trackback 0 And Comment 1
prev | 1 | next