본문 바로가기
반응형

Programing General9

중학생도 이해할 수 있는 RANSAC 알고리즘 원리 이 글은 RANSAC에 대해 아무것도 알지 못해도, 중학교 이상의 수학적 지식만 가지고 있다면 충분히 이해할 수 있도록 포스팅할 예정이다. 실제로 RANSAC은 매우 중요한 알고리즘이지만 실상 들여다보면 매우 간단한 구조이므로, 만약 이해하지 못한다면 그것은 독자의 문제가 아니라 쉬운 알고리즘을 쉽게 설명하지 못한 필자의 문제다. RANSAC은 RANdom SAmple consensus의 약자로, 데이터셋에서 노이즈를 제거하고 모델을 예측하는 알고리즘이다. 매우 많은 분야에서 활용되며 특히 컴퓨터 비전 분야에서 광범위하게 사용된다. RANSAC은 특정 임계값 이상의 데이터를 완전히 무시해버리는 특성이 있어 outlier에 강건한 알고리즘인데, 아래 그림을 보면 노이즈가 매우 크지만, 노이즈를 반영하지 않.. 2020. 9. 20.
[C++] template class 템플릿 클래스 파일 분할 템플릿 클래스의 파일 분할은 일반적인 클래스의 파일 분할과는 방법이 다르다. 우선 직접적인 구현 이전에 왜 템플릿 클래스는 일반적인 클래스처럼 파일을 헤더파일과 소스파일(cpp)로 분할할 수 없는지 알아보자. 왜 오류가 나는가? 템플릿 클래스를 헤더파일에서 선언하고, cpp파일에서 구현한다면 다음과 같은 링크 오류를 만나게 된다. 일반 함수와는 다르게 템플릿은 컴파일 시점에 인스턴스가 생성되어야 한다. 왜냐하면 일반 함수는 컴파일 시점에 정의를 볼 수 없어도, 함수가 호출 되면 어떤 함수가 호출되었는지 링킹 과정에서 파악할 수 있다. 하지만 템플릿은 호출 될 때마다 그 정의를 확인해야 정확한 코드를 작성할 수 있다. 즉, 사용되는 개별 번역단위(translation unit)마다 그 정의를 포함시켜줘야 .. 2020. 5. 20.
[UML] 유스케이스 다이어그램 (Usecase Diagram) 기초 및 그리는 방법 Usecase Diagram 시스템에서 제공해야 하는 기능이나 서비스를 명세한 다이어그램이다. 사용자와 시스템 사이의 상호작용에 집중하는 것이 특징이다. 외부에서 본 시스템의 기능을 표현하기 때문에, 실제 내부의 비즈니스 로직이 아닌, 사용자가 수행하는 기능을 파악하고 싶을 때 작성한다. Usecase Diagram을 그리는 시기 유스케이스 다이어그램은 각종 액터가 프로그램의 기능과 상호작용을 하는 것을 표현하는 것이 메인 컨텐츠이기 때문에 요구사항을 추출하는 분야에 특화되어있다. 그러므로 보통 프로젝트를 시작하고, 제품의 요구사항 명세서를 작성하는 요구분석 단계에서 그려야 한다. 프로젝트의 개발 범위를 정하거나, 사용자의 요구사항을 정의하고, 이 프로그램에 수행해야 하는 기능의 명세를 알아야 할 때 그.. 2020. 5. 14.
[Java] Runnable과 Thread의 차이 및 간단한 실행 예제 보통 자바에서 쓰레드를 구현할 때 두가지 방법을 사용한다. Thread, Runnable 두 방법이 있는데, Runnable은 이름에서 느껴지지만 클래스가 아닌 인터페이스다. 그래서 위 두 방법을 구체적으로 설명하자면 1. Thread 클래스를 상속받는다. 2. Runnable 인터페이스를 구현한다. 로 정리할 수 있다. 한 가지 목적에 두 가지 방법이 있다면 각각 설계 된 이유가 있을 것이다. 하지만 한국 웹을 아무리 뒤져봐도 두 방법의 사용법의 차이 및 상속&구현의 차이만 말할 뿐 왜 이 두 가지 방법이 존재하는지에 대한 설명은 없었다. 그래서 자바 api를 잠시 살펴봤다. 흥미로운 것을 발견했는데, Thread 클래스는 Object를 상속받으며 Runnable 인터페이스를 구현한다는 것이다. 그리고.. 2020. 5. 7.
반응형