'OpenCV'에 해당되는 글 5건

  1. 2015.09.24 OpenCV 이미지 유사도 비교 #2 - 히스토그램 비교 (6)
  2. 2015.09.22 OpenCV 이미지 유사도 비교 #1 - 피처 매칭
  3. 2015.09.11 OpenCV 자바 이클립스에서의 프로그래밍 시작하기~
  4. 2015.09.08 OpenCV 설치 및 자바 이클립스 환경 설정~
  5. 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 이미지 유사도 비교 #1 - 피처 매칭

|



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 - 히스토그램 비교





Trackback 0 And Comment 0

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

|



OpenCV를 자바 환경에 설정하는 것은 지난번에 살펴봤다. 

이번에는 실제 자바 프로젝트에서 프로그래밍하는 방법을 알아보기로 하자. 


OpenCV 라이브러리를 자바프로젝트에 설정하기

먼저 일반적인 자바 프로젝트를 하나 생성한다. 

여기에서는 "Mini"라는 이름의 프로젝트를 생성했다. 

환경 설정을 위해 생성된 프로젝트의 "Properties"에 들어가서 좌측의 "Java Build Path"를 선택하고

상단의 "Libraries"를 클릭한 후, 우측의 "Add Library.."를 통해 앞서 설정한 OpenCV를 지정하면 된다. 



이어서 "User Library"를 선택한 후, OpenCV-3.0.0을 지정하면 된다. 



최종적으로 다음과 같이 라이브러리가 설정된 것을 확인할 수 있다. 



OpenCV 자바 프로그래밍 시작하기

자~ 이제 테스트 프로그래밍을 시작해 보자!!

가장 중요한 것은 opencv를 사용하기 위해서는 우선 다음과 같이 System.loadLibrary()를 실행해야 한다는 것이다. 


System.loadLibrary( Core.NATIVE_LIBRARY_NAME );


간단한 첫번째 프로그래밍 소스를 살펴보자. 


먼저 opencv 관련 클래스로 Core, CvType, Mat을 import한 것을 알 수 있다.

그리고 Core.NATIVE_LIBRARY_NAME 라이브러리를 호출한 후, 

MAT 클래스 통해 3x3 행렬을 생성하고 출력하는 예제이다. 

실행하면 다음과 같은 결과가 나온다. 



OpenCV의 자바 클래스에 대한 문서는 http://docs.opencv.org/java/ 에서 확인할 수 있다.  


앞으로 OpenCV를 활용하여 이전에 정리한 이미지 유사도 비교 방법을 각각 테스트해보기로 한다. 


OpenCV 더보기..

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

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

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

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

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





Trackback 0 And Comment 0

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

|



OpenCV는 2.4.4버전 이후로 자바를 지원하기 시작했다. 

OpenCV를 윈도우즈에 설정해서 이클립스 기반의 자바 프로젝트로 테스트를 해보도록 하자. 


OpenCV 3.0 설정

최신 버전의 OpenCV는 3.0으로 윈도우즈, 맥, 리눅스, 안드로이드, iOS등 다양한 운영체제를 지원한다. 



우측의 OpenCV for Windows를 클릭하면, opencv-3.0.0.exe 파일을 다운로드한다. 

이 파일은 압축 실행파일이라 별도의 설치를 하지 않고 압축만 풀게 된다. 

OpenCV의 폴더 구조와 자바 버전에서 사용할 jar파일의 위치를 빨간 테두리로 표시해봤다. 



압축이 풀린 opencv 폴더를 c:\opencv로 복사하고 시스템 환경변수의 PATH에 다음 사항을 추가한다. 

C:\opencv\build\x86\vc12\bin



OpenCV 이클립스 설정

이제 이클립스 환경에서 opencv를 사용할 수 있도록 설정해 보자. 

이클립스를 실행하고 상단 메뉴에서 "windows > preference..."를 선택한다. 



왼쪽 메뉴에서 "java > Build Path > User Libraries"를 선택하고 "New..." 버튼을 선택해 OpenCV-3.0.0을 등록한다. 




이어서 "Add External JARs..."를 선택해서 opencv가 설치된 폴더의 build\java\opencv-300.jar 파일을 선택한다. 



 

이제 마지막으로 "Native library location"을 지정해주면 된다. 

32비트 윈도우인 경우에는 c:\opencv\build\java\x86 폴더를 지정하고, 

64비트 윈도우는 c:\opencv\build\java\x64 폴더를 지정한다. 



여기까지 하면 기본적인 환경 설정이 완료되었다. 

앞으로 틈틈히 자바에서 OpenCV를 활용한 예제들을 정리해 보려고 한다. 


OpenCV 더보기..

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

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

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

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

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





Trackback 0 And Comment 0

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