일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- numpy/pandas
- 딥러닝
- 중학1-1
- 텍스트마이닝
- 정보처리기사필기
- C++
- 자바 실습
- 코딩테스트
- CSS
- 연습문제
- 자바
- 컴퓨터비전
- 데이터입출력구현
- 영어공부
- 데이터베이스
- 파이썬라이브러리
- SQL
- JSP/Servlet
- 혼공머신
- pandas
- 중학수학
- 파이썬
- 운영체제
- 머신러닝
- 정수와유리수
- 정보처리기사실기
- html/css
- CNN
- 컴퓨터구조
- 데이터분석
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
지역 특징 6 - 연습문제 풀기 2 : 문제 3~5번 본문
이어서 3번 문제부터 풀어보겠다. 조금 전에 푼 문제가 너무 어려워서 해결하지 못하는 문제를 가지고 1시간 반이나 붙잡고 있었다. 결국 풀지 못했지만 답을 구하는 것만이 능사는 아니라는 것을 느끼는 시간이었다. 문제와 씨름하는 그 시간이 정말 소중한 시간이었다.
도무지 풀 수 없는 문제 앞에서 좌절하지 않고 용기를 내며 나아가는 나의 모습이 무척 뿌듯하고 자랑스러웠다. 요즘은 개발 공부하는 속도가 너무 느리라는 생각이 들 때도 있다. 특히 컴퓨터 비전은 진도가 잘 안 나간다. 그래도 난 많이 배우고 있고 성장하고 있다고 믿기로 했다.
연습문제 풀기 두 번째
문제 3번
프로그램 5-2의 10, 14행은 가능한 모든 키를 생성하고, 18행은 키포인트를 그린다.
(1) 키포인트를 2개만 생성하도록 프로그램 5-2를 수정하시오
▶ 힌트 : 키포인트 개수는 SIFT_create 함수에서 nfeatures 인수를 설정하면 된다.
(2) 2, 4, 6, 8, 16, ..., 512개의 키포인트를 생성하고 각 결과를 서로 다른 윈도우에 디스플레이하도록 프로그램을 확장하시오.
(3) (2)의 결과를 잘 살펴, SIFT는 어떤 특성의 키포인트를 선호하는지 분석하시오.
5-2 프로그램
(1) 키포인트를 2개만 생성하도록 프로그램 5-2를 수정하기
주어진 코드에서 SIFT를 사용하여 검출하는 키포인트의 개수를 2개로 제한하도록 수정하려면, cv.SIFT_create(nfeatures=2)로 nfeatures 인수를 설정하면 된다.
하지만 이렇게 하니 키포인트가 한 개도 보이지 않는다. 그 이유는 SIFT에서 키포인트가 생성되지 않는 경우는 이미지에 뚜렷한 특징점(코너나 강한 엣지)이 없거나 nfeatures 값을 너무 작게 설정했기 때문이다. nfeatures를 2로 설정한 경우, 이미지 내에서 우선순위가 가장 높은 두 개의 특징점을 찾도록 제한되므로, 이 조건을 만족하는 충분히 강한 특징이 없을 수 있다.
(2) 2, 4, 6, 8, 16, ..., 512개의 키포인트를 생성하고 각 결과를 서로 다른 윈도우에 디스플레이하도록 프로그램을 확장하기
nfeatures 값을 순차적으로 변경하여 여러 개의 키포인트 수를 생성하고, 이를 각각의 윈도우에 출력하도록 할 것이다.
키포인트가 2개인 것은 거의 보이지가 않는다.
4개인 것은 아주 조그만하게 보인다.
256개쯤 되니 이제 알록달록하게 많이 보인다.
512개는 확연한 차이가 보인다.
(3) (2)의 결과를 잘 살펴, SIFT는 어떤 특성의 키포인트를 선호하는지 분석하시오.
SIFT(Scale-Invariant Feature Transform) 알고리즘은 이미지에서 다양한 크기와 방향의 특징을 검출하는 데 강력한 도구로, 주로 다음과 같은 특성을 가진 키포인트를 선호한다는 것을 알 수 있다.
1. 코너점과 텍스처가 풍부한 영역
- SIFT는 코너와 텍스처가 풍부한 영역에서 강한 특징점을 검출한다. 코너는 두 방향으로 밝기 변화가 뚜렷하게 나타나는 지점이므로, SIFT가 안정적인 특징점으로 인식하기 좋다. 텍스처가 풍부한 영역에서는 다양한 방향과 크기의 변화가 있어 SIFT가 여러 크기와 방향의 특징을 찾기에 적합하다.
- 예를 들어, 창문 모서리, 도로 표지판의 글자, 또는 건물의 윤곽선 등이 키포인트로 검출될 가능성이 높다.
2. 명확한 에지와 경계선이 있는 영역
- SIFT는 이미지의 밝기 변화가 뚜렷한 에지에서도 키포인트를 찾을 수 있지만, 단순한 에지보다는 두 방향으로 변화가 강한 코너를 더 선호한다. 직선 경계만 있는 단순한 에지보다는 복잡한 모양이 나타나는 부분에서 더 많은 키포인트가 검출된다.
3. 크기와 회전 변화에 불변한 특징
- SIFT는 다양한 크기와 방향으로 이미지를 스케일-공간에서 분석하기 때문에, 크기나 회전에 강한 불변성을 가진 특징점을 선호한다. 이는 SIFT가 회전된 이미지나 스케일이 달라진 이미지에서도 안정적으로 키포인트를 검출할 수 있게 한다.
- 실험 결과에서 키포인트 개수를 증가시키면 작은 크기의 특징점이나 회전된 부분에서도 키포인트가 생성되는 것을 확인할 수 있다.
4. 노이즈가 적고 명암 대비가 강한 부분
- SIFT는 밝기와 색상 대비가 뚜렷한 영역에서 더 강한 키포인트를 생성한다. 노이즈가 많은 부분보다는 선명하고 깨끗한 부분에서 안정적인 특징을 찾을 가능성이 높다.
- 따라서, 이미지에서 대비가 뚜렷한 사물이나 구조물이 있는 부분에서 많은 키포인트가 검출된다.
실험에서 나타나는 경향
- 적은 키포인트 (2, 4, 6): 주로 가장 뚜렷한 코너나 명확한 텍스처가 있는 영역에서 검출된다.
- 중간 키포인트 (16, 32, 64): 건물의 코너, 차량 모서리 등에서 더 많은 키포인트가 생성되며, 주요 특징이 있는 부분을 더 자세히 표현한다.
- 많은 키포인트 (256, 512): 이미지의 다양한 크기와 위치에서 더 세밀한 키포인트를 찾으며, 복잡한 텍스처나 여러 방향의 특징들이 있는 부분에서도 키포인트가 생긴다.
이러한 결과는 SIFT가 다양한 크기와 방향으로 강력한 불변성을 가지는 특징을 찾는 데 적합하다는 점을 보여준다. SIFT는 코너와 같은 뚜렷한 특징을 우선으로 검출하되, 이미지의 크기나 방향 변화에 강한 특성을 가진다.
문제 4번
SIFT의 변종 부분에서 SURF가 SIFT에 비해 6배가량 빠르다고 설명한다. SURE가 속도 향상을 달성하는 원리를 설명하시오.
SURF(Speeded Up Robust Features)는 SIFT의 성능을 개선하여 속도를 약 6배가량 빠르게 만든 변형 알고리즘이다. SURF가 속도 향상을 달성할 수 있는 주요 원리는 다음과 같다.
1. Haar Wavelet과 적분 이미지(Integral Image) 사용
- SIFT는 이미지의 스케일-공간을 생성하고, 각 픽셀의 밝기 변화에 대한 미분을 계산하여 특징을 검출한다. 이 과정에서 가우시안 필터를 사용해 미분을 계산하므로 연산 비용이 크다.
- 반면, SURF는 Haar Wavelet 필터를 사용하여 x 및 y 방향의 밝기 변화(1차 미분)를 계산한다. Haar Wavelet은 가우시안 필터보다 계산이 간단하여 연산 비용이 적다.
- 또한, 적분 이미지(Integral Image)를 사용하여 밝기 합을 빠르게 계산한다. 적분 이미지를 사용하면 이미지의 특정 영역 내의 픽셀 값을 일정한 시간 안에 계산할 수 있으므로, 대규모 영역에서의 연산을 크게 줄일 수 있다. 이를 통해 SIFT보다 빠르게 특징을 계산할 수 있다.
2. 스케일 공간에서 Box Filter 사용
- SIFT는 가우시안 필터를 사용해 이미지의 다양한 스케일을 생성하지만, 가우시안 필터의 계산은 느리고 복잡하다.
- SURF는 가우시안 필터 대신 Box Filter를 사용하여 스케일을 생성한다. Box Filter는 일정한 크기의 사각형 내에서 합산하는 방식으로, 적분 이미지와 결합하면 스케일 변화에 따른 특징 검출을 빠르게 수행할 수 있다.
- Box Filter는 가우시안 필터처럼 스케일 변화에 대한 정보를 제공하면서도 연산 비용이 낮아 SURF의 속도를 크게 개선한다.
3. 64차원의 간결한 서술자(Descriptor) 사용
- SIFT의 서술자는 128차원의 벡터로, 각 키포인트에 대해 다양한 방향의 밝기 변화를 기록하여 높은 차원의 정보를 제공한다. 그러나 128차원의 서술자는 계산과 저장에 비용이 크다.
- SURF는 64차원의 간결한 서술자를 사용하여 계산 속도를 높이고 메모리 사용을 줄인다. 이를 통해 더 낮은 차원으로 특징을 표현하면서도, 실용적으로 충분히 강력한 매칭 성능을 유지할 수 있다.
4. 빠른 매칭을 위한 정규화된 벡터 사용
- SURF는 키포인트의 방향성을 표준화하여 매칭 과정에서도 속도를 개선한다. 정규화된 벡터를 사용하여 특징의 방향 정보를 표준화하면, 매칭 과정에서 회전에 대한 불변성을 유지하면서도 계산을 단순화할 수 있다.
SURF는 이러한 최적화된 계산 방식을 통해 SIFT보다 빠른 속도를 달성한다. SURF는 연산 효율성을 높이기 위해 가우시안 필터 대신 적분 이미지와 Box Filter를 사용하고, 낮은 차원의 서술자를 통해 계산 비용을 줄인다. 이로 인해 SIFT에 비해 약 6배 빠른 성능을 보이며, 실시간 애플리케이션에서도 효과적으로 사용할 수 있다.
문제 5번
SIFT는 에지에서 발생한 쓸모없는 키포인트를 찾아 제거하는 후처리 연산을 적용한다. [Lowe2004]를 참고하여 이런 키포인트를 어떻게 찾는지 설명하시오.
SIFT에서 에지에서 발생한 쓸모없는 키포인트를 제거하는 이유는, 에지 근처의 키포인트는 방향성이 불안정하여 매칭에 적합하지 않기 때문이다. [Lowe2004]에 따르면, SIFT는 에지에서 발생한 불안정한 키포인트를 찾아 제거하기 위해 해시안(Hessian) 행렬의 고유값 비율을 이용한다.
에지에서의 쓸모없는 키포인트 제거 방법
에지에서 발생한 불안정한 키포인트는 다음과 같은 방법으로 제거된다.
요약
- SIFT는 에지에서 발생한 쓸모없는 키포인트를 해시안 행렬의 고유값 비율을 통해 찾는다.
- 고유값 비율이 일정 임계값 이상이면 해당 키포인트는 에지에서 발생한 것으로 간주하여 제거한다.
- 이를 통해 에지에 민감한 불안정한 키포인트를 제거하여 더 강력하고 안정적인 특징을 유지할 수 있다.
이 과정을 통해 SIFT는 코너와 같이 방향성이 뚜렷하고 매칭에 유리한 키포인트를 유지하고, 에지에서 발생하는 쓸모없는 키포인트를 제거하여 정확성을 높인다.
학습을 마치고
세 문제를 모두 풀어보았다. 그래도 코드로 작성하는 문제는 풀만하다. 이제 곧 시험이 시작될 것 같지만 그래도 남은 시간 연습문제를 좀 더 풀어볼 생각이다. 이렇게 어려운 공부가 재미있다는 건 정말 신기한 일이다. 조금 전에도 문제는 안 풀렸지만 수식을 보고 어떤 값이 어떻게 들어오고 나오는지를 보고 싶고 알고 싶었다.
남은 문제도 다 풀고 이제 저녁 무렵에 6장 학습을 시작해 볼 것이다. 그리고 저녁식사 전에 아침에 하지 못한 영어 공부를 꼭 해볼 것이다. 3일 이상 공부를 쉬어서는 절대로 안 된다.
'인공지능 > 컴퓨터 비전' 카테고리의 다른 글
지역 특징 8 - 연습문제 풀기 4 : 문제 7~8번 (2) | 2024.11.11 |
---|---|
지역 특징 7 - 연습문제 풀기 3 : 문제 6번 (1) | 2024.11.11 |
지역 특징 5 - 연습문제 풀기 1 : 문제 1~2번 (0) | 2024.11.11 |
지역 특징 4 - 호모그래피 추정 (0) | 2024.11.11 |
지역 특징 3 - 매칭 (1) | 2024.11.11 |