Image Filtering(Morphology)
커널의 종류
cv2.getStructuringElement(shape, ksize, anchor)
shape: 구조화 요소 커널 모양 (MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS)
ksize: 커널 크기
anchor(optional): 구조화 요소의 기준점, MORPH_CROSS에만 의미 있으며 기본 값은 중심점 (-1, -1)
kernal = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
연산의 종류
src: 입력 영상, 바이너리
kernel: 구조화 요소 커널
anchor(optional): cv2.getStructuringElement()와 동일
iterations(optional): 침식 연산 적용 반복 횟수
boderType(optional): 외곽 영역 보정 방법
boderValue(optional): 외곽 영역 보정 값
침식(erosion)
cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
erosion = cv2.erode(thresh, kernal)
팽창(dilate)
cv2.dilate(src, kernel, dst, anchor, iterations, bordeType, borderValue)
dilate = cv2.dilate(thresh, kernal)
src: 입력 영상
op: 연산 종류 - 설명은 밑에
kernel: 구조화 요소 커널
dst(optional): 결과 영상
anchor(optional): 커널의 기준점
iteration(optional): 연산 반복 횟수
borderType(optional): 외곽 영역 보정 방법
borderValue(optional): 외곽 영역 보정 값
cv2.morphologyEx(src, op, kernel, dst, anchor, iteration, borderType, borderValue)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernal)
MORPH_OPEN - 열림
열림 = 침식 + 팽창
열림 연산은 주변보다 밝은 노이즈를 제거하는데 효과적입니다.
또한 맞닿아 있는 것처럼 보이는 독립된 개체를 분리하거나 돌출된 모양을 제거하는 데 효과적입니다
MORPH_CLOSE - 닫힘
닫힘 = 팽창 + 침식
닫힘 연산은 주변보다 어두운 노이즈를 제거하는데 효과적입니다.
또한 끊어져 보이는 개체를 연결하거나 구멍을 메우는 데 효과적입니다.
MORPH_GRADIENT - 그레디언트
그레디언트 = 팽창 - 침식
팽창 연산을 적용한 이미지에서 침식 연산을 적용한 이미지를 빼면 경계 픽셀만 얻게 되는데, 경계 검출과 비슷합니다.
MORPH_TOPHAT - 탑햇
탑햇 = 원본 - 열림
원본에서 열림 연산 적용 결과를 빼면 값이 크게 튀는 밝은 영역을 강조할 수 있습니다.
MORPH_BLACKHAT - 블랙햇
블랙햇 = 닫힘 - 원본
닫힘 연산 적용 결과에서 원본을 빼면 어두운 부분을 강조할 수 있습니다.