코딩 및 기타/이미지

BRIEF ( Binary Robust Independent Elementary Features )

정지홍 2025. 2. 26. 07:05

Hamming distance

  • 해밍 거리는 '두 개의 같은 길이의 이진 벡터'사이에서 서로 다른 bit의 개수를 의미한다.
  • ex)
    • A = 101 1101
      B = 100 1001
      ==> hamming distance is 2

 

 

BRIEF ( 그냥 fast는 좌표로 결과를 보여준다면, 이거는 얻은 좌표를 이진 벡터로 변환해서 보여주는거 차이임 )

  • 이미지의 특징점을 describe하는데 사용하는 알고리즘이다.
    이는 SIFT (Scale-Invariant Feature Transform)SURF (Speeded-Up Robust Features) 와 같은 기존 서술자(descriptor)에 비해서 매우 빠르고 계산량이 적음이 특징
  • 특징점(feature point)을 빠르게 이진 벡터(binary vector)로 변환하여 비교 연산을 단순화하고, 효율적인 매칭을 가능하게 한다.
  • 핵심 개념
    • 기본적으로 patch기반의 binary descriptor이다. 즉, 특정한 특징점을 중심으로 작은 이미지 패치를 추출하고, 해당 패치 내부에서 픽셀간의 강도intensity를 비교수행하여 이진 벡터를 생성한다.
      • 이진벡터는 0과 1로 구성되며, 이를 통해 hamming distance를 이용한 빠른 매칭이 가능. 
  • 장점
    • XOR연산을 사용하기때문에 빠르다. 그리고 이로 인해서 적은 메모리를 사용한다.
  • 단점
    • 픽셀 비교 방식이 절대 좌표 기반이니, 이미지가 회전하면 성능이 크게 저하됨
    • 스케일 변화에 약하다.
    • 단순 픽셀 강도 비교이니, 이미지에 noise가 많으면 서술자가 불안정해질수있음 

 

  • 동작과정 ( 크게 4개로 나눈다. )
    • 1. Keypoint Detection
    • 2. Patch Extraction
      • 각 keypoint에서 정해진 크기의 이미지 패치(typically 31x31)를 추출한다. 이 patch는 이후에 BRIEF 서술사 생성에 사용된다.
    • 3. Binary Descriptor Computation
      • 주어진 patch내에서 N개의 픽셀쌍을 무작위로 샘플링한다. ( 보통 N=128,256,512)
      • 각 픽셀 쌍에 대한 intensity 비교를 수행한다. 

위의 과정을 거치면, 길이가 N인 이진 벡터가 생성됨

  • 4. Feature Matching 
    • 3번의 결과로 2개의 이미지간의 keypoint를 비교할때 Hamming Distance를 사용하여 빠르게 매칭이 가능하다.
def detect_fast_brief_features( image_path , threshold=50 , nonmax_suppression=True ):
    image = cv2.imread( image_path )
    gray = cv2.cvtColor( image , cv2.COLOR_BGR2GRAY )

    fast = cv2.FastFeatureDetector_create( threshold=threshold , nonmaxSuppression=nonmax_suppression )
    keypoints = fast.detect( gray , None )

    brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
    keypoints , descriptors = brief.compute( gray , keypoints )

    image_with_keypoints = cv2.drawKeypoints(image, keypoints, None, color=(0, 255, 0))
    
    plt.figure(figsize=(15, 15))
    plt.imshow(cv2.cvtColor(image_with_keypoints, cv2.COLOR_BGR2RGB))
    plt.axis("off")
    plt.title(f"FAST + BRIEF Keypoints (Threshold={threshold}, Nonmax Suppression={nonmax_suppression})")
    plt.show()
    
    return keypoints, descriptors
    
    
   
detect_fast_brief_features("chess.jpg", threshold=50, nonmax_suppression=True)

'코딩 및 기타 > 이미지' 카테고리의 다른 글

ORB ( Oriented Fast and Rotated BRIEF )  (0) 2025.02.28
Harris corner detection  (0) 2025.02.28
FAST( Features from Accerlerated Segment Test) 알고리즘  (0) 2025.02.25
deeplab v2  (0) 2025.02.01
ResNet-101(Residual Network-101)  (0) 2025.01.31