검색결과 리스트
글
영상 feature 비교 (SIFT, HOG, Haar, Ferns, LBP, MCT)
이번 글에서는 영상인식에 사용되는 대표적인 몇몇 영상 feature들을 비교 정리해 볼까 합니다. 여기서 다룰 영상 feature들은 SIFT, HOG, Haar, Ferns, LBP, MCT 입니다. 주로 HOG, Haar, LBP 등 성격이 다른 여러 영상 feature의 특성을 파악하는데 초점이 맞추어져 있고 invariant local feature와의 비교를 위해 가장 대표적인 SIFT도 포함하였습니다. SURF, BRIEF, ORB 등 기타 invariant local feature들에 대해서는 나중에 별도 글로 다뤄볼 예정입니다.
이 글은 각각의 영상 feature의 세부 구현이나 특징을 열거하기보다는 전체적인 관점에서 각각의 위치와 특성을 파악하는 것이 목적이며 글은 최대한 간결하게 쓰고자 합니다.
1. SIFT(Scale Invariant Feature Transform)
[Lowe04] Lowe, D. G., “Distinctive Image Features from Scale-Invariant Keypoints”, IJCV 2004.
SIFT는 영상에서 코너점 등 식별이 용이한 특징점들을 선택한 후에 각 특징점을 중심으로 한 로컬 패치(local patch)에 대해 아래 그림과 같은 특징 벡터를 추출한 것을 말한다.
<그림 1>
SIFT 특징벡터는 특징점 주변의 영상패치를 4 x 4 블록으로 나누고 각 블록에 속한 픽셀들의 gradient 방향과 크기에 대한 히스토그램을 구한 후 이 히스토그램 bin 값들을 일렬로 쭉 연결한 128차원 벡터이다.
SIFT는 기본적으로 특징점 주변의 로컬한 gradient 분포특성(밝기 변화의 방향 및 밝기 변화의 급격한 정도)을 표현하는 feature이다. SIFT를 포함한 SURF, ORB 등의 local feature들은 대상의 크기변화, 형태변화, 방향(회전)변화에 강인하면서도 구분력이 뛰어난 어찌보면 서로 상충되는 목표를 동시에 만족시키고자 개발된 것들로서 통상적으로 원래 물체의 기하학적 정보는 무시하고 특징점 단위로 혹은 코드북(code book) 단위로 매칭을 수행한다. 이러한 local feature들은 스케일, 회전, 밝기변화에 대한 불변 특징을 위해 어느정도 구분력을 희생하기 때문에 하나의 특징점에 대해 수많은 특징점들이 매칭될 수 있으며 feature 자체의 성능보다는 어떤 매칭 방법을 사용했으냐에 따라서 최종 성능이 크게 좌우될 수 있다.
2. HOG(Histogram of Oriented Gradient)
[Dalal05] N. Dalal and B. Triggs, "Histograms of oriented gradients for human detection," CVPR 2005.
HOG는 대상 영역을 일정 크기의 셀로 분할하고, 각 셀마다 edge 픽셀(gradient magnitude가 일정 값 이상인 픽셀)들의 방향에 대한 히스토그램을 구한 후 이들 히스토그램 bin 값들을 일렬로 연결한 벡터이다. 즉, HOG는 edge의 방향 히스토그램 템플릿으로 볼 수 있다.
<그림 2>
템플릿 매칭(template matching)의 경우에는 원래 영상의 기하학적 정보를 그대로 유지하며 매칭을 할 수 있지만 대상의 형태나 위치가 조금만 바뀌어도 매칭이 잘 안되는 문제가 있다. 반면에 히스토그램 매칭은 대상의 형태가 변해도 매칭을 할 수 있지만 대상의 기하학적 정보를 잃어버리고 단지 분포(구성비) 정보만을 기억하기 때문에 잘못된 대상과도 매칭이 되는 문제가 있다.
HOG는 템플릿 매칭과 히스토그램 매칭의 중간 단계에 있는 매칭 방법으로 볼 수 있으며 블록 단위로는 기하학적 정보를 유지하되, 각 블록 내부에서는 히스토그램을 사용함으로써 로컬한 변화에는 어느정도 강인한 특성을 가지고 있다.
또한 HOG는 edge의 방향정보를 이용하기 때문에 일종의 edge기반 템플릿 매칭 방법으로도 볼 수 있다. Edge는 기본적으로 영상의 밝기 변화, 조명 변화 등에 덜 민감하므로 HOG 또한 유사한 특성을 갖는다고 생각할 수 있다. 또한 HOG는 물체의 실루엣(윤곽선) 정보를 이용하므로 사람, 자동차 등과 같이 내부 패턴이 복잡하지 않으면서도 고유의 독특한 윤곽선 정보를 갖는 물체를 식별하는데 적합한 영상 feature이다.
HOG를 local feature인 SIFT와 비교해 보면 HOG는 일종의 템플릿 매칭이기 때문에 물체가 회전된 경우나 형태변화가 심한 경우에는 검출이 힘들지만 SIFT는 모델의 특징점과 입력 영상의 특징점에 대해 특징점 단위로 매칭이 이루어지기 때문에 물체의 형태변화, 크기변화, 회전 등에 무관하게 매칭이 이루어질 수 있다. 이러한 특성에 비추어 보았을 때, HOG는 물체의 형태변화가 심하지 않고 내부 패턴이 단순하며 물체의 윤곽선으로 물체를 식별할 수 있을 경우에 적합하고 SIFT는 액자 그림과 같이 내부 패턴이 복잡하여 특징점이 풍부한 경우에 적합한 방법이다.
3. Haar feature
[Viola01] P. Viola and M. J. Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features," CVPR 2001.
Haar feature는 기본적으로 영상에서의 영역과 영역의 밝기차를 이용한 feature로서 아래 왼쪽 그림과 같이 다양한 형태의 elementary feature들이 존재하며 이들 elementary feature들을 다수(수백, 수천개) 조합하여(다양한 위치와 크기로) 물체에 대한 특징을 추출하는 방법이다.
<그림 3>
각 elementary feature에 대한 특징값은 feature의 흰색 부분에 해당하는 영상 픽셀들의 밝기합에서 검은색 부분의 밝기 합을 뺀 차로 계산된다. 그리고 feature를 이용한 대상의 식별은 계산된 영역의 밝기차가 feature에 부여된 임계값(threshold)보다 큰지 작은지 여부를 이용한다. 물론 하나의 feature를 사용하는 것이 아니라 다수의 feature를 조합하여 사용하게 되며 예를 들어 사용한 feature가 f1, f2, ..., fn이라면 f1<t1이고 f2<t2이고 f3>t3, ... fn<tn을 만족하면 대상물체이고 만족하지 않으면 배경이라고 판단하는 식이다.
같은 종류의 feature라 할지라도 물체 내에서의 위치 및 크기(scale)에 따라 서로 다른 feature로 간주하기 때문에 거의 무한대에 가까운 feature 조합이 가능하다. 이들 중 의미있는 feature들을 선정하는 것이 중요한데 여기서 의미있는 feature란 인식하고자 하는 대상들에서는 비슷한 값을 나타내면서 대상이 아닌 경우에는 랜덤한 값을 내는 feature들로 볼 수 있다. 예를 들어, 위 그림 3의 오른쪽 그림과 같이 사람의 눈 영역에 대해 feature를 잡으면 눈 영역은 대체로 주변보다 어둡기 때문에 사람 얼굴 검출을 위한 의미있는 feature가 된다. 물론 이러한 의미있는 feature의 선정은 수작업이 아닌 boosting 알고리즘 등과 같이 자동화된 학습 알고리즘을 통해 이루어진다.
이와 같이 Haar feature는 영역간의 밝기차를 이용하기 때문에 Haar feature를 적용하기 위해서는 검출하고자 하는 대상 물체가 이러한 특성에 잘 부합되는지를 따져 보아야 한다. 사람의 얼굴의 경우에는 눈썹, 눈동자, 입술, 머리카락 등이 특징적인 밝기 차를 가지기 때문에 Haar feature를 적용하기에 비교적 적합한 대상으로 볼 수 있다. 또한 체스판의 경우에도 Haar feature를 적용하기 매우 적합한 대상으로 볼 수 있다. 하지만 장기판이나 바둑판의 경우에는 영역에 따른 밝기차가 거의 없기 때문에 일반 벽 등과 구분할 수 없으며 Haar feature를 적용하기 힘든 예로 볼 수 있다.
Haar feature는 기본적으로 물체의 기하학적 정보를 유지하며 영역 단위의 밝기차를 이용하기 때문에 영역 내부에서의 물체의 형태변화 및 약간의 위치변화를 어느정도 커버할 수 있는 특성을 갖는다. 하지만 영상의 contrast 변화, 광원의 방향 변화에 따른 영상 밝기 변화에 영향을 받으며 물체가 회전된 경우에는 검출이 힘들다.
4. Ferns
[Ozuysal10] M. Ozuysal, M. Calonder, V. Lepetit, P. Fua, "Fast Keypoint Recognition using Random Ferns", PAMI 2010.
Ferns는 영상에서 먼저 특징점들을 뽑고 각 특징점을 중심으로 한 로컬 패치(local patch)에 대해 계산된다는 점에서 SIFT와 유사한 점이 있다 (ferns에 대한 상세 내용은 Ferns를 이용한 영상 Object Detection 글 참조).
이후 patch 내에서 임의의 두 점을 잡고 두 점의 픽셀 밝기차가 +인지 -인지를 feature로 사용한다. Haar feature와 비교해 보면 Haar feature가 영역 단위의 밝기차를 이용하는 반면 ferns는 픽셀 단위의 밝기차를 이용하고 또한 값이 아닌 부호만을 사용한다는 점에서 차이가 있다.
<그림 4>
하나의 ferns feature는 patch 내에서의 한쌍의 좌표로 표현되며 하나의 feature에 대한 결과는 0 또는 1의 값을 갖는다. 패치 내에서 여러 개의 feature가 사용될 경우 그 결과는 각 feature의 결과를 이진수로 연결한 값을 사용한다. 예를 들어 위 그림 4의 두번째 경우와 같이 3개의 feature를 사용하면 그 결과값은 000, 001, 010, 011, ..., 111까지 총 8가지 값이 가능하다.
정리해 보면 ferns는 패치(patch) 단위의 매칭을 위한 영상 feature로서, 로컬한 영상 패치의 밝기 패턴을 표현하는 feature이다. 밝기값을 그대로 이용하는 것이 아닌 밝기차의 부호 정보만을 이용하기 때문에 영상의 contrast 변화, 밝기 변화 등에 강인할 것으로 생각된다.
SIFT와 비교해 보면 둘다 로컬한 영상 패치에 대한 feature라는 점에서는 유사하지만 SIFT는 히스토그램이라는 측면이 강하고 ferns는 템플릿이라는 측면이 강하다. 따라서 ferns가 SIFT 보다 구분력은 높지만 패치의 형태가 변하거나 회전된 경우에는 매칭이 힘든 측면이 있다. 이를 보완하기 위해 ferns에서는 대상을 학습시킬 때 패치에 회전, 이그러짐 등의 변형을 가하여 학습 데이터를 확장하여 이용하는 방법을 사용한다.
Ferns와 SIFT는 feature 자체는 다르지만 로컬 패치에 대한 feature라는 점과 패치 단위의 매칭을 이용한다는 점에서 유사하며 응용에 있어서는 상호 대체적으로 사용될 수 있다. 개인적인 경험에 의하면 성능은 fern이 훨씬 뛰어난 편이다(인식 성능은 약간 더 뛰어나며 속도는 훨씬 빠름). 하지만 SIFT는 별도의 학습 과정이 필요 없는 대신에 ferns는 파라미터 설정에 따라서 수십분 이상의 offline 학습 과정이 필요한 단점이 있다.
5. LBP(Local Binary Pattern)
[Ojala96] Ojala, T., Pietikäinen, M. and Harwood, D., A Comparative Study of Texture Measures with Classification Based on Feature Distributions. Pattern Recognition 29(1):51-59, 1996.
[Ahonen06] T. Ahonen, A. Hadid, and M. Pietikinen, "Face description with local binary patterns: Application to face recognition," PAMI 2006.
[Liao07] S. Liao, X. Zhu, Z. Lei, L. Zhang and S. Z. Li, "Learning Multi-scale Block Local Binary Patterns for Face Recognition," ICB 2007.
LBP는 원래 영상의 텍스쳐(texture)를 분류하기 위한 용도로 개발된 feature인데 이후 얼굴인식(face recognition)과 같은 다른 영상인식 응용에도 활용되고 있다.
LBP(Local Binary Pattern)는 영상의 모든 픽셀에 대해 계산되는 값으로서 각 픽셀의 주변 3 x 3 영역의 상대적인 밝기 변화를 2진수로 코딩한 인덱스 값이다 (중앙 픽셀보다 밝으면 1, 어두우면 0으로 코딩한 후 이 값들을 연결한 이진수를 로컬 텍스쳐에 대한 인덱스로 활용)
<그림 5> 출처: [Ahonen06]
이와 같이 각 픽셀들에 대해 계산된 인덱스 값에 대해 히스토그램을 구한 후 이 히스토그램을 해당 영상 영역에 대한 텍스쳐 모델로 활용하는 것이 원래의 LBP 응용이다(잔디밭인지, 숲인지, 땅인지, 벽인지 등 텍스쳐를 분류하는 용도).
이후 LBP를 얼굴인식에 활용한 한 예[Ahonen06]를 보면 얼굴 영역을 일정한 크기의 셀로 분할한 후 각 셀(cell)마다 LBP에 대한 히스토그램을 구하고(해당 셀에 속하는 LBP 인덱스 값들에 대한 히스토그램) 이렇게 구한 히스토그램들을 일렬로 연결한 벡터를 최종 feature로 사용하는 방법 등이 있다 (이 방법은 일종의 텍스쳐 템플릿 매칭 방법으로 볼 수 있는데 셀 단위로는 대상의 기하학적 정보를 유지하되 셀 내에서는 텍스쳐 정보만을 추출하는 형태이다).
<그림 6> 출처: http://www.scholarpedia.org/article/Local_Binary_Patterns
이후 2007년도에는 MB-LBP라는 Mult-scale Block LBP 방법[Liao07]이 발표되었는데, 이 방법은 원래의 LBP가 3x3 픽셀을 이용함으로써 너무 local 특성을 추출하기 때문에 이를 블록으로 확장하여 블록 단위로 LBP를 계산하고자 하는 것으로서 OpenCV에 있는 LBP는 MB-LBP를 기반으로 하고 있다.
<그림 7> 출처: [Liao07]
즉, MB-LBP는 임의의 크기의 영상 영역을 3 x 3 블록으로 분할한 후 각 블록평균에 대해 LBP 인덱스를 계산하는 방법이다. 이와 같이 픽셀 단위가 아닌 블록 단위의 LBP를 사용하면 큰 스케일의 텍스쳐 정보를 추출할 수 있으며 서로 다른 여러 스케일 및 영상 위치에 대해 MB-LBP를 계산하면 하나의 대상에 대해 다양한 feature를 추출할 수 있다는 것이다. 이와 같이 하면 하나의 대상에 대해 무수하(거의 무한대) 많은 LBP feature를 추출할 수 있는데, 이들 중 의미있는(식별력이 높은) LBP feature들을 자동으로 선정하기 위해 AdaBoost와 같은 학습 알고리즘이 적용된다.
LBP 특징에 대해 살펴보면 LBP는 기본적으로 circular texture 정보로서 영상의 밝기 변화에 무관한 영상 feature로 볼 수 있다. 기존의 대부분의 LBP 응용은 검출(detection)이 아닌 인식(recognition) 용이었지만 detection 관점에서 봤을 때 LBP의 활용을 생각해 보면 어느정도 내부 패턴이 존재하는 물체를 검출하는데 적합해 보인다. 기본적인 특성은 Haar feature와 큰 차이가 없으나 다만 Haar보다는 좀더 복잡한(세밀한) 패턴 변화를 표현할 수 있다. 따라서, Haar와 LBP는 서로 대체적으로 사용될 수 있으며 성능상의 큰 차이는 없을 것으로 생각되지만 실제 대상의 내부 패턴 분포가 어떤 feature와 좀더 적합한지 따져보고 선택하는 것이 좋겠다.
참고로, LBP는 1996년 Ojala 논문(Ojala, T., Pietikäinen, M. and Harwood, D., A Comparative Study of Texture Measures with Classification Based on Feature Distributions. Pattern Recognition 29(1):51-59, 1999 )이 최초 originality를 인정받고 있으며 이후 Ojala는 2002년에 기존의 3 x 3 LBP를 임의의 크기의 circular 형태로 계산 가능하도록 확장한 방법을 발표하였다(Ojala, T., Pietikäinen, M. and Mäenpää, T., Multiresolution Gray-scale and Rotation Invariant Texture Classification with Local Binary Patterns. IEEE Trans. Pattern Analysis and Machine Intelligence 24(7): 971-987, 2002).
6. MCT(Modified Census Transform)
[Zabih96] Ramin Zabih and John Woodfill, "Non-parametric Local Transforms for Computing Visual Correspondence," ECCV 1994.
[Froba04] Bernhard Froba and Andreas Ernst, “Face Detection with the Modified Census Transform”, FG 2004.
MCT는 현재 얼굴 검출(Face Detection) 분야에서 가장 대표적인 방법으로서 사용되고 있으며 뛰어난 검출 성능을 보이고 있다.
MCT는 Modified Census Transform의 약자로서 Census Transform(CT)을 약간 수정한 것이다. Census Transform(CT)은 1994년 Zabih와 Woodfill에 의해 제안된 방법으로서 영상에서 한 픽셀에 대한 CT는 그 픽셀 주변영역의 밝기 변화를 중심픽셀보다 밝으면 0, 어두우면 1로 인코딩하고 그 결과를 비트 스트링(bit string)으로 연결한 값이다. 따라서, 만일 주변 영역을 3 x 3 영역으로 잡는다면 어떤 픽셀에 대한 Census Transform(CT) 결과는 앞서 설명한 LBP(Local Binary Pattern)와 동일하다고 봐도 무방하다.
사실 Census Transform(CT)는 LBP(Local Binary Pattern)와 이름만 다를 뿐 내용상으로는 전혀 차이가 없다. 재미있는 사실은 LBP는 1996년 Ojala가 제안하였고[Ojala96] Census Transform(CT)도 같은 해인 1996년 Zabih가 제안하였으니[Zabih96] 똑같은 개념이 같은 년도에 서로 다른 이름으로 발표된 셈이다.
굳이 차이를 찾자면 두 feature가 사용된 컨텍스트(context)의 차이인데 LBP의 경우에는 영상의 텍스쳐(texture)를 표현하기 위한 feature로서 접근한 것으로서 LBP 결과값들에 대한 히스토그램을 영상 영역에 대한 텍스쳐 feature로서 활용하였고, Census Transform(CT)에서는 입력 영상을 주변 밝기 변화에 대한 영향이 제거된 영상으로 변환하기 위한 용도로 사용되었다. 매칭 방법에 있어서도 차이가 있는데, LBP에서는 히스토그램간의 유사도를 측정하였고 Census Transform(CT)에서는 대응되는 픽셀들 사이의 CT 비트 스트링(bit string)의 Hamming distance를 이용하였다.
Census Transform(CT)은 2004년 Froba에 의해 MCT(Modified Census Transform)[Froba04]로 확장되었는데, MCT는 중심 픽셀과의 밝기차를 인코딩하는 대신에 로컬 영역의 평균과의 밝기차를 인코딩함으로써 중심 픽셀에도 0 또는 1의 값을 부여할 수 있도록 한 것이다 (결과적으로 중심 픽셀에 대응하는 비트가 하나 더 늘어난 셈). 이렇게 함으로서 기존의 CT보다는 훤씬 풍부한 local binary pattern을 표현할 수 있도록 한 것이다. 참고로, LBP의 경우에도 동일한 해인 2004년에 평균과의 차를 이용한 형태로 확장된 ILBP(Improved LBP)(H. Jin, Q. Liu, H. Lu and X. Tong, “Face detection using improved LBP under bayesian framework”, International Conference on Image and Graphics 2004)가 독립적으로 발표되었는데 우연치고는 참 대단한 우연이다.
<그림 8>출처: [Froba04]
위 그림은 입력 영상을 MCT로 변환한 예를 보여주는데, 원본 영상들 사이에는 조명에 따른 심각한 차이가 있지만 MCT 결과 영상에서는 이러한 차이가 제거되고 순수한 물체의 패턴 정보만이 남은 것을 볼 수 있다 (MCT 영상은 각 픽셀에서 계산되는 local binary pattern에 대한 이진 비트 스트링을 gray scale로 해석하여 영상화한 것). 이와 같이 MCT로 변환한 영상에 대해 인식 또는 검출 알고리즘을 적용하면 원본 영상에서보다 성능이 나아질 것이라는게 저변에 깔린 기본 아이디어이다.
사실 MCT는 LBP와 동일한 feature이기 때문에 그 응용이나 특성도 모두 동일하다고 보면 된다. 다만 face detection 분야에서 MCT가 활용되는 방식을 좀더 살펴보면 [Froba04]에서는 얼굴내 한 픽셀 위치에 대하여 face 학습 이미지들로부터 계산된 MCT 인덱스들의 히스토그램 H1과 non face 학습 데이터들로부터 계산된 MCT 인덱스들의 히스토그램 H2를 구한 후 입력 영상의 해당 픽셀 위치에서 계산된 MCT 인덱스에 대응하는 bin값이 H1이 큰지, H2가 큰지에 따라서 해당 픽셀이 face 픽셀인지 non face 픽셀인지를 분류한다. 각 픽셀 위치에서 계산된 두 히스토그램간의 overlap(intersection)이 적을수록 구분력이 뛰어나기 때문에 overlap 정도에 따라서 각 픽셀 위치에 대한 가중치(weight)를 다르게 줄 수 있다.
7. 마무리하며..
세부 구현은 조금씩 차이가 있지만 Ferns, Haar, LBP, MCT는 서로 유사한 계열로 모두 영역간의 밝기차를 이용한다. 반면 HOG, SIFT는 기본적으로 edge 정보를 이용한다는 점에서 차이가 있으며 서로 상보적인 관계에 있다고 볼 수 있다. 어떤 문제에는 어떤 feature를 써야한다라고 한마디로 단정지을 수는 없지만 어떤 문제가 주어졌을 때 대상 물체의 특성을 잘 살펴보고 또 여러 후보 feature들의 특성과 잘 비교해 보면 feature를 선택하는데 많은 도움이 되리라 생각한다.
☞ 글의 내용은 주로 저의 주관적인 생각, 판단을 정리한 것이기 때문에 틀린 부분이 있을 수 있음을 참고하시기 바랍니다.
by 다크 프로그래머
'영상처리' 카테고리의 다른 글
선형 보간법(linear, bilinear, trilinear interpolation) (25) | 2014.01.13 |
---|---|
영상 이진화(binarization, thresholding) (53) | 2014.01.07 |
타겟 추적을 위한 카메라의 팬,틸트 제어 (45) | 2013.12.10 |