'영상처리'에 해당되는 글 2건

  1. 2014.11.28 안드로이드 NDK로 영상처리 개발환경 구축
  2. 2013.04.13 [자작]템플릿 패턴 매칭 테스트
Android2014. 11. 28. 16:10

이번에는 안드로이드 NDK개발환경 구축에 관해서 간단하게(스크린샷 없이) 포스팅 할건데요, 제 얕은 지식으로 이해한 바를 최대한 써보겠습니다. ㅜㅜ


개발환경 구축에 필요한 툴과 라이브러리는 다음과 같습니다.


JDK

JDK_7_51 - (http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u51-oth-JPR)

환경변수 설정

이클립스

케플러 - (http://www.eclipse.org/downloads/packages/release/Kepler/SR2)

안드로이드 ADT설치 (help - install new software)

안드로이드

SDK - adt-bundle-windows-x86_64-20140321

안드로이드용 OpenCV

OpenCV-2.4.9-android-sdk

안드로이드 NDK

android-ndk-r10c-windows-x86_64


다운로드, 설치 방법과 경로 설정 등은 다른 블로그에 많이 나와있으니 생략하겠습니다.


모두 설치하셨다면, 프로젝트를 만들어야 할텐데요. 맨땅에다가 만들지 않고 예제를 수정하는 방법으로 만드려고 합니다.


OpenCV 예제 중 OpenCV Tutorial 2 - Mixed Processing 이라는 예제가 있을텐데요, 이 안에서는 CameraBridgeViewBase로 카메라를 다루지만 AutoFocus기능을 사용하기 까다롭더라구요 (Camera객체를 만들어서 start시키려고 하면 CameraBridgeViewBase와 충돌하는 듯 합니다). 하지만 NDK개발이 가능합니다.


그리고 OpenCV Tutorial 3 - Camera Control 이라는 예제는 CameraBridgeViewBase를 상속받은 JavaCameraView를 사용해서 카메라를 다루는데, 이 클래스 안에 mCamera가 Camera 객체이기 때문에 AutoFocus기능을 사용하기 수월합니다. 하지만 NDK개발 구축이 안되어있습니다.


이 두 예제를 합칠건데요, 일단 그냥 Tutorial 2 의 패키지를 지워버리고  Tutorial 3의 패키지를 가져오는 식으로 하셔도 됩니다. 


다만 두 프로젝트간에 다른건 조정 해줘야합니다. Menifest파일의 패키지와 액티비티 이름, 옮긴 후 액티비티의 onCreate에서 레이아웃 이름 등등은 알아서 조절하시길 바랍니다.


이렇게 해서 만들어진 프로젝트는 JavaCameraView의 mCamera를 이용한 AutoFocus가 가능하고, JavaCameraView의 onCameraFrame에서 OpenCV영상처리도 가능하며 onCameraFrame에서 native 함수를 호출함으로써 NDK 영상처리 개발도 가능합니다.




Tip : native 함수는 Java_com_abc_core_MainActivity_func() 처럼 생겼는데 맨 처음 Java는 고정이고 다음은 com.abc.core.MainActivity라는 액티비티의 func()함수로 사용하겠다는 의미입니다. 즉 위처럼 선언된 네이티브 함수는 com.abc.core.MainActivity 액티비티에 public native void func(); 이렇게 선언되어있어야 합니다. 오타가 나거나 경로가 틀리면 native 함수를 찾을 수 없다고 출력되며 앱이 종료됩니다.





Posted by 너를위한노래
Computer Vision2013. 4. 13. 14:52

캠으로 찍고 있는 동영상에서 내가 가지고 있는 bmp파일과 비슷한 부분을 어떻게 찾아내느냐...

 

뭐 템플릿 매칭에 대한 많은 논문과 알려진 기술들이 많지만.. 그리고 OpenCV에 쉽게 구현까지 되어있지만..

 

이미 알려진 기술을 사용하는 법도 물론 중요하지만 제가 아직 학생이라 그런지 알고리즘을 배우거나 실제 구현하는거는 나쁘지 않다고 봅니다.

 

그렇다고 SURF나 SIFT같은 기술을 그대로 구현하는건 제가 나가는 영상처리 대회의 취지하고도 안맞고 해서 다른 알고리즘을 계속 생각하고 있었는데.. 문득 떠오른게 이 패턴매칭..!!

 

될지 안될지 긴가민가했는데 일단 해보고 알 일이니까 (실패해도 좋은 경험이니까) 일단 해보기로 했습니다

 

 

캠으로 계속 찍고 있는 사진에서 이 그림을 찾을겁니다 (제가 자주가는 미용실 마크입니다...ㅋ) (100x100 입니다)

 

일단 저 노란부분(y=50)의 픽셀만 뽑아서 상승, 하강, 유지의 패턴을 추출해 보겠습니다.

 

  (이하 빨간패턴)

 

흰부분은 높고 검은부분은 낮게 나오죠?

 

그리고 저 빨간 점들은 제가 만든 알고리즘으로 추출한 패턴들입니다.

 

이제 이 패턴을 캠 영상하고 비교를 해야겠죠?

 

 

(이하 초록패턴)

원본 영상의 어느 한 줄의 픽셀만 뽑아서 같은 알고리즘을 통과시킨 그림입니다. 마찬가지로 초록 점이 추출된 패턴들이구요

 

초록패턴 중간에 빨간패턴과 비슷한게 보이시죠? 이 부분을 찾는게 제 아이디어 입니다 ㅋ

 

프로토타입으로 만든 결과를 보시면 

 

머리가 개털처럼 나왔네요.. 눈도 퀭한게.. ㅠ  암튼...

 

정확도가 좀 떨어지는데 가로방향 한줄로만 해서 그런거 같아요

 

각 줄에 매칭되는 범위를 조금 늘리고 가로방향 3줄, 세로방향 3줄로 해서 총 6개의 매칭 분포가 많은 부분을 찾으면 좀 더 정확도가 올라갈거 같아요

 

그리고 제 아이디어의 단점이 회전시키면 못찾는건데 이것도 좀 연구를 해봐야겠네요

 

그래도 가능성이 어느정도 보입니다 패턴의 매칭이라서 픽셀단위 매칭처럼 오래걸리지도 않고..

 

일단 해봐야 알 일이죠 될지 안될지는.. ㅋ  

 

 

- 7월 11일 추가

 

가로세로 각각 3줄씩 매칭을 해봤는데 어느 한 부분도 매칭이 안되더군요.. 매칭을 허용하는 범위를 대폭 늘렸더니 쓸데없는거까지 잡고..

 

그래서 최대한 범위를 적당히 수정해봤는데 원하는 부분도 잘 찾지만 다른부분도 잘 찾아서 문제.. ㅋ

 

과거 프레임 몇 개를 저장해두고 많이 나오는 부분을 찾으려고도 해봤지만 실패.. ㅋ

 

결국 대회는 다른 팀원이 구현한 SURF로 나갔네요.. 하지만 여러 가능성을 보았으므로 나쁘지 않은 시도였습니다.ㅋ



 - 14년 3월 6일 추가


지난 글을 보다 문득 든 생각이.. 복잡한 조건문으로 도배하지 않고 1차미분, 2차미분을 사용해서 그래프의 극값을 구할 수 있겠단 생각이 드네요.


이미 극값을 특징점으로 이용하는 알고리즘을 어디선가 본거 같긴 하지만.. 단독으로 사용할만 한건 아닌거 같네요.. 다른 특징점과 같이 사용하면 좋을 것 같다는 생각을 해봅니다.



Posted by 너를위한노래