영상처리

Part 10 : 모폴로지 연산 (Morphological Operations)

dainj 2026. 2. 27. 12:12

 

모폴로지 연산은 영상 내 객체의 '형태'를 분석하고 조작하는 기술이다. 주로 이진 영상(Binary Image)에서 작은 잡음을 없애거나, 끊어진 혈관을 잇고, 장기의 윤곽선을 추출하는 등 의료 영상의 전처리 및 후처리에 널리 활용한다.

원본이미지

1. 침식(Erosion)과 팽창(Dilation)

모폴로지의 가장 기본이 되는 두 연산이다. 모든 연산은 커널(Kernel) 혹은 구조 요소라고 불리는 작은 행렬을 영상 위에서 슬라이딩하며 수행한다.

  • 침식 (Erosion) : 원리: 커널 범위 내의 모든 픽셀이 1(흰색)일 때만 중심 픽셀을 1로 유지하고, 하나라도 0(검은색)이 있으면 0으로 바꾼다.
    • 효과: 객체의 크기가 줄어들며, 배경에 흩어져 있는 아주 작은 흰색 잡음(Noise)을 깎아서 없애버릴 때 유용하다.
  • 팽창 (Dilation) : 원리: 커널 범위 내에 픽셀 중 하나라도 1이 있으면 중심 픽셀을 1로 만든다.
    • 효과: 객체의 크기가 커지며, 객체 내부의 작은 구멍을 메우거나 미세하게 끊어져 있는 선들을 하나로 연결할 때 사용한다.

[실습 코드: 침식 및 팽창]

Python
# n x n 크기의 커널 설정 (n이 커질수록 효과가 강해짐)
n = 3
img = cv2.imread("j.png", cv2.IMREAD_GRAYSCALE)
kernel = np.ones((n, n), np.uint8)

# 침식(Erosion) 수행
erosion = cv2.erode(img, kernel, iterations = 1)

# 팽창(Dilation) 수행
dilation = cv2.dilate(img, kernel, iterations = 1)

# 원본과 결과를 가로로 붙여서 비교 출력
cv2_imshow(np.hstack((img, erosion)))
cv2_imshow(np.hstack((img, dilation)))

침식
팽창


2. 열기(Opening)와 닫기(Closing)

침식과 팽창을 순서대로 조합하여 단일 연산보다 더 정교한 결과를 얻는 기법이다.

  • 열기 (Opening) : [침식 수행 후 -> 팽창 수행]
    • 효과: 침식으로 작은 잡음을 먼저 제거한 뒤, 다시 원래 크기로 팽창시킨다. 객체의 크기는 유지하면서 바깥쪽의 자잘한 노이즈만 깔끔하게 지우고 싶을 때 사용한다.
  • 닫기 (Closing) : [팽창 수행 후 -> 침식 수행]
    • 효과: 팽창으로 객체 내부의 구멍이나 틈을 먼저 메운 뒤, 다시 원래 크기로 침식시킨다. 객체 내부의 어두운 잡음을 제거하거나 끊어진 부분을 붙일 때 최적이다.

[실습 코드: 열기 및 닫기]

Python
# 열기(Opening): 침식 후 팽창
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2_imshow(np.hstack((img, opening)))

# 닫기(Closing): 팽창 후 침식
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2_imshow(np.hstack((img, closing)))

열기
닫기


3. 형태학적 그라디언트 (Morphological Gradient)

이 연산은 객체의 윤곽선(Edge)을 추출하는 아주 똑똑한 방법이다.

  • 원리: 팽창된 영상(약간 뚱뚱해진 객체)에서 침식된 영상(약간 홀쭉해진 객체)을 뺀다.
  • 결과: 뚱뚱한 외곽과 홀쭉한 내측 사이의 '차이'만 남게 되어, 아주 깨끗한 객체의 테두리 선만 얻을 수 있다.

[실습 코드: Gradient 추출]

Python
# 그라디언트: 팽창 결과 - 침식 결과
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
cv2_imshow(np.hstack((img, gradient)))

 


모폴로지 연산은 의료 영상에서 장기를 분할(Segmentation)한 뒤 지저분한 테두리를 정리하거나, 뼈 영상에서 골밀도 분석을 위해 내부 구멍을 메우는 등 정말 광범위하게 쓰인다.