dev-ima
이마의 개발 블로그
dev-ima
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • deeplearning study (4)
    • toy project (3)
    • algorithm study (0)
    • Portfolio (0)
    • Design Pattern (1)
    • Computer Vision (3)
    • c++ (4)
    • MLops (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • C++
  • 정적멤버변수
  • machine learning
  • 머신러닝
  • static member variable
  • Face Recognition
  • 비지도
  • Data의 종류
  • 정적멤버함수
  • cv
  • kaggle
  • ML workflow
  • DETR
  • image Enhancement
  • Object detection
  • Recognition
  • Python
  • UML 다이어그램
  • Unsupervised
  • TITANIC
  • MLops
  • Computer Vision
  • ML시스템
  • instance segmetation
  • ML system
  • static member
  • static member method
  • DEEPLEARNING
  • UW-Madison GI Tract Image Segmentation
  • 딥러닝 시스템

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev-ima

이마의 개발 블로그

LBP (Local Binary Pattern) for Face Recognition
Computer Vision

LBP (Local Binary Pattern) for Face Recognition

2022. 7. 18. 23:37

LBP

그림 1 출처 :  http://www.scholarpedia.org/article/Local_Binary_Patterns
그림 2 출처 : [Ahonen06]

위의 그림1 처럼 이미지를 tile로 나누고 각 tile의 LBP 히스토그램을 나열하여 최종적으로 feature histogram을 만든다. 다른 이미지의 feature histogram과 비교하여 동일인인지 판별할 수 있다.

LBP hisogram을 만들기 위해서 그림2와 같은 연산이 필요하다. 알고리즘은 아래와 같다.

  1. 3x3 block으로 이미지의 pixel정보를 얻어온다.
  2. center pixel을 중심으로 나머지 픽셀들과 크기비교를 한다. center pixel 보다 크거나 같다면 1 작다면 0으로 계산한다.
  3. (그림3 참고)좌측 pixel 부터 차례대로 나열하여 11001011이라는 2진수를 만든다. 그리고 이를 다시 10진수로 바꾸면 203이라는 값이나오고 이 값이 중간 픽셀의 값으로 바뀌게된다.

위의 간단한 알고리즘을 직접사용하기 위해 구현을 진행하였다.

  1. 먼저 이미지를 25x25 타일로 crop한다. 그리고 LBP를 적용한 후 feature histogram을 계산한다. 그리고 이때 prev_hist와 hist사이의 제곱오차를 계산하여 이전 이미지와 현재이미지 사이의 오차를 계산한다.
def lbp_run(self, recent_frame):
        gray = cv2.cvtColor(recent_frame, cv2.COLOR_BGR2GRAY)
        resize_frame = cv2.resize(gray, (250, 250))
        hist=list()
        for x in range(25, 251, 25):
            for y in range(25, 251, 25):
                self.LBP(resize_frame[y-25:y,x-25:x])
                for i in np.histogram(self.transform_img.flatten(),10,[0,255])[0]:
                    hist.append(i/625)
        if self.prev_hist == None:
            self.result_hist = None
        else:
            # self.result_hist = [((self.prev_hist[i]-hist[i])**2)/(self.prev_hist[i]+hist[i]) for i in range(0, len(hist))]
            self.result_hist = [((self.prev_hist[i]-hist[i])**2) for i in range(0, len(hist))]
        self.prev_hist = hist

2. 위 함수에서 사용된 LBP 알고리즘이다.

def lbp_run(self, recent_frame):
        gray = cv2.cvtColor(recent_frame, cv2.COLOR_BGR2GRAY)
        resize_frame = cv2.resize(gray, (250, 250))
        hist=list()
        for x in range(25, 251, 25):
            for y in range(25, 251, 25):
                self.LBP(resize_frame[y-25:y,x-25:x])
                for i in np.histogram(self.transform_img.flatten(),10,[0,255])[0]:
                    hist.append(i/625)
        if self.prev_hist == None:
            self.result_hist = None
        else:
            # self.result_hist = [((self.prev_hist[i]-hist[i])**2)/(self.prev_hist[i]+hist[i]) for i in range(0, len(hist))]
            self.result_hist = [((self.prev_hist[i]-hist[i])**2) for i in range(0, len(hist))]
        self.prev_hist = hist

자세한 실행 코드는 아래 github를 clone하여 실행해보시거나 위의 코드들을 참고하여 직접 구현해보시는 것을 추천 드립니다.

github link : https://github.com/22ema/ComputerVision/tree/main/LBPRecognizer

 

GitHub - 22ema/ComputerVision: Computer Vision based module

Computer Vision based module. Contribute to 22ema/ComputerVision development by creating an account on GitHub.

github.com

결론

Computer vision 베이스이기 때문에 현재 딥러닝 기반의 기술들 보다 정확도가 다소 떨어지지만 GPU 자원이 없다면 위의 코드도 적용해볼 수 있을것 같습니다. 그리고 위의 LBP 코드를 기반으로 확장된 논문들이 많기 때문에 다른 논문들을 읽는데도 본 포스트가 도움이 될 것 같습니다. 감사합니다.

참고 자료

https://darkpgmr.tistory.com/116

'Computer Vision' 카테고리의 다른 글

Computer vision based Skin Detector  (0) 2022.07.20
OpenCV Face Detection and Recognition(얼굴 탐지 및 인식) - 1부  (0) 2022.07.09
    'Computer Vision' 카테고리의 다른 글
    • Computer vision based Skin Detector
    • OpenCV Face Detection and Recognition(얼굴 탐지 및 인식) - 1부
    dev-ima
    dev-ima

    티스토리툴바