본문 바로가기

Computer Vision + Python/이미지 분석 & 인식 (중급자)

Python으로 이미지에서 텍스처 분석(Texture Analysis) 및 특징 추출

Python으로 이미지에서 텍스처 분석(Texture Analysis) 및 특징 추출

컴퓨터 비전 분야에서 **텍스처 분석(Texture Analysis)**은 이미지의 시각적 패턴을 이해하고,
물체나 환경을 식별하는 데 중요한 역할을 합니다.
텍스처는 색상과 형태뿐 아니라 표면의 반복적 패턴과 구조적 특징을 포함하며,
산업용 검사, 의료 영상 분석, 원격 탐사, 예술 이미지 분석 등 다양한 분야에서 활용됩니다.

이번 글에서는 Python과 OpenCV, Scikit-image, NumPy를 활용하여
이미지 텍스처를 분석하고 특징 벡터를 추출하는 방법을 단계별로 살펴보겠습니다.


텍스처 분석(Texture Analysis)이란?

텍스처 분석은 이미지 내 규칙적, 비규칙적 패턴을 수치화하여
컴퓨터가 인식할 수 있도록 만드는 과정입니다.

주요 목적은 다음과 같습니다.

  1. 물체 식별(Object Recognition) – 텍스처 기반 분류
  2. 표면 결함 검출(Defect Detection) – 산업용 검사
  3. 환경 모니터링(Environmental Monitoring) – 산림, 토양, 수면 상태 분석
  4. 이미지 분할(Image Segmentation) – 텍스처 영역 구분

텍스처는 주로 다음과 같은 특성으로 정의됩니다.

  • Coarseness(거칠기)
  • Contrast(대비)
  • Directionality(방향성)
  • Regularity(규칙성)

이러한 특성을 수치화하면 기계 학습 모델과 결합하여 정밀 분석이 가능합니다.


Python 환경 구성과 필수 라이브러리

텍스처 분석을 위해 필요한 Python 라이브러리는 다음과 같습니다.

pip install opencv-python scikit-image numpy matplotlib
  • OpenCV: 이미지 읽기, 전처리, 필터링
  • Scikit-image: 텍스처 특성 추출, 필터, GLCM 등
  • NumPy: 배열 연산 및 데이터 처리
  • Matplotlib: 분석 결과 시각화

이 조합을 통해 텍스처 분석과 특징 추출, 시각화까지 일관된 워크플로우를 구축할 수 있습니다.


이미지 전처리(Image Preprocessing)

이미지 텍스처 분석을 시작하기 전에, 전처리 과정을 통해 노이즈를 줄이고 분석 정확도를 높여야 합니다.

  1. 그레이스케일 변환 – 텍스처 분석은 주로 밝기 값 기반
import cv2
import numpy as np

img = cv2.imread('sample_texture.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. 노이즈 제거 – Gaussian Blur, Median Filter 등
blur = cv2.GaussianBlur(gray, (5,5), 0)
  1. 이미지 정규화 – 값 범위를 0~1로 변환
normalized = blur / 255.0

전처리를 통해 잡음과 조명 변화에 영향을 덜 받는 특징 벡터를 얻을 수 있습니다.


텍스처 특징 추출(Feature Extraction)

텍스처 분석에서 핵심은 GLCM(Gray Level Co-occurrence Matrix) 기반의 특징 추출입니다.
GLCM은 픽셀 간의 밝기 관계를 수치화하여 텍스처를 표현합니다.

from skimage.feature import greycomatrix, greycoprops

# GLCM 생성
glcm = greycomatrix((normalized*255).astype('uint8'), distances=[1,2,4], angles=[0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)

# 주요 텍스처 특성 추출
contrast = greycoprops(glcm, 'contrast')
dissimilarity = greycoprops(glcm, 'dissimilarity')
homogeneity = greycoprops(glcm, 'homogeneity')
energy = greycoprops(glcm, 'energy')
correlation = greycoprops(glcm, 'correlation')
  • Contrast: 이미지 밝기 차이 정도
  • Dissimilarity: 서로 다른 값의 픽셀 빈도
  • Homogeneity: 지역적 균일성
  • Energy: 텍스처 규칙성
  • Correlation: 픽셀 간 상관 관계

이러한 벡터를 결합하면 이미지의 텍스처를 정량적으로 표현할 수 있습니다.


필터 기반 텍스처 분석

GLCM 외에도 필터 기반 텍스처 분석 방법이 있습니다.

  1. Gabor Filter – 방향성과 주파수 기반 필터링
import cv2
import numpy as np

kernel = cv2.getGaborKernel((21,21), 5, np.pi/4, 10, 0.5, 0, ktype=cv2.CV_32F)
filtered_img = cv2.filter2D(normalized, cv2.CV_8UC3, kernel)
  1. Laws Texture Energy – 에너지 기반 텍스처 측정
  2. Local Binary Patterns (LBP) – 지역적 패턴 인식, 분류에 유용

필터를 적용하면 이미지 내 특정 방향성, 반복 패턴, 구조를 강조할 수 있으며,
특히 산업용 결함 탐지나 재료 표면 분석에 강력합니다.


텍스처 기반 분류 및 응용

추출된 텍스처 특징을 활용하면, 이미지 분류와 패턴 인식이 가능합니다.
예를 들어 머신러닝 모델을 사용하면 다음과 같은 응용이 가능합니다.

  • 산업 검사: 금속, 섬유, 목재 표면 결함 자동 검출
  • 의료 영상: 조직 특성 분석, 암 조직 탐지
  • 농업/환경 모니터링: 토양 유형 분류, 식생 상태 분석
  • 원격 탐사: 도시, 산림, 수체 영역 구분
from sklearn.ensemble import RandomForestClassifier

X = np.array([contrast.flatten(), homogeneity.flatten(), energy.flatten()]).T
y = labels  # 이미지에 대한 라벨

clf = RandomForestClassifier()
clf.fit(X, y)
predictions = clf.predict(X_test)

텍스처 기반 분석은 단순한 색상이나 형태보다 복잡한 구조와 패턴을 포착하기 때문에,
정밀한 이미지 분류와 이상 탐지에 특히 효과적입니다.


텍스처 분석 시 고려 사항

  1. 조명과 스케일 – 조명 변화와 이미지 확대/축소에 민감하므로 전처리 필요
  2. 노이즈 – 필터링과 정규화로 영향을 최소화
  3. 특징 선택 – GLCM, Gabor, LBP 등 목적에 맞는 특징 선택
  4. 연산 효율 – 대용량 이미지 분석 시 병렬 처리 고려

결론

Python을 활용한 이미지 텍스처 분석과 특징 추출
산업용 검사, 의료 영상, 원격 탐사, 환경 모니터링 등 다양한 분야에서 강력한 도구입니다.

OpenCV와 Scikit-image를 통해 전처리, GLCM, 필터 기반 분석, LBP 등 다양한 기법을 구현할 수 있으며,
추출된 특징 벡터는 머신러닝 및 딥러닝 모델과 결합하여 자동 분류와 결함 탐지에 활용할 수 있습니다.

앞으로 텍스처 분석은 AI와 결합하여 더욱 정밀하고 실시간 분석이 가능해지며,
산업 및 연구 환경에서 필수적인 컴퓨터 비전 기술로 자리잡을 것입니다.