본문 바로가기
Python/Computer Vision

[파이썬, Python] OpenCV - 모폴로지 처리, 모폴로지 연산

by coding-choonsik 2023. 9. 2.
728x90
반응형
SMALL

1. 모폴로지 처리

  • 영상의 밝은 영역이나 어두운 영역을 축소, 확대하는 기법
  • 모폴로지 구조 요소를 생성
  • cv2.getStructuringElmement(구조 요소의 모양, 사이즈)
  •  구조 요소의 모양
    • cv2.MORPH_RECT: 사각형
    • cv2.MORPH_ELLIPSE: 타원형
    • cv2.MORPH_CROSS: 십자형

 

1-1. 침식(erosion) 연산

  • 이미지를 깎아내는 연산
  • 객체 크기는 감소하고 배경은 확대
  • 작은 크기의 객체(노이즈)제거 효과가 있음
  •  cv2.erode(영상, 구조요소, 출력영상, 고정점 위치)

 

1-2.  팽창(dilation) 연산

  • 물체의 주변을 확대하는 연산
  • 객체가 커지는 연산
  • 팽창 연산은 객체 외곽을 확대시키는 연산
  • 객체 크기는 증가되고 배경은 감소되는 효과
  • cv2.dilate(영상, 구조요소, 출력영상, 고정점 위치)

 

import cv2

img = cv2.imread('circuit.bmp', cv2.IMREAD_GRAYSCALE)

# 구조 요소를 생성
se = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))  # 사각형

dst1 = cv2.erode(img, se)  # 얇은 선들이 없어지고 외곽선이 쭈굴쭈굴한 것이 얇아짐
dst2 = cv2.dilate(img, None)  # 기본값은 3*3, 얇은 선들이 뚱뚱해지고 쭈굴쭈굴한 것이 두꺼워짐
cv2.imshow('img', img)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()

▲ 순서대로 img, dst1, dst2

 

* 침식은 어두운 부분의 노이즈를 제거하는 효과
* 팽창은 밝은 부분의 노이즈를 제거하는 효과
* 노이즈 제거 효과는 좋지만 원래 모양이 홀쭉해지거나 뚱뚱해지는 변형이 일어남

1-3. 열림(Opening)

  • 팽창 연산과 침식 연산의 조합
  • 침식 연산을 적용한 다음, 팽창 연산을 적용
  • 침식 연산으로 인해 밝은 영역이 줄어들고, 어두운 영역이 늘어남
  • 객체의 크기 감소를 원래대로 복구할 수 있음

 

1-4. 닫힘(Closing)

  • 팽창 연산과 침식 연산의 조합
  • 팽창 연산을 적용한 다음, 침식 연산을 적용
  • 어두운 영역이 줄어 들고 밝은 영역이 늘어남
  • 늘어난 영역을 다시 복구하기 위해 침식 연산을 적용하면 밝은 영역이 줄어들고 어두운 영역이 늘어남
  • 객체 내부의 홀이 사라지면서 발생한 크기 증가를 복구할 수 있음

 

* 열림/닫힘 연산은 팽창/침식 연산으로 변형된 원래 모습을 되돌릴 수 있음

 


1-5. 그래디언트(Gradient)

  • 팽창 연산과 침식 연산의 조합
  • 열림 연산이나 닫힘 연산과 달리 입력 이미지에 각각 팽창 연산과 침식 연산을 적용하고 감산을 진행
  • cv2.morphologyEx(영상, 연산방법, 구조요소)
  • 연산 방법
    • cv2.MORPH_DILATE: 팽창연산
    •  cv2.MORPH_ERODE: 침식연산
    • cv2.MORPH_OPEN: 열림연산
    • cv2.MORPH_CLOSE: 닫힘연산
    • cv2.MORPH_GRADIENT: 그래디언트

 

728x90
반응형
LIST