분류 전체보기 290

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

allowDefinition='MachineToApplication' 에러

(그림 클릭하면 잘 보이실거에요~) 이런 오류가 생기는데.. 웹 애플리케이션을 애플리케이션화 시키지 않고 바로 접근하려 하는 경우에 이런 에러가 생깁니다. - vs에서 웹사이트가 아닌 웹애플리케이션 프로젝트로 생성을 한 경우가 이에 해당됩니다. 그렇다면 사이트가 아니라 애플리케이션으로 만들어줘야하겠죠? IIS에서 요렇게 해서 해결할 수 있습니다.