Local binary patterns(LBP)는 이미지의 질감(texture) 표현 및 얼굴 인식 등에 활용되는 아주 간단하면서도 효율적인 방법이다. LBP는 초기에 그림1과 같은 과정을 거쳐 발전해왔다. 이후에 계속해서 발전된 형태가 나왔지만 일단 이 정도의 발전 과정이 가장 유의미하다고 본다. LBP 매트랩 코드는 [3]에서 다운로드 받을 수 있다.
그림1. LBP의 변천사.
▶ 원시 LBP (3x3 사각 LBP)
가장 처음에 제안된 LBP의 작동 원리[1]에 대해 살펴보자. LBP 연산자는 말 그대로 지역적인(local) 이진(binary) 패턴(pattern)을 계산한다. 그림2를 참고하자.
그림2. 원시 LBP의 원리. 출처 [4]
3x3셀 내에서 중심에 위치하는 픽셀과 이웃하는 8개의 픽셀끼리 서로 크기를 비교한다. 그림2의 경우 중심 픽셀의 값이 54이므로 이웃하는 픽셀값이 이것보다 크거나 같으면 1로, 이것보다 작으면 0으로 threshold해준다. 순서대로 나열하면 11001011과 같은 이진값을 얻게 된다. 이렇게 얻은 이진수 값을 십진수 값으로 계산해보면 203이다. 가능한 값으로는 부터 까지 총 256개의 경우의 수를 가진다. 모든 픽셀에 대해서 이것을 계산한 후 히스토그램을 만들어준다. 단순히 픽셀값의 히스토그램이 아니라 LBP값들의 히스토그램을 만드는 것이다. 그러면 총 256개의 bin이 채워질 것이다. 하나의 영상의 질감을 256개의 숫자로 표현하는 것이다.
이러한 원시 LBP는 영상의 밝기가 변해도 robust한 특징을 갖는다. 그림3을 보면 알 수 있듯이 단순한 밝기의 변화는 LBP연산에 영향을 미치지 않는다.
그림3. 밝기변화 불변 특성을 갖는 원시 LBP.
▶ 원형 LBP
그림4. 원형 LBP. 출처[5]
▶ Uniform LBP
원형 LBP에서 8개의 이웃점을 고려하는 경우에는 256개의 특성을, 16개의 이웃점을 고려하는 경우에는 65536개의 특성을 얻을 수 있었다. 하지만 특성의 갯수가 많을수록 계산 복잡도도 증가하고, 또 개중에는 별로 분별력없는 특성들도 많이 포함되어 있을 수 있다. 따라서 아래와 같은 관찰 하에 특성의 갯수를 줄일 수 있는 방법이 제안되었다: 어떤 패턴들은 좀 더 영상 내에서 자주 발견되는 반면 어떤 패턴들은 드물게 발견된다.
0에서 1로의 변화 또는 1에서 0으로의 변화가 2번 이내인 패턴은 uniform 패턴이라고 명하고 각각 하나의 라벨을 부여해주고, 변화가 3번 이상인 패턴은 non-uniform 패턴이라고 명하고 한 그룹으로 묶은 다음에 그룹 전체에 단 한 개의 라벨을 부여한다. 구체적으로 말해서 01110000(2번의 변화), 00000001(1번의 변화), 11111111(0번의 변화)와 같은 패턴은 uniform 패턴이므로 하나씩 모두 개별성을 인정해주는 반면, 00011101(3번의 변화), 11100101(4번의 변화), 10101000(5번의 변화)와 같은 것은 싸그리 다 모아서 하나로 취급한다. 이를 통해 8개의 이웃점을 고려하는 경우에 256개의 bin(십진수로 0부터 255까지)이 필요했었는데 단 59개의 bin(58개의 uniform 패턴을 위한 bin과 1개의 non-uniform 패턴을 위한 bin)만 필요해진다.
▶ Rotation-invariant LBP
그림5. Scale-invariant LBP 원리 설명. 출처[5]
그림과 같이 00001111(15), 00011110(30), 00111100(60), 01111000(120), 10000111(135), 11000011(195), 11100001(225), 11110000(240)은 회전시키면 모두 같은 패턴이므로 하나로 여긴다. 따라서 회전에 강건한 특성이 도출된다. 동시에 256개의 특성 갯수가 획기적으로 감소된다.
▶ Uniform & Rotation-invariant LBP
▶ LBP를 이용해서 질감 인식(texture recognition)하기
LBP가 어떻게 이미지들의 질감(texture)을 인식해낼 수 있는지에 대해 간단한 예를 살펴보자. 아래와 같이 4개의 다른 질감을 가지고 있는 이미지들이 있다.
그림6. 다양한 질감의 이미지들.
우선 이 이미지들의 LBP 히스토그램을 구해보자.
그림7. 다양한 질감의 이미지들의 LBP 히스토그램.
그림8. 조금 다른 벽돌 이미지와 LBP 히스토그램.
하나씩 비교해보면 위의 4개의 LBP 히스토그램 중에 벽돌 이미지의 LBP 히스토그램과 모양이 가장 비슷함을 알 수 있을 것이다. 좀 더 정확한 판단을 위해서 제곱오차를 구해보자. 4개의 질감이미지의 LBP 히스토그램에서 새로운 벽돌 이미지의 LBP 히스토그램을 빼 준 다음에 제곱한다. 비교 결과 아래 그림9와 같다.
그림9. 제곱 오차.
보다시피 새로운 벽돌 이미지와 벽돌 이미지의 LBP 히스토그램 사이의 제곱오차는 굉장히 작지만 다른 질감 이미지와의 오차는 꽤 크다. 모든 bin에서의 제곱오차를 더했을 경우 0.0021, 0.0117, 0.0065, 0.0084로 벽돌 이미지들끼리의 오차가 가장 작다. 이런식으로 영상의 질감을 인식해낼 수 있다.
SVM과 같은 분류 알고리즘을 수많은 질감의 이미지들의 LBP 히스토그램과 타겟값으로 훈련시킨 다음 타겟값을 모르는 이미지(즉 어떤 질감인지 모르는 이미지)의 LBP 히스토그램을 훈련된 알고리즘에 넣어주면 어떤 질감인지 판단하는 식으로 질감 인식(texture recognition) 프로그램을 만들 수 있을 것 같다.
▶ LBP를 이용해서 얼굴 인식(face recognition)하기
논문[4]에서 얼굴 인식에 LBP를 활용하는 방법이 제안되었다.
그림10. LBP를 얼굴인식 활용하는 방법. 출처 [7].
그냥 단순하게 전체 이미지의 LBP 히스토그램을 이용하면 위치 정보가 사라지기 때문에 얼굴인식에는 별로 효과적이지 않다. 왜냐하면 사람의 얼굴을 구성하고 있는 눈, 눈썹, 코, 입술 등은 사람마다 위치가 조금씩 다르기는 해도 일반적으로 비슷한 위치에 존재하기 때문이다. 그래서 제안된 방법은 일단 이미지를 여러개의 블락으로 분할한다. 그 다음에 각 블락에서 LBP 히스토그램을 구하고, 그것들을 쭉 연결시킨다. 결과적으로 전반적인 위치 정보도 유지하고, 지역적인 질감도 반영할 수 있다.
이 아이디어를 이용해서 간단히 얼굴을 인식하는 프로그램을 작성해보았다. 우선 아래와 같은 5장의 얼굴 이미지가 있다(친구들과 아내 사진에서 무단 도용ㅋㅋ).
그림11. 5장의 얼굴 이미지.
각 이미지마다 방금 설명한 방법으로 여러 개의 블락으로 분할한 다음에 구한 LBP 히스토그램들을 모두 연결한다. 나는 이미지를 25x25 사이즈의 블락으로 분할했다. 이미지 크기가 모두 250x250이므로 총 100개의 블락이 생성되었다. 그리고 각 블락 당 10개의 히스토그램 bin이 있으므로 연결하면 총 1000개의 히스토그램 bin을 갖는다. 즉, 1000개의 특성으로 얼굴 이미지를 묘사한 것이다.
그림12. 그림11에 있는 얼굴 이미지들의 모든 블락 LBP 히스토그램들을 연결한 것.
이번에는 누군지 모르는 두 개의 테스트 얼굴 이미지들이 있다(딱 보면 누군지 대충 알 수 있지만..ㅎㅎ).
그림13. 이 얼굴들의 주인은?
이 얼굴의 주인들을 찾아줘야 한다. 마찬가지로 이 이미지들을 여러 개의 블락으로 분할해준 다음 각 블락에서 LBP 히스토그램을 구한다. 그리고 그것을 모두 연결해준다.
Test1 이미지의 LBP 히스토그램과 KH, TH, BI, HH, SB 얼굴 이미지들의 LBP 히스토그램 사이의 제곱 오차를 모두 더한 결과는 아래와 같다. 작을수록 두 얼굴이 유사한 것이다.
Test1 vs KH - 1.5384
Test1 vs TH - 1.8171
Test1 vs BI - 2.1915
Test1 vs HH - 4.0655
Test1 vs SB - 4.8836
Test1 얼굴 이미지의 경우 5개의 얼굴 이미지 중에서 KH의 얼굴 이미지와 가장 유사하다고 판단을 내렸다. 정답! Test1은 KH의 얼굴 이미지이다.
이번에는 Test2 이미지의 LBP 히스토그램과 KH, TH, BI, HH, SB 얼굴 이미지들의 LBP 히스토그램 사이의 제곱 오차를 모두 더한 결과들을 살펴보자.
Test2 vs KH - 4.7352
Test2 vs TH - 3.4172
Test2 vs BI - 4.1804
Test2 vs HH - 6.4313
Test2 vs SB - 4.7115
Test2 얼굴 이미지의 경우 5개의 얼굴 이미지 중에서 TH의 얼굴 이미지와 가장 유사하다고 판단을 내렸다. 이것 역시 정답!
물론 실제로 얼굴 인식을 할 때는 LBP 외에도 다양한 특성을 활용하여 훨씬 더 복잡하겠지만, 이 간단한 예제를 통해 LBP가 얼굴 인식에 활용될 수 있음을 알 수 있었다. 또한 이와 유사한 방법으로 닮은 연예인 찾기 어플이 만들어지지 않았을까 추측해본다.
▶ 글을 마무리 하며..
이번 포스팅에서는 LBP의 원리와 활용에 대해서 알아 보았다. 컴퓨터 비전 및 영상처리에서 꽤 자주 활용되는 특성이므로 알고 있으면 유익할 것 같다. 더 깊이 LBP에 대해서 이해하려면 이 글을 읽고, 관련 논문들도 읽어보고, 코드도 실행해보고, LBP로 해결할 수 있을 만한 문제를 설정한 후 해결해보는 것을 강력히 추천한다.
도움이 되셨으면 공감을 눌러주시고, 혹시나 이해가 잘 안되신다면 질문해주시고, 혹 제 설명이 잘못되었다면 가감없이 피드백 주시면 감사하겠습니다! 읽으시느라 수고많으셨고, 읽어주셔서 감사합니다!
<참고 자료>
[1] 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. => LBP에 대한 첫 논문.
[2] http://darkpgmr.tistory.com/116?category=460965 => 다크프로그래머님 글
[3] http://www.cse.oulu.fi/wsgi/MVG/Downloads/LBPMatlab => 매트랩 코드
[4] T. Ahonen, A. Hadid, and M. Pietikinen, "Face description with local binary patterns: Application to face recognition," PAMI 2006. => LBP를 얼굴 인식에 활용한 논문.
[5] http://blog.csdn.net/czt130130/article/details/52722887?locationNum=7 => 중국 블로그, 설명 괜춘.
[6] http://www.boannews.com/media/view.asp?idx=46265&kind=5 => 영상기반 객체검출 기사.
[7] http://www.scholarpedia.org/article/Local_Binary_Patterns => 이 글 괜춘.
[8] Ojala T, Pietik, Inen M, et al. Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns[M]// Computer Vision - ECCV 2000. Springer Berlin Heidelberg, 2000:404-420. => Uniform & Rotation-invariant LBP에 대한 논문.
'Research > 컴퓨터비전, 영상처리' 카테고리의 다른 글
[IQA] 정보 엔트로피와 이미지 품질 사이의 관계 (3) | 2019.01.04 |
---|---|
[IQA] 최대신호대잡음비(PSNR)와 이미지 품질 (2) | 2019.01.03 |
[3D 비전] 양안 경쟁(binocular rivalry) 및 양안 억제(binocular suppression)의 이해 (2) | 2018.12.19 |
[IQA] 3D 이미지 품질 평가에서 머신러닝 및 딥러닝의 활용 역사 (10) | 2018.11.09 |
검출(detection), 인식(recognition), 추적(tracking)의 구분 (0) | 2018.01.17 |
MSCN(mean subtraction and contrast normalization)의 이해 (6) | 2018.01.11 |
[3D 비전] 3D 영화를 볼 때 시각적으로 불편한 이유는? (2) | 2017.11.09 |
[색공간] HSV 색 공간을 활용해서 특정 색깔의 물체만 검출하기 (matlab 소스코드 포함) (12) | 2017.10.25 |