귀퉁이 서재

컴퓨터 비전 - 3. LBPH(Local Binary Patterns Histograms) 알고리즘 본문

컴퓨터 비전

컴퓨터 비전 - 3. LBPH(Local Binary Patterns Histograms) 알고리즘

Baek Kyun Shin 2023. 3. 7. 00:14

이전 포스트들에서 얼굴 검출(face detection)을 알아봤습니다. 이번에는 얼굴 인식(face recognition)에 관해 알아보겠습니다. 둘은 비슷해 보이지만 다른 개념입니다.

  • 얼굴 검출 : 이미지나 영상에서 사람의 얼굴을 찾는 작업
  • 얼굴 인식 : 이미지나 영상에서 개개인의 고유한 얼굴을 인식하는 작업 

출처 : https://medium.com/sciforce/face-detection-explained-state-of-the-art-methods-and-best-tools-f730fca16294

얼굴 자체를 찾는 일만을 원한다면 얼굴 검출 작업을 하면 됩니다. 반면, 특정한 개인을 식별하고 싶으면 얼굴 인식 작업을 해야 한다. 코로나가 한창일 때, 우리는 실내 입장 시 카메라 앞에 얼굴을 대고 체온을 측정했었습니. 그때는 얼굴 검출 기술이 필요합니다. 그 사람이 홍길동인지 임꺽정인지는 중요하지 않죠. 그냥 사람의 '얼굴'만 찾아서 체온을 측정하면 되기 때문입니다. 반면, 사무실에 출입할 때 보안상 얼굴을 찍는 경우가 있습니다. 이때는 얼굴 인식 기술이 필요합니다. 회사 직원인지 아닌지 구별이 필요하기 때문이죠.

이 게시글에서는 얼굴 인식의 대표적인 알고리즘인 LBPH(Local Binary Patterns Histograms)에 관해 알아보겠습니다. LBPH는 빠른 계산 속도와 단순한 알고리즘 때문에 널리 사용되는 기법입니다. 다양한 응용 분야에서 활용도 되고요. 가령, 얼굴 인식, 자동차 번호판 인식, 환자 진단 및 생체 인증 등에 쓰입니다. 

LBPH 알고리즘을 요약해서 먼저 설명하면 이렇습니다(아래에서 자세히 설명할 겁니다. 먼저 요약하는 것이므로 이해가지 않아도 괜찮습니다.). LBP(Local Binary Patterns)는 영상처리 분야에서 텍스처를 인식하거나 분석하는 데 사용하는 특징 추출 기술입니다. LBPH는 LBP와 히스토그램을 결합한 기법이죠. LBP는 이미지의 각 픽셀 주변 픽셀 값을 이진수로 변환해 이미지의 특징을 추출합니다. 이진수는 중심 픽셀과 이웃 픽셀의 상대적인 밝기 차이에 따라 생성됩니다. 이웃 픽셀이 중심 픽셀보다 크면 1, 작으면 0으로 표현하죠. 

이렇게 만든 이진수를 활용해 각 픽셀의 텍스처 특징을 추출할 수 있습니다. 국지 이진  패턴(Local Binary Patterns, LBP)을 추출하면 이미지의 특정 부분에서 특정한 패턴이 나타날 수 있습니다. 이러한 패턴을 활용해 이미지에서 물체나 얼굴을 인식하는 겁니다.

1. 파라미터 설정

LBPH를 사용하려면 3가지 파라미터를 먼저 설정해야 합니다.

  • Neighbors(이웃 픽셀 수) : LBP를 만들 때 사용할 이웃 픽셀 수를 뜻합니다. 이웃 픽셀 수가 많을수록 계산 비용이 높아집니다. 보통 이 값은 8로 설정합니다.
  • Grid X(수평 방향 분할 수) : 수평 방향으로 셀을 분할할 개수를 말합니다. 보통 8로 설정합니다.
  • Grid Y(수직 방향 분할 수) : 수직 방향으로 셀을 분할할 개수를 말합니다. 보통 8로 설정합니다.  

각 파라미터가 어떤 뜻인지 아직 모르셔도 괜찮습니다. LBPH 알고리즘 절차를 설명하면서 다시 언급할 겁니다.

2. 데이터 준비

얼굴 인식에 LBPH를 활용하려면 먼저 LBPH 알고리즘을 데이터로 훈련해야겠죠? 인식하려는 사람들로 이루어진 데이터를 활용해서요. 각 얼굴마다 고유한 ID도 있어야 합니다. 그 얼굴이 누구를 나타내는지도 중요하기 때문이죠. 그래야 개별 얼굴이 누구를 나타내는지 분간해서 훈련을 할 수 있습니다. 서로 다른 이미지에 같은 사람이 있다면 동일한 ID를 가져야 합니다.  

3. LBP 작업 수행

원본 이미지에서 특징적인 영역을 구하기 위해 LBP를 추출하는 작업을 할 차례입니다. 원본 이미지를 LBP가 추출된 이미지(줄여서 LBP 이미지라고 하겠음)로 바꿔야 한다는 말입니다. LBP 이미지를 만들면 얼굴에서 주목해야 할 특징을 강조할 수 있습니다. 이때 Neighbors 파라미터를 사용합니다. 

아래 그림은 LBP 이미지를 만드는 절차의 일부입니다.

출처 : https://towardsdatascience.com/face-recognition-how-lbph-works-90ec258c3d6b

맨 왼쪽이 원본 이미지(흑백 이미지라고 가정)입니다. 먼저, 원본 이미지에서 3x3 픽셀로 이루어진 윈도(window)를 뽑습니다. 흑백 이미지라서 각 픽셀은 0~255 사이의 값 하나로 이루어졌겠죠. 픽셀 값이 밝기를 나타낸다고 봐도 됩니다. 0이면 완전 검은색, 255면 완전 흰색을 뜻하니까요. 3x3 픽셀로 이루어진 윈도의 가운데값을 임계값(threshold)으로 정합니다. 여기서는 임계값이 90이 됩니다. 다음으로 이웃 픽셀값을 순회하면서 임계값보다 작으면 0, 크면 1로 값을 매깁니다. 그러면 이웃 픽셀은 모두 0 또는 1로 설정되겠죠. 임계값인 가운데 값은 빼고 나머지 이웃 셀의 이진 값을 활용해 이진수를 만듭니다. 여기서는 10001101입니다. 왼쪽에서 오른쪽, 위에서 아래로 훑으며 이진 값을 뽑아서 10001101이 된 겁니다. 그런데 시계방향으로 훑어도 됩니다. 가령, 10011010이 되어도 됩니다. 최종 결과에는 변함이 없어서 어떤 방식으로 이진 값 순서를 매겨도 무방합니다. 그다음은 10001101을 십진수로 바꿉니다. 141이 되겠죠. 마지막으로, 가운데 픽셀 값을 141로 바꿉니다. 

이런 방식으로 LBP 이미지를 만들면 아래와 같은 결과를 얻게 됩니다.

출처 : https://towardsdatascience.com/face-recognition-how-lbph-works-90ec258c3d6b

4. 히스토그램 만들기

앞서 만든 LBP 이미지를 (Grid X, Grid Y)로 분할합니다. Grid X와 Grid Y는 맨 처음 설정한 파라미터 값인 것 기억하시죠? 일반적으로 두 값 모두 8로 잡는다고 했습니다. 여기서도 LBP 이미지를 8x8 그리드로 나눴습니다. 각 그리드별로 픽셀 값의 크기에 따라 히스토그램을 그립니다.

출처 : https://towardsdatascience.com/face-recognition-how-lbph-works-90ec258c3d6b

그럼 히스토그램이 총 64개(=8x8) 나오겠죠? 64개 히스토그램을 결합해 최종 히스토그램을 만듭니다. 이 히스토그램이 해당 얼굴에 대한 고유한 히스토그램입니다. 같은 사람이라면 히스토그램 패턴이 비슷할 겁니다. 서로 다른 사람이라면 히스토그램도 달라지겠죠. 히스토그램 패턴을 통해 동일한 사람인지 다른 사람인지 분간을 할 수 있습니다. Gird X와 Grid Y 개수가 크면 그만큼 그리드 개수도 많아집니다. 그러면 셀이 작아지므로 전체 히스토그램 개수도 많아지죠. 히스토그램이 많다는 말은 더 많은 패턴을 추출한다는 뜻입니다.

그럼 비슷한 히스토그램인지는 어떻게 판단할까요? 여러 방법이 있습니다. 대표적으로 유클리디안 거리나 절댓값 거리 계산법이 있습니다. 이 값이 특정한 임계값보다 작다면 동일한 이미지에서 나온 히스토그램으로 간주하는 거죠. 그리하여 같은 사람으로 인식합니다. 임계값에 따라 결과 품질이 달라집니다.


참고 자료

Kelvin Salton do Prado - "Face Recognition: Understanding LBPH Algorithm"

Jones Granatyr(Udemy) - "Computer Vision: Master Class"

 

Comments