160225_한상훈.

Download Report

Transcript 160225_한상훈.

Pride
Power
P3 in VISION laboratory…
Passion
7th week Presentation
Vision System Lab, Sang-Hun Han
OpenCV
• OpenCV(Open Computer Vision)
– 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발하였다.
– 윈도우, 리눅스 등의 여러 플랫폼에서 사용할 수 있으며 실시간 이미지 프로세싱에
중점을 둔 라이브러리이다.
OpenCV
• Harris Corner
– 해리스 코너는 Chris Harris라는 사람이 1988년 제안
– 해리스 코너 검출기는 미분값에 기반을 둔 검출 방법
– 코너 응답 함수(CRF-Corner Response Function)을 기반으로 코너를 파악
– 해리스 코너 검출 과정
•
•
•
•
•
1. 소벨 마스크를 이용해 미분값을 계산
2. 미분값의 곱 계산
3. 미분값에 가우시안 마스크 적용
4. 코너 응답 함수(CRF) 계산
5. 비최대값억제(Non-maximum suppression)
– 아래의 행렬식은 2x2 행렬의 고유벡터(Eigen Vector)가 얼마나 서로 수직인 방향으
로 큰 값을 갖는지를 측정
𝑀=
𝐼𝑥 2
𝐼𝑥𝑦
𝐼𝑥𝑦
𝐼𝑦 2
OpenCV
• Harris Corner
– 여기서 𝐼𝑥 와 𝐼𝑦 는 각각 영상에서 가로와 세로 방향의 미분값을 나타냄
– 이러한 행렬에서 고유벡터(Eigen Vector)를 구하면 경계선 방향에 수직인 벡터 2개
를 얻을 수 있음
– 각각 두 벡터는 수직일 경우와 수직보다 작을 경우, 수직보다 클 경우로 구분
– 이 때, 수직인 경우가 가장 좋은 코너점
– 고유벡터를 구하기 위해선 고유값 분해(Eigen Value Decomposition)을 계산해야 하
지만 복잡하고 시간이 많이 소요됨
– 따라서 해리스 코너 검출기에서는 고유벡터를 직접 구하지 않고 코너 응답 함수
(CRF)를 사용
det 𝑀 − 𝐾 ∙ 𝑇𝑟𝑎𝑐𝑒 𝑀
2
= 𝐼𝑥 2 ∙ 𝐼𝑦 2 − 𝐼𝑥𝑦 ∙ 𝐼𝑥𝑦 − 𝐾 ∙ (𝐼𝑥 2 + 𝐼𝑦 2 )2
– 여기서 det(M)은 행렬식을 뜻하고, Trace(M)은 행렬의 대각합을 뜻함
– K값은 보통 0.04를 사용
– 위와 같이 모든 점들에 관해 코너 응답 함수(CRF)를 구하고, 그 값이 적절한 임계값
(Threshold) 이상이면 코너로 판별
OpenCV
– Source Code
타이머 구현
버튼 함수 구현
OpenCV
– Source Code
클래스 함수 구현
OpenCV
– Result
OpenCV
• Descriptor(기술자)
– 만약 아래 두 사진을 비교한다고 할 때 가장 쉽게 생각할 수 있는 방법은?
– 두 사진이 같은 사진인지, 아닌지를 판단하는 방법은 같은 위치에 있는 두 영역
(patch)가 모두 같으면 같은 사진이고 아니면 다른 사진
– 위와 같이 가장 간단하면서 쉬운 방법은 영상에서의 다양한 위치에 존재하는 patch
를 비교하면 알 수 있음
– 영상처리 및 컴퓨터 비전에서도 마찬가지로 다양한 부분을 비교하여 많은 부분이 일
치하면 동일한 사진이라고 판단하는 방법이 물체의 위치를 찾는데 사용
OpenCV
• Descriptor(기술자)
– 판별 과정
•
•
•
•
1. 두 사진에서 distinctive한 keypoint를 찾음(코너, 에지 등)
2. 두 사진의 keypoint의 주변을 각각 비교하여 일치 여부를 판단
3. 주변 위치가 일치한 keypoint 위치를 쌍으로 homography(호모그래피)를 계산
4. 첫번째 이미지의 위치를 두번째 이미지 위치로 조정
– 기술자 함수란 사진에서 특정 영역에 대한 부분을 서로 비교하기 위해 동일한 방법
을 통해 사진에서의 특징을 하나의 비교 대상으로 만드는 것
– 기술자 함수는 단순하게 영역을 비교하기 위해 설계되어야 하지만, 매우 복잡한 문
제를 가지고 있음
– 사진이 회전되었을 경우, 잡음이 섞여 있을 경우, 조명이나 외곡이 있을 경우
OpenCV
• HOG Descriptors(Histograms of Oriented Gradients)
– HoG는 대표 기술자로 잘 알려진 SIFT, SURF 등 다양한 곳에서 사용하고 있음
– SIFT는 1999년 캐나다 대학(UBC-University of British Columbia) 교수인 David
Lowe가 발표한 논문에서 소개
– SIFT에서는 두 개의 Keypoint와 Descriptor를 사용하여 두 사진을 매칭
– 첫번째로 SIFT에서는 Scale에 불변한 Keypoint를 찾은 후, Keypoint 위치를 warp하
여 16x16 사이즈의 윈도우를 생성
– 다음으로 각 픽셀에 대해 기울기를 계산(Orientation and magnitude)
– 각 픽셀에 대하여 아래 사진과 같이 16개의 4x4 블록 사각형에 포함된 영역에 대한
기울기를 계산
OpenCV
• HOG Descriptors(Histograms of Oriented Gradients)
– 각각의 사각형에 대해 8방향의 히스토그램을 계산
– 위와 같은 방법으로 히스토그램을 구하면 16개의 히스토그램을 8방향으로 표현한
128차원(16*8)의 벡터를 생성할 수 있음
– 히스토그램의 방향을 통해 기술자로 사용하는 방법이 HoG
OpenCV
• SURF(Speed-Up Robust Features)
– 2004년 SIFT의 등장 이후 물체의 descriptor에 대한 관심이 높아진 이후로 많은 연
구가 진행
– SIFT의 최대 단점인 연산의 복잡성을 해소하기 위한 방법으로 SURF 등장
– SIFT 못지 않게 성능을 유지하며 계산 속도를 향상 시키고자 함
– 1. Integral Image(적분 이미지) 이용
•
•
SURF에서는 SIFT와 다르게 적분 영상을 사용하여 관심점과 영역을 찾음
관심점 계산을 위해 고속 헤시안 검출(Fast Hessian Detector)를 사용
OpenCV
• SURF(Speed-Up Robust Features)
– 2. 축소한 Detector와 Descriptor를 사용(빠른 차원수 축소)
•
•
•
•
•
관심점을 계산하기 위해 SURF는 헤시안(Hessian) 행렬을 사용
정확성이 좋고 Deteminant가 최대값인 위치의 blob 구조를 검출하기 위해 사용
만약 Deteminant(판별식)가 음수이고 eigenvalue가 서로 다른 부호이면 해당 좌표는 관심점이 아니고,
Determinant가 양수이고 eigenvalue가 둘 다 음수 혹은 양수이면 해당 좌표는 관심점으로 판단
SURF의 경우 2차 미분을 Gaussian을 사용하는데, Scale-Space를 분석하는데 가우시안이 가장 최적이라
고 판단하여 사용함을 논문에 명시
또한 가우시안 분포의 헤시안 행렬을 계산할 때, 계산을 좀 더 단순화 시키기 위해 근사화한 Dxx와 Dyy
박스필터를 사용
OpenCV
• SURF(Speed-Up Robust Features)
– 2. 축소한 Detector와 Descriptor를 사용(빠른 차원수 축소)
•
SURF도 Scale에 강인하기 위해 SIFT와 비슷하게 여러 크기에서 관심점을 추출
•
선정한 관심점을 비 최대지 억제(Non Maximum Suppression)을 통해 크기 공간에 대한 극대값(검출된
관심점)을 선정하여 보간법을 적용
최종 보간된 관심점을 중심으로 6 Scale 의 원 안에 있는 이웃들에 관해 x, y 방향의 Haar wavelet
response를 계산
Descriptor를 생성하기 위해 관심점 주위 20 Scale 크기의 윈도우를 구성해 이미지를 회전시킨 뒤 계산(
회전에 강인하기 위해)
•
•
OpenCV
• SURF(Speed-Up Robust Features)
– 3. Contrast를 이용한 빠른 매칭
•
헤시안 행렬을 계산한 라플라시안 부호를 비교해 간단히 매칭을 시도(부호 비교)
OpenCV
• OpenCV Mat 구조체
– OpenCV 1.x 버전에서는 C 언어를 이용하여 구조체 형식으로 영상의 자료 구조를
표현하였고, OpenCV 2.x 버전부터 C 언어 기반의 자료 구조를 포함하여 클래스와
템플릿 형식으로 영상 자료 구조를 표현
– 기존의 ‘IplImage’와 ‘CvMat’의 구조체를 ‘cv::Mat’ 클래스로 대체함으로써 화소의
접근이나 데이터 처리 등에서 편리하고 빠르게 접근할 수 있음
– OpenCV의 C 기반 자료 구조와 C++ 기반 자료 구조의 차이
•
•
•
C API를 사용하면, 계산을 위해 사용하는 영상 데이터(IplImage)의 크기와 타입을 미리 설정하고 초기화
해야하고 생성한 영상 데이터의 메모리를 매번 해제해야 함
반면 C++ API로 구현하면 함수에서 돌려받는 영상 데이터의 크기와 타입이 입력에 맞게 자동으로 설정
되기 때문에 미리 설정하지 않아도 됨
또한 클래스 소멸자에서 각 영상 데이터의 메모리를 자동으로 해제하기 때문에 메모리 해제를 고려하지
않아도 됨
OpenCV
– Source Code
•
console version
OpenCV
– Result
OpenCV
• Outlier 와 Inlier
– 특징점을 기반으로 하는 객체 인식 방법에서 일반적으로 마지막 단계는 정합점들의
집합들 사이에서 아웃라이어(Outlier)라고 불리우는 오정합점을 제거하고 인라이어
(Inlier)라고 불리우는 정정합점을 추출하는 단계가 필요
– 이러한 방법들 중 대표적인 방법으로 RANSAC, PROSAC, StaRSaC 등의 방법이 존
재
ORB 매칭 결과
OpenCV
• Outlier 와 Inlier
– RANSAC(RANdom SAmple Consensus)
•
노이즈가 심한 원본 데이터로부터 모델 파라미터를 예측하는 방법
•
•
•
•
주어진 전체 샘플에서 상당히 적은 샘플을 수집
주어진 샘플로 모델 파라미터를 구함
전체 모델 집합에서 위에서 구한 모델 파라미터로 피팅해봤을때 일정 범위 안에 만족하는 것만(Inlier) 수집
위의 과정을 통해 fitting을 수행하고 Cost를 구하여 Cost가 높은 파라미터를 최종적으로 선택
OpenCV
– 수고하셨습니다.