검색결과 리스트
분류 전체보기에 해당되는 글 183건
- 2014.01.28 물체의 유사성(correspondence) 찾기 - 수정중
- 2014.01.28 멀티스레드 개념 정리
- 2014.01.28 동적계획법
글
물체의 유사성(correspondence) 찾기 - 수정중
물체의 Correspondence(유사성)을 찾기 위한 접근 방법으로 크게 두가지 방법으로 분류할수 있다.
첫번째는 Feature에 기반한 방법, 두번째는 Area에 기반한 방법이다. Feature에 기반한 방법은 이미지에서 나타나는 feature(keypoint) - 추적하기 좋은곳(쉬운곳) 즉, edge나 corner점들을 이용해 매칭점을 찾아내는 방법이다. Feature에 기반한 방법은 속도가 빠르고 매칭점 들이 비교적 정확한 장점이 있지만, 하나의 feature로는 위치를 판별해 내기 어렵다. 하지만 Area에 기반한 방법은, 전체에 대한 dense 매칭에 대한 정보를 얻을수 있지만, 그에 따라 속도가 매우 느리고, Feature기반 방법보다 부정확한 단점이 존재한다.
Feature기반의 매칭점을 찾는 알고리즘의 순서는 보통 아래와 같은 순서로 진행된다.
(1) 두 이미지로 부터 Feature점들을 추출한다. (2) 추출한 Feature점들을 이용해 근방 픽셀 밝기값을 물체의 orientation, descriptor를 구한다. (3) 두 이미지의 Feature점들간의 대략적인 Matching point를 찾는다.(KD-Tree, LSH...) (4) outlier 제거 한뒤 Inlier를 갖고 Homography를 추정한다.(RANSAC, PROSAC...) (5) H를 통해 두 이미지 간의 관계를 설정한다. |
(3)의 과정에서 Feature keypoint점들 간에 대략적인 매칭을 위해서, 매칭되는 keypoint주위의 원도우 영역에
서 유사 정도를 가지고 대략적인 매칭을 수행한다. 대표적인 유사도 측정 방법은 SAD(Sum of Absolute
Differences), SSD(Sum of Squared Differences), NCC(Normalized Cross Correlation)등이 있다.
'컴퓨터비전/영상처리 > Non Library ' 카테고리의 다른 글
영상처리 색변환 (0) | 2014.01.28 |
---|
설정
트랙백
댓글
글
멀티스레드 개념 정리
CPU 코어 하나에 여러개의 스레드를 한 명령어씩 돌아가며 처리한다.
(OS가 각 스레드에게 CPU를 사용할수 있는 시간을 할당 즉 스케줄링 한다. 스케줄 순서에 따라 번갈아가며 수행된다)
void thread()
{
int a = 0;
int b = 0;
a++; //명령문 1
b++;// 명령문 2
a += b; //명령문 3
}
이러한 쓰레드가 3개가 있다면,
코어
스레드 a의 명령문 1를 수행한다.
스레드 a의 스택정보와 레지스트 정보를 임시 저장한다.
스레드 b의 스택정보와 레지스트 정보를 불러온다.
스레드 b의 명령문 1를 수행한다.
스레드 b의 스택정보와 레지스트 정보를 임시 저장한다.
스레트 c의 명령문 1를 수행한다
스레드 c의 스택정보와 레지스트 정보를 임시 저장한다.
스레드 a의 스택정보와 레지스트 정보를 불러온다.
스레드 a의 명령문 2를 수행한다.
다시 스레드 b의...(이하 반복)
를 수행한다.
만약에 코어가 두 개가 있을시에는
상대방 코어가 처리하고 있지 않은 스레드의 명령문을 처리한다.
'프로그래밍 > C/C++' 카테고리의 다른 글
[STL] 정렬 컨테이너1 (set, multiset, map, multimap) (0) | 2014.02.09 |
---|---|
[STL] 제네릭(generic) 기초 정리 (0) | 2014.02.09 |
[STL]기초, 컨테이너(vector, deque, list) (0) | 2014.02.09 |
pthread 함수정리 (1) | 2014.01.31 |
윈도우 스레드(win thread) - 세마포어예제 (0) | 2014.01.29 |
설정
트랙백
댓글
글
동적계획법
아래의 글을 보고 둘 사이의 차이점을 이해해 보자.
▶분할 정복법과 동적 계획법을 이용한 n!구하기
1) 분할정복법
int fact(int n); main() { int n, k; table[1] = 1; scanf("%d", &n); k = fact(n); } int fact(int n) { int i; if(n < 1) return 1; k = n * fact(n-1); return k; }
2) 동적계획법
void fact(int n); main() { int n; table[1] = 1; scanf("%d", &n); fact(n); } void fact(int n) { int i; for(i=2; i <=n; i++) table[i] = i * table[i-1]; }
<동적계획법>
위의 펙토리얼 프로그램은 n!의 값을 분할정복법과 동적계획법의 과정을 나타낸다.동적 계획법을 이용한 프로그램은 최종 결과값을 만들기 위해 처음부터 하나씩 해결해서 배열에 넣는다. 그렇게 구한 값을 이용하여 최종 결과값을 얻게 된다.
<분할정복법>
반면, 분할정복법으로 짜여진 프로그램은 값을 구하기 위해 부분 문제의 해를 구하고, 그 부분문제의 해를 구하기 위해 부분 문제의 부분 문제의 해를 구하는 방식으로 동작한다.
void table[100]; main() { table[0] = 1; table[1] = 1; scanf("%d", &n); fi(n); } void fi(int n) { int i; for(i=2; i<=n; i++) table[i]:=table[i-1]+table[i-2]; }
피보나치 수열을 구하기 위한 점화식은 F(n) = F(n-1) + F(n-2) 이다. 배열을 이용하여 F(1) + F(2), F(2) + F(3), ..., F(n-1) + F(n-2)를 구하는 방식으로 값을 구하였다. 분할 정복법에서는 F(n) = F(n-1) + F(n-2)에서 시작하여 F(n-1)과 F(n-2)를 각각 구한뒤 마지막에 결과를 합치는 방식으로 문제를 푼다.
▶ 분할정복법 : 큰 문제를 부분으로 분할하여 각각의 부분 문제를 해결한뒤 결과를 모음
▶ 동적계획법 : 작은 문제를 하나하나 계산하여 원하는 결과에 도달
'알고리즘' 카테고리의 다른 글
c언어 시계방향으로 최소값 구하기 (0) | 2014.10.22 |
---|---|
문자열 비교(strcmp) (0) | 2014.10.22 |
c언어 char int변환 (0) | 2014.10.22 |
int 형 데이터 자리수 구하기 (0) | 2014.10.22 |
C언어 최대공약수 최소공배수 구하기 (0) | 2014.10.22 |