no image
[Object Tracking] SVM을 이용한 HOG 기반 객체 추적
People Detection with HOG(Histogram of Oriented Gradients) and SVM(Support Vector Machines) [그림 1] HOG+SVM을 이용한 보행자 검출[참고자료 1] 보통 SVM을 이용하여 HOG 기반 객체 추적을 실행하려면 실행하고자 하는 데이터에 맞게 학습된 SVM 분류기가 필요하고, HOG feature가 필요하다. 기본 내장되어있는 opencv 로도 해결이 가능하지만 좀 더 빠른 성능을 위해서라면 CUDA 라이브러리를 이용한 GPU 프로그래밍을 하는 것이 좋다. 그런데 CUDA 라이브러리는 아직 visual studio 2015 를 지원하지 않을 뿐만 아니라 opencv 만 쓰다가 다른걸 써보려니 적응이 안되고(?) 환경 설정에 예민한 ..
2017.02.01
no image
[CUDA] Visual Studio 2015, OpenCV , CUDA 연동하기
opencv_cudaobjdetect300d.lib opencv_cudawarping300d.lib opencv_cudaimgproc300d.lib object tracking 관련 구글링을 하던 도중 써볼만한 코드가 생겨 테스트 해보려고 했는데 "cuda~~" 라는 헤더파일과 라이브러리 파일이 자꾸 없다고 떴다. 뭣도 모르고 opencv에 기본 내장되어있는 파일인줄알고 환경설정만 죽어라 삽질한 결과 CUDA 라는 프로그램을 opencv에 연동해야하고, 아래와 같은 cuda~~로 시작되는 라이브러리나 헤더파일은 그 프로그램에 들어있어서 연동하면 쓸 수 있게 되어있다고 한다. 간단히 말해서 GPU 관련된 클래스를 사용하기 위한 개발환경 설치 단계이다. 한참을 삽질하고 난 뒤에야 알게 된 결과... 조금 더..
2017.01.25
no image
[Stereo Vision] kinect 설치하기 (Visual Studio 2015, Windows 10, 64 bit, usb 3.0)
[Kinect] kinect 설치하기 (Windows 10, 64 bit, usb 3.0) 환경은 Windows 10, 64bit, usb 3.0, Visual Studio 2015 이다. usb 3.0 버전은 키넥트 SDK 프로그램 다운로드가 안된다고 하여, 키넥트 SDK 1.8 버전을 다운받았다. 3.0 버전이 아니거나 최신버전 다운을 받고싶다면 아래 사이트에서 SDK를 다운하면 된다. http://www.kinectforwindows.com/ 2.0 버전이거나 낮은 버전을 다운 받고 싶다면 아래 사이트에서 적절한 SDK를 다운하면 된다. 나는 v1.8 을 다운받았다. https://www.microsoft.com/en-us/search/result.aspx?q=kinect+for+windows+sd..
2017.01.19
no image
[Image Processing] OpenCV Watershed를 이용한 영상 분할
OpenCV Watershed를 이용한 영상 분할 워터쉐드 변한은 영상을 빨리 분할하여 동일한 영역으로 만들기 위해 사용하는 영상처리 알고리즘이다. 영상이 위상적 입체감을 보여준다는 아이디어에서 착안하였으며 영상 분할을 위해 정의된 마커 집합을 사용하게 된다. 워터쉐드 함수는 마커 기반 영상 분할을 수행하게 된다. CV_8UC3인 8비트 3채널 컬러 영상 image에 사용자가 대략적으로 32비트 정수 1-채널 markers에 부분영역을 설정하면 영상을 분할하여 markers 행렬에 저장한다. 초기에 markers에 주어진 영역의 값을 씨앗(seed)으로 하여 나머지 영역을 분할한다. 함수가 반환 될 때 markers에 1 이상의 값을 가지며 markers의 값이 같으면 동일 특성을 갖는 분할 영역이며, ..
2017.01.18
no image
[OpenCV] pyrMeanShiftFiltering 적용하여 영상분할
pyrMeanShiftFiltering에 의한 피라미드 기반 영상 분할 (color segmentation) 피라미드(Pyrimid) 영상 일단 이 함수를 영상에 적용시키기에 앞서 피라미드 기반 영상분할에 대하여 알아야 한다. 피라미드 생성은 각각 축소와 확대로 나타난다. pyrDown 함수 같은 경우 오리지널 영상에 가우시안 필터링을 한 후, 결과영상 사이즈를 축소한다. 보통 디폴트 값은 가로, 세로 각각을 1/2배 크기로 축소하는 것을 적용한다. 즉 Size((src.cols+1)/2, (src.rows+1)/2)가 된다. pyrUp 함수는 마찬가지로 영상에 가우시안 필터링을 적용하여 주어진 크기로 결과영상을 확대하게 된다. 디폴트는 가로, 세로 각각 2배 크기로 확대하게 된다. 즉 Size(src...
2017.01.17
no image
[OpenCV] MOG2 함수를 이용한 배경추출
안녕하세요 오랜만에 티스토리 포스팅을 해요. 포스팅을 하는 주된 목적이 하루 또는 일주일 동안 공부한 내용을 정리하는 목적 그리고 공유하는 목적으로 썼었는데 요 며칠간 공부만하느라고, 정리를 못했네요. 정리를 안하니 머리에 남는 것도 없고 다시 정리를 하자는 마음으로 포스팅을 오랜만에 해요. 배경추출 알고리즘을 찾던 도중 OpenCV에 내장되어있는 MOG2 함수를 써보게 되었어요. OpenCV 3.1 도큐멘트에 있는 내용을 참고하여 작성하였습니다. MOG2의 기본 원리는 다음과 같습니다. 현재 프레임(currentframe)과 객체를 추출하기 위한 배경 모델(background model)의 차영상(substraction)을 구하여 Thresholding을 하여 foreground mask를 구하는 것입..
2017.01.17
no image
[OpenCV] 간단한 웹캠 영상 띄우기 및 CANNY EDGE
소스코드 (OpenCV 3.0 버전) if(frame_valid) 부분의 try 문에 처리하고자 하는 영상처리 소스를 입력하면 된다. #include "opencv/cv.h" #include "opencv/highgui.h" #include "opencv2/opencv.hpp" #include using namespace cv; using namespace std; int main(int argc, char *argv[]){ VideoCapture capture(0); if (!capture.isOpened()){ cerr frame; } catch (Exception& e){ cerr
2017.01.17
no image
[MFC] 3. MFC 프로그램 기본 구조 및 MFC 기초 클래스
정말 오랜만에 다시 꺼내든 MFC 윈도우 프로그래밍 책, 다시 여유시간이 생겨 공부해보려고 한다. 지난번에는 SDK 프로그램 기본구조에 대해서 살펴보았는데 이번엔 그와 비슷한 MFC 프로그램 기본 구조를 살펴보려고 한다. SDK 기본 구조의 골격은 다음과 같다. 1. 윈도우 클래스를 정의(초기화)하고 운영체제에 등록한다.2. 윈도우를 생성하고 화면에 보이게 한다.3. 메시지 루프를 구동한다.4. 윈도우 프로시저에서 메시지를 처리한다. 그와 비슷한 MFC 기본 구조의 골격은 다음과 같다. 1. 응용 프로그램 클래스를 정의한다.2. 메인(프레임) 윈도우 클래스를 정의한다.3. 응용 프로그램 객체를 선언한다.4. 메시지 맵을 선언한다. MFC 응용 프로그램을 개발 할 때는 일반적으로 AppWizard를 이용하..
2017.01.02
no image
[3D Reconstruction] Trifocal tensor 정리
Trifocal tensor (그림 1) Trifocal tensor 컴퓨터 비전에서 Trifocal tensor (또는 tritensor) 는 3개의 View 사이의 모든 투영 기하학적 관계를 통트는 3 x 3 x 3 행렬이다. 이는 3개의 View에 있는 Line과 Point에 대응하는 좌표가 있고, 이는 Scene Structure에 영향을 받지 않고, 캘리브레이션 파라미터와 3개의 View 에 영향을 받는다. 따라서, Trifocal tensor는 3개의 View에서 기본 행렬의 일반화라고 할 수 있다. 27개의 요소들로 구성되어있으며, 18개 만 독립적으로 존재한다. (그림 2) Trifocal tensor Matrix 즉, 그림 1에서와 같이 공간상의 하나의 직선 L이 세 가지 View에 투영..
2016.12.27
파인만 알고리즘 (Feynman Algorithm)
출처 : http://thoughts.chkwon.net/feynman-algorithm/ 미국의 유명한 물리학자 리처드 파인만은 다음과 같은 ‘일반적인’ 문제 해결법을 제시 했다. 1. Write down the problem. 2. Think real hard. 3. Write down the solution. 1. 문제를 쓴다. 2. 열심히 생각한다. 3. 답을 쓴다. 한 십년쯤 전에 이 걸 처음 봤을 때는, 황당하다고 생각했고, 파인만 같은 천재들에게나 해당하는 문제 해결방법이라고 생각했다. 몇 년 후 시간이 흘러서, 대학원생일 때 이걸 다시 봤을 때는 2번 항목에 감명을 받았었다. 문제를 ‘직접’ 해결하는 방법 중에, 저 방법 말고 다른 방법이 도대체 뭐가 있을까를 생각 했다. 열심히 생각하는 ..
2016.12.27
no image
[Image Processing] Fourier Transform (푸리에 변환)
Fourier Transform (푸리에 변환) 푸리에 변환(Fourier Transform) 이란 어떤 시간 도메인(time domain)에서 표현된 신호를 주파수 도메인(frequency domain)에서의 표현으로 변환해주는 것을 말한다. 영상처리에서는 2차원 푸리에 변환을 사용하게 된다. 이는 영상을 x축 또는 y축 방향으로 따라가면서 픽셀의 밝기 변화를 파형 또는 신호로 보고 주파수 분석을 적용하는 것이다. 푸리에 변환을 통해 얻은 각 주파수 성분의 강도를 스펙트럼(spectrum)이라고 부른다. 이 스펙트럼도 이미지처럼 표현이 가능하다. 또한, 푸리에 변환은 신호를 주파수 영역에서 분석하기 위해 사용된다. 푸리에 변환의 기본 개념은 하나의 신호는 여러 개의 sin 신호와 cos 신호의 합으로 ..
2016.11.18
no image
OpenCV contrib 설치 및 Cmake
참고자료 1 : http://m.blog.naver.com/imsujin91/220596347249참고자료 2 : http://kimjuyoung.blogspot.kr/2015/11/window-opencvcontrib-master-install.html참고자료 3 : https://github.com/opencv/opencv_contrib참고자료 4 : http://dongjinlee.tistory.com/entry/%ED%8D%BC%EC%98%B4-OpenCV-ExtraModules%EC%9D%84-windows-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%EB%B2%95참고자료 5 : http://neodreamer-dev.tistory.com..
2016.11.14