Skip to content

Mathematical morphology

수학적 형태학(영어: Mathematical morphology, MM)은 집합론, 격자론, 위상수학, 그리고 무작위 함수에 기반한 기하학적 구조를 분석하고 처리하는 이론과 기술이다. MM은 대부분 디지털 이미지에 적용되지만, 그래프, 폴리곤 메시, 솔리드, 그리고 많은 공간 구조에도 적용할 수 있다.

크기, 모양, 볼록성, 연결성, 그리고 지오데식 거리같은 위상수학적 그리고 기하학적 연속공간 개념은 MM에 의해서 연속 공간과 이산 공간 모두에 소개되었다. MM은 또한 이미지를 위의 특성화에 따르도록 이미지를 바꾸는 연산의 집합으로 이루어진 형태학적 디지털 화상 처리의 근본이다.

기본 형태학적 연산은 침식, 팽창, 열기과 닫기가 있다.

MM은 원래 이진 이미지를 위해서 만들어졌고, 나중에 회색조 함수와 이미지로 확장되었다. 잇따라 나온 완비 격자로의 일반화는 오늘날 MM의 이론적인 근원으로 넓게 받아들여진다.

in Image Processing

영상처리 분야 에서 모폴로지 (Morphology) 기법은 영상을 형태학적 관점에서 보고 접근하는 방법. 영상내에 존재하는 특정 객체의 형태를 변형시키는 용도로 사용되는 영상처리기법.

  • 이진영상처리에 주로 사용됨
  • 집합의 포함관계,이동,대칭,여집합,차집합 등을 이용함
  • 영상에서 잡음을 제거하거나 ,영상에서 객체의 모양을 기술하는 용도로 사용됨 (e.g. 모폴로지의 대표적인 예로 침식과 팽창 연산이있음)
  • 침식연산은 영상내에서 객체 영역을 깍아내는 효과를 나타냄
  • 팽창연산은 객체 영역을 확장시키는 결과를 만듬

필터

닫힘 필터
하얀색 전경 객체의 작은 구멍이 채워졌음을 볼 수 있고, 인접한 여러 객체와 함께 연결됬다. 구조 요소를 포함하기엔 매우 작은 임의의 홀이나 간격을 제거한다.
열림 필터
장면 내의 여러 작은 객체를 제거한다.구조 요소를 포함하기에 매우 작은 것을 모두 제거한다.

두 필터는 객체 감지에 자주 사용.

  • 열림 필터가 영상 잡음으로 인한 작은 덩어리를 제거 하고
  • 닫힘 필터가 잘못된 조각인 객체를 작은 부분으로 함께 연결.

즉, 순서대로 두 필터를 사용하는 것이 유리

Erosion

바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀을 0(검은색)으로 만듭니다.

  • 노이즈(작은 흰색 물체)를 제거하거나
  • 붙어 있는 오브젝트들을 분리하는데 사용할 수 있습니다.

OpenCV에서 cv2.erode를 사용한다.

kernel = np.ones((5, 5), np.uint8)
result = cv2.erode(img, kernel, iterations=1)

Morphology-erosion-kernel-samples.png

커널의 크기를 고정하고 반복 횟수(iterations)를 증가시켜서도 오브젝트 외곽에서 0이 되는 픽셀의 정도를 조절할 수 있습니다.

Morphology-erosion-iteration-samples.png

Dilation

Erosion과 반대로 동작합니다. 바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀 주변에 1(흰색)으로 추가합니다.

  • 객체를 강조한다.
  • 0이 아닌 x값이 있으면 주변을 x로 채운다.
  • (노이즈-작은 흰색 오브젝트-를 없애기 위해 사용한) Erosion에 의해서 작아졌던 오브젝트를 원래대로 돌리거나
  • 인접해 있는 오브젝트들을 하나로 만드는데 사용할 수 있습니다.

OpenCV에서 cv2.dilate를 사용한다.

kernel = np.ones((5, 5), np.uint8)
result = cv2.dilate(img, kernel, iterations = 1)

Morphology-dilation-kernel-samples.png

마찬가지로 반복 횟수(iterations)를 조절할 수 있다.

Morphology-dilation-iteration-samples.png

Opening

Erosion 연산 다음에 Dilation 연산을 적용합니다. 이미지 상의 노이즈(작은 흰색 물체)를 제거하는데 사용합니다.

노이즈(작은 흰색 오브젝트)를 없애기 위해 사용한 Erosion에 의해서 작아졌던 오브젝트에 Dilation를 적용하면 오브젝트가 원래 크기로 돌아오게 됩니다.

OpenCV에서 cv2.morphologyEx를 사용하며, 인자로 cv2.MORPH_OPEN를 사용한다.

kernel = np.ones((5, 5), np.uint8)
result = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

Morphology-opening-samples.png

Closing

Opening과 반대로 Dilation 연산을 먼저 적용한 후, Erosion 연산을 적용합니다. (흰색 오브젝트에 있는 작은 검은색) 구멍들을 메우는데 사용합니다. -> 검은색 노이즈를 제거

OpenCV에서 cv2.morphologyEx를 사용하며, 인자로 cv2.MORPH_CLOSE를 사용한다.

kernel = np.ones((11, 11), np.uint8)
result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

Morphology-closing-samples.png

Gradient

엣지를 진하게 강조하고 싶을 때 사용한다.

Gradient = 팽창(dilation) - 침식(erosion)

Mathematical_morphology_-_Gradient.gif

Tophat

밝기 값이 크게 변하는 영역을 강조.

Tophat = 원본 - Opening

Mathematical_morphology_-_Tophat.gif

Blackhat

어두운 영역을 강조.

Blackhat = Closing - 원본

Mathematical_morphology_-_Blackhat.gif

See also

Favorite site

OpenCV