< OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 > 교재 13, 14장 공부
- 13장 객체 검출
13.1 템플릿 매칭
- 템플릿 매칭:
입력 영상에서 작은 크기의 부분 영상 위치를 찾아내고 싶은 경우 사용
- 템플릿 영상을 입력 영상 전체 영역에 대해 이동하면서 템플릿 영상과 입력 영상 부분 영상과의 유사도(similarity) 또는 비유사도(dissimilarity)를 계산
- OpenCV에서는 matchTemplate() 함수를 사용하여 템플릿 매칭을 수행 가능
- matchTemplate() 함수 실행 결과
maxv 값은 템플릿 매칭으로 검출된 위치에서 정규화된 상관계수 값을 나타내며, 이 값이 1에 가까운 실수이므로 매칭이 잘 되었다고 가늠할 수 있음


13.2 캐스케이드 분류기와 얼굴 검출
- OpenCV의 얼굴 검출 기능:
부스팅(boosting) 기반의 캐스케이드 분류기(cascade classifier) 알고리즘을 기반으로 만들어짐
- 비올라-존스 얼굴 검출 알고리즘
기본적으로 영상을 24×24 크기로 정규화한 후, 유사-하르 필터(Haar-like filter) 집합으로부터 특징 정보를 추출하여 얼굴 여부를 판별
- 에이다부스트 알고리즘
수많은 유사-하르 필터 중에서 얼굴 검출에 효과적인 필터를 선별하는 역할을 수행
에이다부스트(adaboost) 알고리즘과 적분 영상(integral image)을 이용
- 캐스케이드 구조
얼굴이 아닌 영역을 걸러 내는 역할을 함
- OpenCV는 비올라-존스 알고리즘을 구현하여 객체를 분류할 수 있는 CascadeClassifier 클래스를 제공
- CascadeClassifier 클래스를 이용하여 얼굴을 검출하는 예제 코드 실행 결과
- 눈 검출 예제 프로그램
13.3 HOG 알고리즘과 보행자 검출
- HOG:
그래디언트 방향 히스토그램을 의미
- HOG 알고리즘
사람이 서 있는 영상에서 그래디언트를 구하고, 그래디언트의 크기와 방향 성분을 이용하여 사람이 서 있는 형태에 대한 특징 벡터를 정의
서포트 벡터 머신(SVM, Support Vector Machine) 알고리즘을 이용하여 입력 영상에서 보행자 위치를 검출하는 방법
(- HOG를 계산하는 방법)
- OpenCV는 HOG 알고리즘을 구현한 HOGDescriptor 클래스를 제공
- 동영상에서 보행자를 검출하는 예제 코드 실행 결과


13.4 QR 코드 검출
- QR 코드:
흑백 격자 무늬 모양의 2차원 바코드 일종으로 숫자, 영문자, 8비트 문자, 한자 등의 정보를 저장할 수 있음
- QR 코드 전체 영역 위치를 알아내기 -> 검출된 QR 코드를 정사각형 형태로 투시 변환 -> QR 코드 내부에 포함된 흑백 격자 무늬를 해석하여 문자열을 추출
- OpenCV에서 QR 코드를 검출하고 해석하는 기능은 QRCodeDetector 클래스에 구현
- 매 프레임마다 QR 코드를 검출하고, 검출된 QR 코드 사각형 영역과 QR 코드에 포함된 문자열을 화면에 함께 표시하는 예제 코드
- 14장 지역 특징점 검출과 매칭
14.1 코너 검출
- 영상에서 특징점으로 사용할 수 있는 코너 점 검출 방법
- 두 영상 사이에 기하학적 변환이 있어도 효과적으로 사용할 수 있는 지역 특징점 기반 매칭 방법
<해리스 코너 검출 방법>
- 영상에서의 특징:
영상으로부터 추출할 수 있는 유용한 정보를 의미하며 평균 밝기, 히스토그램, 에지, 직선 성분, 코너 등
- 지역 특징:
영상의 특징 중에서 에지, 직선 성분, 코너처럼 영상 전체가 아닌 일부 영역에서 추출할 수 있는 특징
- 특징점(== 키포인트, 관심점)
코너처럼 한 점의 형태로 표현할 수 있는 특징
- E(Δx, Δy) 함수가 모든 방향으로 값이 크게 나타난다면 점 (x, y)는 코너라고 간주할 수 있음
- OpenCV는 해리스 코너 응답 함수 값을 계산하는 cornerHarris() 함수를 제공
- 코너 위치를 빨간색 원으로 표시하는 코드 실행 결과


임계값 120을 낮추면 더 많은 건물 모서리를 코너로 검출할 수 있지만, 나뭇잎 또는 풀밭에서 코너로 검출되는 부분도 함께 늘어날 수 있으므로 주의해야 함
<FAST 코너 검출 방법>
- 복잡한 연산을 필요로 하기 때문에 연산 속도가 느리다는 기존의 단점을 해결
- 단순한 픽셀 값 비교 방법을 통해 코너를 검출
- 어두운 픽셀이 아홉 개 이상 연속으로 존재하면 코너로 정의
- OpenCV는 FAST 코너 검출 방법을 구현한 FAST() 함수를 제공
- FAST 방법으로 검출된 코너 점을 빨간색 원으로 표시하는 코드 실행 결과
대부분의 건물 모서리와 나뭇잎 부분에서 다수의 코너가 검출된 것을 확인할 수 있음

14.2 크기 불변 특징점 검출과 기술
- 영상의 크기가 변경되거나 회전이 되어도 반복적으로 찾을 수 있는 크기 불변 특징점 검출 방법과 검출된 특징점을 표현하는 기술 방법
<크기 불변 특징점 알고리즘>
- SIFT(크기 불변 특징 변환)
영상의 크기 변화에 무관하게 특징점을 추출하기 위하여 입력 영상으로부터 스케일 스페이스(scale space)를 구성
체 인식, 파노라마 영상 이어 붙이기, 3차원 장면 인식 등의 분야에서 효과적으로 사용
DoG 영상 집합에서 인접한 DoG 영상을 고려한 지역 극값 위치를 특징점으로 사용하며, 이후 에지 성분이 강하거나 명암비가 낮은 지점은 특징점에서 제외
- DoG(Difference of Gaussian) 영상
SIFT 알고리즘에서 크기에 불변한 특징점을 검출할 때에는 인접한 가우시안 블러링 영상끼리의 차영상을 사용
<OpenCV 특징점 검출과 기술>
- OpenCV에서 특징점 정보를 저장할 때 사용하는 KeyPoint 클래스
- detect_keypoints() 함수 실행 결과
ORB 알고리즘으로 검출된 특징점을 표시한 것임

14.3 특징점
<OpenCV 특징점 매칭>
- 특징점 매칭
두 영상에서 추출한 특징점 기술자를 비교하여 서로 비슷한 특징점을 찾는 작업을 의미
크기 불변 특징점으로부터 구한 기술자를 매칭하면 크기와 회전에 강인한 영상 매칭을 수행할 수 있음
- OpenCV에서 특징점 매칭 정보를 저장할 때 사용하는 DMatch 클래스
- DescriptorMatcher 클래스를 상속받아 만들어진 클래스 중에서 BFMatcher 클래스
- FlannBasedMatcher 클래스는 Flann 라이브러리를 이용하여 빠르게 매칭을 수행하는 클래스
- BFMatcher 또는 FlannBasedMatcher 클래스 객체를 생성하려면 각 클래스에 정의되어 있는 create() 정적 멤버 함수를 사용
- DescriptorMatcher::match() 함수: desc1에 포함된 각각의 기술자와 가장 유사한 기술자를 desc2에서 찾고, 그 결과를 vector<DMatch> 타입의 변수 matches에 저장
- drawMatches() 함수는 두 매칭 입력 영상을 가로로 이어 붙이고, 각 영상에서 추출한 특징점과 매칭 결과를 다양한 색상으로 표시한 결과 영상을 생성
- ORB 알고리즘을 이용하여 두 장의 영상에서 특징점을 검출하고 서로 매칭하는 예제 코드 실행 결과

- 키포인트 매칭 후 좋은 매칭 결과만 추출하고, 그 결과를 화면에 출력하는 예제 코드
good_matching() 함수는 코드 14-6의 keypoint_matching() 함수 정의에 좋은 매칭 선별 코드가 추가된 형태

<호모그래피와 영상 매칭>
- 특징점 매칭 결과로부터 두 영상의 호모그래피(homography)를 계산하고, 이를 이용하여 크기가 다르고 회전이 되어 있는 객체를 정확하게 매칭하는 방법
- 호모그래피
3차원 공간상의 평면을 서로 다른 시점에서 바라봤을 때 획득되는 영상 사이의 관계를 나타내는 용어
- OpenCV는 두 영상 평면에서 추출된 특징점 매칭 정보로부터 호모그래피를 계산할 때 사용할 수 있는 findHomography() 함수를 제공
- find_homography() 함수 실행 결과
잘못 매칭된 특징점들이 여럿 있음에도 스낵 박스 위치를 제대로 찾아내는 것을 확인할 수 있음

14.4 영상 이어 붙이기
- 영상 이어 붙이기
여러 장의 영상을 서로 이어 붙여서 하나의 큰 영상을 만드는 기법
- 입력으로 사용할 영상은 서로 일정 비율 이상으로 겹치는 영역이 존재해야 하며, 서로 같은 위치를 분간할 수 있도록 유효한 특징점이 많이 있어야 함
- 수행 단계
1. 입력 영상에서 특징점을 검출
2. 서로 매칭을 수행하여 호모그래피를 구하기
3. 구해진 호모그래피 행렬을 기반으로 입력 영상을 변형하여 서로 이어 붙이는 작업을 수행
4. 영상을 이어 붙인 결과가 자연스럽게 보이도록 이어 붙인 영상의 밝기를 적절하게 보정하는 블렌딩(blending) 처리
- OpenCV는 이러한 일련의 영상 이어 붙이기 작업을 수행하는 Stitcher 클래스를 제공
- 영상 이어붙이기 예제 실행 결과
'컴퓨터 비전(OpenCV) 스터디' 카테고리의 다른 글
| 230626-230702 스터디 (0) | 2023.07.03 |
|---|---|
| 230626-230702 스터디 (0) | 2023.06.29 |
| 230619-25 스터디 (0) | 2023.06.22 |
| 230619-25 스터디 (0) | 2023.06.22 |
| 230612-18 스터디 (0) | 2023.06.18 |