본문 바로가기

Lab/Local Descriptor

Simplified SIFT Descriptor

와그너
와그너란분의 팀과 퀄컴의 합작 QCAR AR 라이브러리를 오픈했었습니다. 밑의 참고문헌을 보면 1 저자로 와그너란 분이 있는데 논문은 그닥~와닿지 않했습니다. 음. 더 자세히 말하자면, 엇~ 예전부터 있던 알고리즘인데~란 생각? 하지만 이와함께 공개된 동영상을 보면 입이 떡 벌어지죠~ 어떻게? 이럴수가~! 궁금하신 분은 구글링을 통해 찾아보시면 쉽게 동영상을 보시면 됩니다.

여기서 말씀드릴것은 Simplified SIFT Descriptor입니다. 보통 빠르게 한다면 안빠지는 알고리즘이 있습니다. FAST Corner Detector입니다. 이는 고맙게도 완전히 공개되어 있는 알고리즘입니다. 이를 통해 Keypoint를 구합니다. 이를 Keypoint를 주위로 패치를 구성하여 Feature를 추출하는데 SIFT에서는 128차원의 크기를 가진 Descriptor로 구성합니다. 하지만 [1]논문에서는 이를 36차원으로 줄입니다. 물론 속도 이슈때문이죠! 

간소화 방법
SIFT는 Patch를 4*4로 서브영역으로 나누고 각 영역에서 8개의 방향(Graident)로 나누어 구성하게됩니다. 즉, 4*4*8 = 128차원으로 구성하지만 와그너란 분은 모바일에 굴러가기위해 3*3*4 = 36차원으로 구성합니다. 또한 Scale를 구분하지 않습니다. 이는 약간의 blurring과 FAST Corner Detector 알고리즘의 옵션인 non-maximum suppression 을 적용하여 할 뿐입니다.
여기서 약간의 설명을 덧붙히자면, SIFT의 Descriptor는 Magnitude와 Orientation을 구하여 구성하는데, Gray 이미지에서 dx, dy(방향성분을 구하기 위한 미분)을 구하고  Magnitude는 sqrt(dx*dx+dy*dy), orietnation은 atan2(dy, dx)로 구합니다. 이를 이용하여 구성 bin은 당연히 orientation을 이용하고 약간의 weight*magnitude가 가미된 histogram을 구성합니다. 이때 값을 적용하여 Peak에서 threshold를 정하여 쓸만한 point인지 구별해내죠. 와그너에서는 이때 peak가 3개 이상이 되어도(?) 버립니다. 위에서 설명한대로 3*3로 나누고 4 방향 bin으로 구성한 36차원을 descirptor를 최종 계산합니다. 소스를 보고 싶다면 OpenCV나 Hess's SIFT 공개 소스를 보면 될듯합니다.

음 SURF보다는 속도는 빠른데 역시나 Scale과 Descriptor를 간소화하다보니 매칭결과는 좀 떨어졌습니다. 물론 아이폰같은 NFT에 적용하기엔 무리가 있습니다. 절대 무리!! 구현해보시다가 느낄실 겁니다.~!

간단 테스트 결과

주의
저는 실패했지만(잠시 중단, 더 공부해야할 듯 합니다.) 아이폰에서 이를 NFT로 적용하려면 이보다는 Tracking과 Fast하게 구성하는 프로그래밍 능력(NEON등)? 더 중요할 수 있습니다. 음. 하드웨어 스펙이 뛰어나다면 논문에서 밝혔듯이 Tracking 단계는 필요없습니다.

참고 문헌
[1] D. Wagner, G. Reitmayr, A. Mulloni, T. Drummond, D. Schmalstieg, "Pose Tracking from Natural Features on Mobile Phones", Proc. of 7th International Symposium on Mixed and Augmented Reality. pp.125-134, 2008.