본문 바로가기

졸업프로젝트/OpenCV

[OpenCV]Morphological Transformation

728x90

 

Morphological Transformations

Theory

  • Erosion : 제거
  • Dilation : 확장
  • Opening : Erosion → Dilation 
  • Closing : Dilation → Erosion 

Function

  • cv2.erod() : Erosion
  • cv2.dilate() : Dilation
  • cv2.morphologyEx() : Opening / Closing (매개변수를 이용하여 무엇을 선택할지 지정)

 

structing element 

원하는 이미지를 스캔하여 특정 부분에 대하여 "Erosion/Dilation/Opening/Closing" 할 때 사용할 kernel(filter)을 만들어 줌

 

cv2.getStructuringElement(shape,ksize)

cv2.getStructuringElement(shape : Element의 모양, ksize : 커널의 크기 , anchor )

 

shape 

사각형 : MORPH_RECT

십자가 : MORPH_CROSS

타원 모양 : MORPH_ELLIPSE

#사각형
ksize = (5,5)
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]

#타원
ksize = (5,5)
[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]

#십자가
ksize = (5,5) / anchor= (2,3)
[0,1,0,0,0],
[0,1,0,0,0],
[1,1,1,1,1],
[0,1,0,0,0],
[0,1,0,0,0]

 

 

 

Erosion : 제거

원하는 이미지에 각 pixel에 structing element*를 스캔하면서 하나라도 0이 있는 경우 해당 pixel을 제거하는 방식 

하나의 큰 이미지에서 작은 Object들을 제거하는 효과

https://opencv-python.readthedocs.io/en/latest/doc/12.imageMorphological/imageMorphological.html#cv2.morphologyEx

Original Image에 대해 Struting Element를 적용하면 최종적으로 오른쪽의 결과를 얻게됨 

 

erode()

cv2.erode(image : 적용을 원하는 이미지url, kernel : structing element, anchor : 해당 structing element내에서 제거를 원하는 픽셀, iteration : 제거를 반복할 횟수)

*anchor default : (-1,-1)

Structing element를 Original image에 적용하여, 원본의 각 pixel 에 적용하여 겹치는 부분이 없는 부분이 하나라도 있으면

structing element 내의 anchor에 해당하는 픽셀을 제거함 

 

Dilation : 확장 

원하는 이미지에 각 pixel에 structing element*를 스캔하면서 하나라도 1이 있는 경우 해당 pixel을 채우는 하는 방식 

경계가 부드러워지고, 구멍이 메워지는 효과 

 

dilation()

cv2.dilation(image : 적용을 원하는 이미지url, kernel : structing element, anchor : 해당 structing element내에서 제거를 원하는 픽셀, iteration : 제거를 반복할 횟수)

*anchor default : (-1,-1)

Structing element를 original image와 OR연산을 적용하여 (0,0인 경우만 0 이므로) 채워지는 효과를 얻음

 

 

Morphology : Opening(제거 후 확장) / Closing (확장 후 제거)

Erosion과 Dilation을 조합한 결과

  • Opeing : Erosion적용 후 Dilation 적용. 작은 Object나 돌기 제거에 적합
  • Closing : Dilation적용 후 Erosion 적용. 전체적인 윤곽 파악에 적합

 

morphologyEx()

cv2.morphologyEx(image : 적용을 원하는 이미지url, op : type of Morphological op(opening/closing), kernel : structing element, anchor : 해당 structing element내에서 제거를 원하는 픽셀, iteration : 제거를 반복할 횟수)

*anchor default : (-1,-1)

 

op

 

 

 

참고 사이트

opencv-python.readthedocs.io/en/latest/doc/12.imageMorphological/imageMorphological.html#cv2.morphologyEx

 

Morphological Transformations — gramman 0.1 documentation

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

opencv-python.readthedocs.io

docs.opencv.org/master/d4/d86/group__imgproc__filter.html#ga67493776e3ad1a3df63883829375201f

 

OpenCV: Image Filtering

void cv::bilateralFilter (InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)  Applies the bilateral filter to an image. More...   void cv::blur (InputArray src, OutputArray dst, Size ksize, Poin

docs.opencv.org

 

728x90