rescale the patch
rescale the patch
: crop하는 영역의 크기를 다르게 한다.automatic scale selection
automatic scale selection
:
patch들의 scale이 다르더라도 대응되는 값이 갖도록 하는 함수를 design하는 것.
극값(local maxima, local minima)을 이용하여 얼만큼 scaling할 것인지 판단할 수 있다.
patch의 scaling이 커짐에 따라서 각각의 image에 적합한 scale을 찾을 수 있다
적합한 scale이 찾아지면,
해당 patch를 우리가 알고 있는 일반적인 좌표(canonical size)로 갖고 와서 normalization하고,
그 상태에서 feature를 추출하면, scale에 invariant한 feature를 추출할 수 있음
적합한 patch size가 넓은 구간에 걸쳐서 존재하는 것보다 stable하면서 sharp한 peak를 갖는 것이 적합한 함수로 여겨진다.
그렇다면 peak점을 어떻게 찾을까?
edge를 찾는 kernel을 convolution시킨다.
이때 일반적으로 사용하는 kernel은 Laplacian of Gaussian(LoG) kernel
이다.
LoG
는 Gaussian에 대한 함수를 2번 미분한 kernel이다.
Laplacian of Gaussian kernel을 사용하여 극값을 찾아내 원하는 scale을 찾아낼 수 있다.
Rotation에 invariant한 descriptor를 찾아보자.
Harris detector에서 eigen vector를 담고 있는 matrix가 존재했었는데,
으로 dominant한 방향을 찾는다면,
해당 image가 어느정도 rotation되어있는지 알 수 있다.
= image에 대한 principal axis를 찾는 것임
찾은 후, warping을 통해 우리가 원하는 좌표계로 옮겨올 수 있다.
이러한 과정은 gradient histogram을 이용해서 진행된다.
HOG descriptor
:
각각의 image에 대해서 gradient를 계산하고,
gradient에 대한 histogram을 생성.
image의 특정 patch들에 대해서,
각 patch들의 gradient가 향하는 방향을 bin을 x축으로 구성하고,
그 count들을 y축으로 설정하면,
해당 gradient들에 대한 histogram을 concat시켜 HOG descriptor를 만들게 되어,
해당 image가 어떤 방향으로 orientation되었는지 알 수 있게 된다.
warping
:warping function W
:Harris detector
:Blob
:Blob filter
를 이용하여 Blob을 detection할 수 있음
Blob filter
는 Laplacian of Gaussian(LoG = DoG 2번 적용)를 적용한다.
From edge to blobs
edge = ripple(잔잔한 물결)
blob = 2개 ripple의 중첩
으로 해석할 수 있다.
LoG는 DoG에 의해 이루어지고,
DoG에서 적절한 를 찾는 것이 blob에 대한 올바른 scale을 찾는 데에 중요한 요소가 된다.
우리는 response가 maximum, minimum이 되는 영역이 존재해야 해당 영역이 blob이라고 detection할 수 있었는데,
Gaussian의 가 커질수록 해당 signal에 대해서 LoG를 적용했을 때, 그에 대한 response가 decay되어 blob을 detection하기 힘들어진다.
따라서 Gaussian kernel에다가 scale factor를 곱해주는 형태로, LoG를 형성하게 된다.
따라서scale-normalized LoG
는 다음과 같다.
그러면, 이제 어떤 scale일 때 LoG이 maximum response를 보일까?
➡️ 에 대해서 미분하고, 그것을 0으로 놓고, 는 얼마인가? 를 찾으면 극값을 알 수 있다.
그때의 극값 =
characteristic scale
:
Lapacian kernel을 적용했을 때, maximum response를 보이는 scale값.
SIFT
: Scale Invariant Feature Transformscale-space extrema detection
:keypoint localization and filtering
:orientation assignment
:creation of SIFT keypoint descriptor
:Blob들을 찾아내기 위해서 characteristic scale을 확인했었는데,
이러한 것들을 찾아내기 위해서 어떻게 scale-space를 표현하는가?
➡️ 원본 image에서 점진적으로 blur한 image를 만들어 낸다.
image에 대해서 Daussian filter를 적용하여 blur하게 만든다.
➡️ 이때, 로 표현되는 scale space function이 정의된다.
주어진 image에서 Gaussian kernel을 적용한 결과와 차이를 DoG로 정의.
그런데 LoG를 계산할 때, Gaussian kernel size가 커짐에 따라서 LoG에 대한 response가 decay되는 것을 확인했었음.
따라서 scaled-normalized LoG
를 적용.
하지만, LoG
를 계산하기 위해 x, y에 대한 2차 편미분을 계산해야 하기 때문에 computational cost가 크다.
특정 연구에서, DoG 함수의 차이로 근사할 수 있다고 확인되어졌다.
따라서 직접적으로 LoG를 계산하지 않고, DoG 함수의 차이를 이용하여 LoG를 근사할 수 있다.
그래서 Gaussian kernel size를 점진적으로 크게하여 점진적으로 blur되어진 image들에 대해서
DoG를 계산한다.
이때, 가운데 있는 층(3x3)과 위아래 층들을 비교하여
global max or min이 될 수 있는 local max or min를 추출하여,
SIFT keypoint의 candidate로 갖게 된다.
실제 극값이 아닌데 candidate된 값들이 존재하므로, 그 점들에 대해서 정제하기 위해 2차 근사를 하여 지운다.
추가적으로 후처리가 또 필요하다.
corner 근처에서 2가지 이상의 gradient를 갖게 될 수 있다.
따라서 방향성을 고려한 filtering 과정이 필요하다.
Harris detector에서처럼 hessian을 정의하여, trace와 det를 적용하여 thresholding을 적용한다.
지금까지 SIFT keypoint descriptor가 되기 위한 candidate를 만들어왔고, 정제하는 작업을 거쳤다.
우리가 갖고 있는 정보 : image 좌표(x, y), scale 정보(), magnitude(m), orientation()
를 이용하여 illumination과 viewpoint에 invariant한 local descriptor를 만들어 낼 것이다.
repeatability도 좋기 때문에 matching에 좋은 algorithm이라고 볼 수 있다.
4x4 patch에서 성능이 saturation되기 때문에, 일반적으로 각 descriptor에 대해서 width를 4로 한다.
또한 orientation을 8개로 나누는 것이 일반적이다.
object recognition, panorama stitching에 사용된다.