일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- 가우시안 필터링
- 영상처리
- 해리스 코너 검출
- 딥러닝 스터디
- 모두의 딥러닝
- c++공부
- 파이토치
- tensorflow 예제
- object detection
- 모두의 딥러닝 예제
- C언어 공부
- 파이토치 김성훈 교수님 강의 정리
- c언어 정리
- 컴퓨터 비전
- 팀프로젝트
- pytorch
- 딥러닝
- 파이토치 강의 정리
- pytorch zero to all
- matlab 영상처리
- MFC 프로그래밍
- Pytorch Lecture
- 딥러닝 공부
- 미디언 필터링
- 김성훈 교수님 PyTorch
- 골빈해커
- TensorFlow
- c++
- 케라스 정리
- Today
- Total
ComputerVision Jack
[컴퓨터 비전 - 지역 특징점 검출과 매칭2] 본문
크기 불변 특징점 검출과 기술
코너는 회전 불변 특징점이다.
하지만 영상의 크기가 변경되는 과정에 있어서 코너가 아닐 수 도 있다.
위 그림을 통하여 크기가 다른 두 객체 영상을 코너 점을 이용하여 같은 위치를 판별하는 것에는 한계가 있다.
SFIT(Scale Invariant Feature Transform) 알고리즘
영상의 크기 변화에 무관하게 특징점을 추출하기 위해 입력 영상으로부터
스케일 스페이스(Scale space)를 구성한다.
스케일 스페이스는 다양한 표준편차를 이용한 가우시안 블러링을 적용하여 구성한 영상 집합이다.
한줄의 영상을 옥타브(octave)라고 부른다. 입력 영상의 크기를 가로, 세로 반으로 줄여가며 여러 옥타브를 구성한다.
SIFT알고리즘에서 크기에 불변한 특징점을 검출할 때, 인접한 가우시안 블러링 영상끼리 차영상을 사용한다.
이러한 차영상을 DoG(Difference of Gaussian)영상이라고 한다.
SIFT알로리즘은 특징점 검출하는 기능뿐만 아니라 특징점 주변의 픽셀 값을 이용한 기술자(descriptor)계산 방법도 포함
특징점 부근의 부분 영상으로부터 그래디언트 방향 히스토그램을 추출하여 기술자로 사용한다.
static Ptr<ORB> ORB::create(int n feature = 500, float scaleFactor = 1.2f, int nlevels = 8,
int edgeThreshold = 32, int firstLevel = 0, int WTA_K = 2, ORB::ScoreType scoreType = ORB::HARRIS_SCORE, int patchSize = 31, int fastThreshold = 20);
#ORB 클래스 객체를 생성하는 함수
ORB는 SIFT와 마찬가지로 특징점 검출과 기술을 함께 지원하는 알고리즘.
KAZE 특징점 검출 알고리즘을 사용하고 싶다면, KAZE::create()로 변경하면 된다.
virtual void Feature2D::detect(InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask = noArray());
#특징점 검출할 때, Feature2D::detect() 가상 멤버 함수를 사용한다.
virtual void Feature2D::compute(InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors);
#검출된 특징점에서 특징점 주변의 부분 영상을 표현하는 기술자 추출하는 가상 멤버 함수
virtual void Feature2D::detectAndCompute(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, OutputArray descriptors, bool useProvidedKeypoints = false);
#특징점 검출과 기술자를 한번에 수행하는 멤버 함수
void drawKeyPoints(InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage, const Scalar& color = Scalar::all(-1), DrawMatchesFlags flags = DrawMatchesFalgs::DEFAULT);
#검출된 특징점을 직접 영상 위에 그린다.
특징점 매칭
두 영상에서 추출한 특징점 기술자를 비교하여 서로 비슷한 특징점을 찾는 작업
크기 불변 특징점으로부터 구한 기술자를 매칭하면 크기와 회전에 강인한 영상 매칭을 수행할 수 있다.
DMatch 클래스 사용
static Ptr<BFMatcher> BFMatcher::create(int normType = NORM_L2, bool, crossCheck = false);
#실제 매칭을 수행하는 BFMatcher 객체 생성
static Ptr<FlannBasedMatcher> FlannBasedMatcher::create();
#실제 매칭을 수행하는 FlannBasedMatcher 객체 생성. 조금더 단순하다.
void DescriptorMatcher::match(InputArray queryDescriptors, InputArray trainDescriptors, std::vector<DMatch>& matches, InputArray mask = noArray()) const;
#첫번째 입력 영상에서 포함된 기술자와 가장 유사한 기술자를 두번째 입력 영상에서 찾아낸다.
결과를 vector<DMatch>타입 변수 matches에 저장한다.
void drawMatches() 함수를 이용하여 매칭 결과를 가시적으로 표기한다.
'Image Processing > Computer Vision' 카테고리의 다른 글
[컴퓨터 비전 - 영상 크로마키] (0) | 2020.07.13 |
---|---|
[컴퓨터 비전 - 머신 러닝] (0) | 2020.02.10 |
[컴퓨터 비전 - 지역 특징점 검출과 매칭] (0) | 2020.02.05 |
[컴퓨터 비전 - 객체 검출] (0) | 2020.02.04 |
[컴퓨터 비전 - 레이블링과 외각선 검출] (0) | 2020.02.03 |