OpenCV는 다양한 형태 정보를 분석할 수 있는 기능을 제공하며, 그중 Hu Moments는 형태 기반 분석에서 가장 널리 쓰이는 기술입니다. Hu Moments는 객체의 기하학적 특징을 7개의 불변 모멘트로 표현하여, 형태가 회전·이동·크기 변화 및 반전에 영향을 받지 않고 비교할 수 있도록 돕습니다. 이번 글에서는 Hu Moments 정의부터 7개 불변 모멘트 수식과 설명, 그리고 활용 예제까지 정리해보겠습니다.
1. Hu Moments 정의
Hu Moments는 이미지의 모멘트(Moments)를 바탕으로 계산되는 7개의 형태 특징 값으로, 형태를 정량적으로 분석합니다. 이 값들은 객체의 외형을 숫자로 표현하므로, 다른 객체와 형태 유사도를 비교할 수 있습니다. 특히 회전, 이동, 반전에도 안정적이라는 점에서 형태 분석 알고리즘에 널리 활용됩니다.
2. 7개 불변 모멘트 수식과 설명
Hu Moments는 정규화 모멘트(ηpq)를 기반으로 아래와 같이 계산됩니다.
1) ϕ₁ = η₂₀ + η₀₂
→ 객체의 전체적인 분포 형태를 나타내며 가장 기본적인 모양 특성 정보입니다.
2) ϕ₂ = (η₂₀ − η₀₂)² + 4η₁₁²
→ 형태의 방향성 정보를 포함하며, 객체의 기울어짐 정도를 반영합니다.
3) ϕ₃ = (η₃₀ − 3η₁₂)² + (3η₂₁ − η₀₃)²
→ 비대칭 형태를 나타내며, 객체가 기울어졌더라도 유사한 값을 유지합니다.
4) ϕ₄ = (η₃₀ + η₁₂)² + (η₂₁ + η₀₃)²
→ 모양의 복잡도와 윤곽의 균형감을 표현합니다.
5) ϕ₅ = (η₃₀ − 3η₁₂)(η₃₀ + η₁₂)[(η₃₀ + η₁₂)² − 3(η₂₁ + η₀₃)²] + (3η₂₁ − η₀₃)(η₂₁ + η₀₃)[3(η₃₀ + η₁₂)² − (η₂₁ + η₀₃)²]
→ 모양의 왜곡과 비대칭 복잡도를 반영하며, 형태 비교에서 중요한 역할을 합니다.
6) ϕ₆ = (η₂₀ − η₀₂)[(η₃₀ + η₁₂)² − (η₂₁ + η₀₃)²] + 4η₁₁(η₃₀ + η₁₂)(η₂₁ + η₀₃)
→ 객체의 방향성 + 대칭성을 함께 반영하여 유사도 분석에 기여합니다.
7) ϕ₇ = (3η₂₁ − η₀₃)(η₃₀ + η₁₂)[(η₃₀ + η₁₂)² − 3(η₂₁ + η₀₃)²] − (η₃₀ − 3η₁₂)(η₂₁ + η₀₃)[3(η₃₀ + η₁₂)² − (η₂₁ + η₀₃)²]
→ 반전에 민감한 정보를 포함하여 객체의 좌우 또는 상하 반전 여부를 구분합니다.
이 7개의 불변 모멘트는 이미지 변형에 매우 강인하며, 특히 객체 인식, 매칭, 분류 문제에서 강력한 비교 지표가 됩니다.
3. Hu Moments 활용 예제(Python)
import cv2
import numpy as np
img1 = cv2.imread("shape1.png", 0)
img2 = cv2.imread("shape2.png", 0)
m1 = cv2.moments(img1)
m2 = cv2.moments(img2)
hu1 = cv2.HuMoments(m1)
hu2 = cv2.HuMoments(m2)
hu1_log = -np.sign(hu1) * np.log10(np.abs(hu1))
hu2_log = -np.sign(hu2) * np.log10(np.abs(hu2))
distance = np.sum(np.abs(hu1 - hu2))
print("Shape1:", hu1_log)
print("Shape2:", hu2_log)
print("Difference:", distance)
두 객체의 7개 Hu Moments 차이를 계산하여 distance 값을 얻으면, 이 수치가 작을수록 형태가 유사합니다. Hu Moments는 단순한 형태 비교를 넘어, 객체 인식과 분류를 위한 강력한 영상 처리 도구입니다. 특히 7개의 불변 모멘트는 형태를 수학적으로 정량화하여 다양한 환경에서도 안정적으로 분석할 수 있도록 돕습니다.
'영상처리 도구' 카테고리의 다른 글
| OpenCV SVM을 이용한 이미지 분류 방법과 예제 (0) | 2025.12.23 |
|---|---|
| OpenCV 머신러닝 SVM 설명과 활용 방법 (0) | 2025.12.19 |
| OpenCV 객체 추적 결과 시각화 필요성과 실전 팁 (0) | 2025.12.16 |
| OpenCV Drawing Functions 활용과 시각화 방법 (0) | 2025.12.08 |
| OpenCV Feature Detection 특징점 추출 방법 (SIFT, SURF, ORB) (0) | 2025.12.06 |
