영상처리/OpenCV
모폴로지 연산
성혜영
2022. 6. 8. 14:24
모폴로지 연산
모폴로지 변환의 팽창(dilation)과 침식(erosion)을 기본 연산을 사용해 고급 형태학을 적용하는 변환 연산. 입력 이미지가 이진화된 이미지라면 침식/연산 으로도 충분, 그레이 스케일이나 다중 채널 이미지를 사용하는 경우 사용.
# 모폴로지 연산 함수
dst = cv2.morphologyEx(
src,
op,
kernel,
anchor=None,
iterations=None,
borderType=None,
borderValue=None
)
모폴로지 연산은 모폴로지 변환에 기반을 두고 있기 때문에 매개변수가 거의 동일. > 연산자(op)라는 매개변수를 추가로 받음. 모폴로지 변환 함 수를 수행하는 복합 연산 방식 의미. 연산 함수는 연산자 플래그에서 팽창/침식을 지원하므로 따로 사용하지 않고도 변환 가능. 총 여덟가지의 연산자 지원.
모폴로지 연산자 (팽창/침식 제외)
* 열림 연산
- 팽창과 침식 연산자의 조합이며, 침식 연산을 적용한 다음, 팽창 연산을 적용.
- 어두운 영역 및 밝은 영역의 조정으로 스펙클이 사라지며 발생한 객체의 크기 감소를 원상태로 복구 가능.
- dst = deliate(erode(src))
* 닫힘 연산
- 팽창과 침식 연산자의 조합이며, 팽창 연산을 적용한 다음, 침식 연산을 적용.
- 어두운 영역 및 밝은 영역의 조정으로 스펙클이 사라지며 발생한 객체의 크기 감소를 원상태로 복구 가능.
- dst = erode(dilate(src))
* 그레이디언트 연산
- 팽창과 침식 연산자의 조합이며, 입력 이미지에 각각 팽창 연산과 침식 연산을 적용하고 감산 진행.
- 팽창과 침식의 결과를 감산한다면 객체의 가장자리가 반환.
- 밝은영역의 가장자리를 분리하며 그레이스케일 이미지가 가장 급격하게 변하는 곳에서 가장 높은 결과 반환.
- dst = dilate(src) - erode(src)
* 탑햇 연산
- 팽창과 침식 연산자의 조합이며, 입력 이미지에 열림 연산을 적용한 이미지를 감산.
- 열림 연산이 적용된 이미지는 스펙클이 사라지고 객체의 크기가 보존.
- 이 결과를 감산하면 밝은 영역이 분리되어 사라졌던 스펙클이나 작은 부분들이 표시.
- 입력 이미지에 객체들이 제외되고 국소적으로 밝았던 부분들이 분리.
- 즉, 열림 연산에서 사라질 요소들을 표시.
- dst = src - open(src)
* 블랙햇 연산
- 팽창과 침식 연산자의 조합이며, 닫힘 연산을 적용한 이미지에 입력 이미지 감산.
- 닫힘 연산이 적용된 이미지는 객체 내부의 홀이 사라지고 객체의 크기가 보존된 결과.
- 이 결과를 감산하면 어두운 영역이 채워져 사라졌던 홀 등이 표시.
- 입력 이미지의 객체들이 제외되고 국소적으로 어두웠던 홀들이 분리.
- 즉, 닫힘 연산에서 사라질 요소들을 표시.
- dst = close(src) - src
* 히트미스 연산
- 단일 채널 이미지에서 활용하며, 주로 이진화 이미지에 적용.
- 이미지의 전경이나 배경 픽셀의 특정 패턴을 찾는데 사용하는 이진 형태학
- 히트미스에서의 커널은 기존과 다른 역할 (0 : 해당 픽셀을 고려하지 않음 / 1 : 해당 요소를 유지)
- 모서리(corner) 검출하는 데 활용
# 모폴로지 히트미스
import numpy as np
import cv2
src = cv2.imread("Chapter6/Example-06-12-Py/dandelion.jpg", cv2.IMREAD_GRAYSCALE)
_, binary = cv2.threshold(src, 127, 255, cv2.THRESH_BINARY)
kernel = np.array([[1, 0, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 1, 0],
[1, 0, 0, 0, 1]])
dst = cv2.morphologyEx(binary, cv2.MORPH_HITMISS, kernel, iterations=1)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
ndarray 클래스에 임의의 구조 요소를 생성해 모폴로지 연산 함수에 히트미스 플래그를 적용. 커널의 크기는 5x5이고, X형태로 1의 요소를 할당해 x 형태의 픽셀만 유지되도록 구성.