전체 글 291

Kalman Filter

워,,, 이거하나만 가지고도 책 한권이 나올정도구나 아무튼 칼만필터 비행기 위치 제어, 네비게이션, 영상처리 등 여러 분야에서 각 시스템 작동 중에 필수적으로 요구되는 주요 변수(비행기의 자세, 이동체의 위치 또는 트래킹하는 객체의 위치 등)를 예측하는데 사용하는 필터 수학적으로는 선형시스템의 상태를 예측해서 발생할 수 있는 오류를 최소화 하면서 예측한다. 선형 시스템 (Linear System) 시스템을 모델링한 수식이 선형 연산자들로 표현이 가능한 시스템을 말한다. 칼만필터는 선형시스템의 예측을 위한 필터 칼만필터가 추출된 신호에서 잡음을 제거하기 위해서는 현재 모델링하는 프로세스가 선형시스템으로 서술이 가능해야 한다. (즉, Y = aX + b같은 수식으로 표현이 가능해야 한다) 길을 따라 주행 중..

SIFT

SIFT : Scalar Invariant Feature Transform 영상의 크기와 회전에 불변하는 특징을 추출하는 알고리즘 SIFT의 4단계 1. Scale-space extrema detection 2. Keypoint localization 3. Orientation assignment 4. Keypoint Descriptor 1단계 : Scale-space extrema detection, 특징의 크기와 위치를 결정한다. - Scale(크기)과 Orientation(방향)에 불변할 것이라고 추측되는 Interest Point(관심영역)를 추출한다. 이걸 위해 가우시안 피라미드가 있어야 하고, DoG(Difference of Gaussian)을 이용한다. - SIFT알고리즘을 사용하기 전에 먼..

Gaussian Filter

Gaussian Filter 그냥 불규칙 적인 수치(잔떨림)를 정규분포로 평활화 하는 필터로, 가장 구현이 쉽다고 한다. 가우시안 블러랑은 또 다른개념이다 이전 프레임 일곱개를 받아서 그 이전 프레임의 평균치를 내어 이상현상을 방지하는 필터 전공에 배우지 말아야 할 것 없고, 모르는게 더 많으니까 또 공부해야겠다. 자세한 필터 설명은 다음에 하고, 오늘은 내 AR 솔루션에 적용시킬 코드만 적어놓겠다. //////////////////////////////////초기화///////////////////////////////// float Sigma = 2.0f; // 가우시안 필터 시그마값 조절 mTotal = 0.0f; // 전체 가중치 for ( int i = 0; i < COUNT_OF_WEIGHTS..

glPush, PopMatrix, Ortho 등

glPushMatrix(); & glPopMatrix();이 둘을 행렬스택이라 한다.물체의 위치를 지정할 때 마다 단위행렬을 사용하여 모델뷰 행렬을 초기화 하는 방법은 바람직하지 못~해~특히나 지금 상태를 저장했다가 나중에 또 써야하는 경우도 종종 있규, 매번 원점으로 돌아가는게 아니라 특정 변환을 거친 상태로 돌아가야 하는 경우도 있기 때문이다.요때 사용되는 것이 바로 이 행렬스택 행렬스택은 모델뷰행렬과 투영행렬을 저장해두는 일종의 저장공간으로, 다른 프로그램 스택과 마찬가지로 현재 행렬을 스택에 저장해두었다가 필요할 때 꺼내쓰면 되는것이다 원래 좌표축glPushMatrix(); // 현재 좌표축 저장        :   회전, 변환        :glPopMatrix();  // glPushMatri..

Graphics/OpenGL 2014.05.27

glutGameModeString, EnterGameMode 등

정맥주사 시뮬레이터를 개발할 당시의 코드 중 GLUT가 사용된 부분의 일부이다.  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); if (!prefWindowed) {  if (prefRefresh) sprintf(glutGamemode, "%ix%i:%i@%i", prefWidth, prefHeight, prefDepth, prefRefresh);  else sprintf(glutGamemode, "%ix%i:%i", prefWidth, prefHeight, prefDepth);  glutGameModeString(glutGamemode);  glutEnterGameMode(); } else {  glutInitWindowSize(prefWidt..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : Win32 예제

그냥 맛보기로 윈도우 환경 OpenGL 예제를 한번 보자. 윈도우 환경이 제공되는 경우라면 굳이 GLUT를 쓰지 않아도 구현이 가능하다.GLUT는 앞서 말했듯 플랫폼 독립성을 보장하기 위해 윈도우를 지원하지 않는 운영체제에서도 사용가능하기 위해 존재하는 라이브러리다,때문에, 윈도우가 있는 윈도우 운영체제에서는 GLUT없이도 구현이 가능한 것이다. 그럼, GLUT없이 구현된 OpenGL Win32예제를 보겠다. GLUT를 추가하지 않았기 때문에, 프로젝트 구성요소에서 입력부분에 라이브러리 링크를 달아줘야한다. opengl32.lib;glu32.lib  #include #include #include //#include                  GLUT없이 하는 예제 LRESULT CALLBACK W..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 애니메이션

애니메이션 GLUT는 반복적인 처리가 필요할 때 주로 사용되는 타이머 이벤트도 제공한다. void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);millis 후에 func함수를 호출하며 인수로 value를 전달한다.value는 타이머 콜백으로 전달되어 작업거리를 지시하는데 타이머의 용도가 하나뿐이라면 아무값이나 주어도 상관은 없다.콜백을 등록해 놓으면 millis 후에 콜백함수가 호출된다.일반적인 타이머와는 다르게 주기적으로 호출되는게 아니라 딱 한번만 호출된다.주기적으로 계속 호출하려면 콜백함수에서 자신을 계속 호출해야한다.불편하긴 하지만, 호출될때마다 다음 주기를 가변적으로 설정할 수 있다는 점에서 활용성은 더 높다. 애..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 팝업메뉴

팝업메뉴는 기능의 목록을 문자열 형태로 나타낼 수 있으니, 사용법을 외우지 않아도 쉽게 이해할 수 있다는 장점이 있다. 이미 예제를 통해 만들어본 적이 있다. int glutCreateMenu(void (*func)(int value));인수로 메뉴항목을 호출했을 때 호출될 콜백함수를 지정한다.콜백함수는 선택될 메뉴 항목의 ID를 인수로 전달받는다. void glutSetMenu(int menu);int glutGetMenu(void);새로 생성된 메뉴는 자동으로 현재 메뉴가 되므로 굳이 glutSetMenu를 호출하지 않아도 상관없다. 둘 이상의 메뉴를 생성해놓고 번갈아가면서 사용하고 싶다면 glutSetMenu가 필요하다. void glutDestroyMenu(int menu);메뉴를 삭제한다. vo..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 입력처리

GLUT를 이용해서 입력을 처리해보자 그래픽 프로그램의 주된 기능은 출력이므로 입력기능은 사실 필요없지만, 사용자의 지시를 받아서 그래픽 상태를 변경하거나, 실행중에 변화를 관찰해보기 위해서는 입력기능이 필요하다.GLUT는 기본적인 입력기능을 지원한다. 아래 함수들로 콜백을 지정하면 입력시 해당 함수가 호출된다. void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));void glutSpecialFunc(void (*func)(int key, int x, int y));void glutMouseFunc(void (*func)(int button, int state, int x, int y));각 콜백이 등록하는 입력함수의 원형은 인수목록..

Graphics/OpenGL 2014.05.27