728x90
반응형

 

 

수학적 형태학이란?

 

수학적 형태학(Mathematical Morphology, MM)은 집합론, 격자론, 위상수학 그리고 무작위 함수에 기반한 기하학적 구조를 분석하고 처리하는 이술과 기론이다. 이는 대부분 디지털 이미지에 적용되지만, 그래프, 폴리곤 메시, 솔리드, 그리고 많은 공간 구조에도 적용할 수 있다. 크기, 모양, 블록성, 연결성 그리고 지오데식 거리 같은 위상수학적 그리고 기하학적 연속 공간 개념은 MM에 의해서 연속 공간과 이산 공간 모두에서 소개되었다. 또한 이미지를 위의 특성화에 따르도록 이미지를 변환하는 연산의 집합으로 이루어진 형태학적 디지털 화상 처리의 근본이다. 

 

 

 

구조적 요소란?

 

구조적 요소란 원본 이미지에 적용되는 커널(Kernel)이라고 할 수 있는데, 수학적 형태학에서 구조적 요소(Structuring Element)란 이 형태가 이미지에 맞는지, 맞지 않는지를 결론 내기 위해 주어진 이미지를 탐색하거나 작용하는데 사용되는 형태이다. 이는 특히 팽창(Dilation), 침식(Erosion), 열기(Opening), 닫힘(Closing)과 같은 형태학적 연산에 사용된다.

 

구조적 요소는 3 x 3 정사각형이나 21 x 21 정사각형이 될 수 있으며, 이는 커널 형태로 되어있고 이미지에 적용할 때 중심을 원점으로 사용할 수도 있고, 원점을 변경할 수도 있다. 또한 일반적으로 꽉찬 사각형, 타원형, 십자형을 많이 사용하기도 한다. 

 

아래와 같이 배열로 정의할 수도 있고 OpenCV의 cv2.getStructuringElement() 함수를 이용하여 만들 수도 있다. 

>>> cv2.getStructuringElement(cv2.MORP_ELLIPSE,(5,5))
array([[0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 1, 0, 0]], dtype=uint8)

 

 

 

침식(Erosion)

침식은 각 픽셀에 구조적 요소를 적용하여 하나라도 0이 있으면 대상 픽셀을 제거하는 방법이다.

 

십자형 구조적 요소를 원본 이미지에 적용하게 되고, 원본의 각 픽셀에 적용을 하여 겹치는 부분이 없는 부분이 하나라도 있으면 그 중심 픽셀을 제거하는 방식이다. 최종적으로 우측의 분홍색 영역만 남게 되며, 이 방법은 작은 객체를 제거하는 효과를 지닌다. 

 

 

 

팽창(Dilation)

팽창은 침식 연산과는 반대로 객체를 확대한 후 작은 구멍을 채우는 방법이다. 침식 연산과 마찬가지로 각 픽셀에 구조적 요소를 적용한다. 대상 픽셀에 대해 OR 연산을 수행한다. 즉 겹치는 부분이 하나라도 있다면 이미지를 확장하게 된다. 

 

 

이는 결과적으로 경계가 부드러워지고, 구멍이 메꿔지는 효과를 지닌다. 

 

 

이진 영상 및 회색조 영상의 팽창 연산에서 구조적 요소가 적용되는 과정은 아래 이미지를 참고하면 이해가 수월하다.

 

이진 영상에서의 팽창 연산

 

회색조 영상의 팽창 연산

 

 

 

 

열림(Opening) 및 닫힘(Closing) 연산

 

열림 및 닫힘 연산은 침식 및 팽창의 조합 결과이다. 침식과 팽창 중 어떤 것을 먼저 사용할지에 따라 열림 연산인지 닫힘 연산인지 정해진다. 

 

열림 연산

  • 침식 -> 팽창
  • 작은 객체 제거에 적합

 

닫힘 연산

  • 팽창 -> 침식
  • 전체적인 윤곽 파악에 적합

 

 

 

 

OpenCV에서의 침식, 팽창, 닫힘, 열림 연산 사용은 아래와 같다. 

 

import cv2
import numpy as np
from matplotlib import pyplot as plt

dotImage = cv2.imread('images/dot_image.png')
holeImage = cv2.imread('images/hole_image.png')
orig = cv2.imread('images/morph_origin.png')


kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
# kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
# kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))

erosion = cv2.erode(dotImage,kernel,iterations = 1)
dilation = cv2.dilate(holeImage,kernel,iterations = 1)

opening = cv2.morphologyEx(dotImage, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(holeImage, cv2.MORPH_CLOSE,kernel)
gradient = cv2.morphologyEx(orig, cv2.MORPH_GRADIENT, kernel)
tophat = cv2.morphologyEx(orig, cv2.MORPH_TOPHAT, kernel)
blackhat = cv2.morphologyEx(orig, cv2.MORPH_BLACKHAT, kernel)

images =[dotImage, erosion, opening, holeImage, dilation, closing, gradient, tophat, blackhat]
titles =['Dot Image','Erosion','Opening','Hole Image', 'Dilation','Closing', 'Gradient', 'Tophat','Blackhot']

for i in xrange(9):
    plt.subplot(3,3,i+1),plt.imshow(images[i]),plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

 

 

 

 

 

 

참고자료 1 : ko.wikipedia.org/wiki/%EC%88%98%ED%95%99%EC%A0%81_%ED%98%95%ED%83%9C%ED%95%99

 

수학적 형태학 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 어떤 모양(파란색)과 그 모양의 다이아몬드 모양의 생성적 요소로의 팽창(초록색)과 침식(노란색). 수학적 형태학(영어: Mathematical morphology, MM)은 집합론, 격자론

ko.wikipedia.org

참고자료 2 : ko.wikipedia.org/wiki/%EA%B5%AC%EC%A1%B0%EC%A0%81_%EC%9A%94%EC%86%8C

 

구조적 요소 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 수학적 형태학에서, 구조적 요소는 이 형태가 이미지에 맞는지, 맞지 않는지를 결론을 내기 위해 주어진 이미지를 탐색하거나 작용하는데 사용되는 형태이다.

ko.wikipedia.org

참고자료 3 : kr.mathworks.com/help/images/morphological-dilation-and-erosion.html

 

모폴로지 연산의 유형 - MATLAB & Simulink - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

참고자료 4 : opencv-python.readthedocs.io/en/latest/doc/12.imageMorphological/imageMorphological.html

 

Morphological Transformations — gramman 0.1 documentation

Theory Morphologicla Transformation은 이미지를 Segmentation하여 단순화, 제거, 보정을 통해서 형태를 파악하는 목적으로 사용이 됩니다. 일반적으로 binary나 grayscale image에 사용이 됩니다. 사용하는 방법으

opencv-python.readthedocs.io

 

728x90
반응형