영상을 형태학적 관점에서 보고 접근하는 방법
영상내에 존재하는 특정 객체의 형태를 변형시키는 용도로 사용되는 영상처리기법
- 이진영상처리에 주로 사용됨
- 집합의 포함관계,이동,대칭,여집합,차집합 등을 이용함
- 영상에서 잡음을 제거하거나 ,영상에서 객체의 모양을 기술하는 용도로 사용됨
예: 모폴로지의 대표적인 예로 침식과 팽창연산이있음 - 고수준 모폴로지 를 적용하려면 morphologyEx 함수를 이용
Erode, Dilate
필터 내부의 가장 낮은(어두운) 값으로 변환(and) - 침식연산
- 바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀을 0(검은색)으로 만듭니다.
- Foreground 가 되는 이미지의 경계부분을 침식시켜서 Background 이미지로 전환한다.
- Foreground 이미지가 가늘게 된다.
- 흐릿한 경계부분은 배경으로 만들어버린다고 생각
cv2.erode(src, kernel, dst, anchor, iterations, borderType, borderValue)
erosion = cv2.erode(img, kernel, iterations=1)
- src – the depth should be one of CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
- kernel – structuring element.
cv2.getStructuringElemet()
함수로 만들 수 있음. - anchor – structuring element의 중심. default (-1,-1)로 중심점.
- iterations – erosion 적용 반복 횟수
필터 크기를 크게 할 수록 변화량이 많아진다.
사용한 커널의 크기에 따라 오브젝트 외곽에서 0이 되는 픽셀의 정도가 달라집니다.
iterations : 반복 수행 횟수
3번째 인자는 mask의 중심점인데 default로 -1,-1이 들어간다.
Dilate
필터 내부의 가장 높은(밝은) 값으로 변환(or) - 팽창연산
cv2.dilation(src, kernel, dst, anchor, iterations, borderType, borderValue)
- rc – the depth should be one of CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
- kernel – structuring element.
cv2.getStructuringElemet()
함수로 만들 수 있음. - anchor – structuring element의 중심. default (-1,-1)로 중심점.
- iterations – dilation 적용 반복 횟수
- 바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀 주변에 1(흰색)으로 추가합니다.
- 노이즈(작은 흰색 오브젝트)를 없애기 위해 사용한 Erosion에 의해서 작아졌던 오브젝트를 원래대로 돌리거나 인접해 있는 오브젝트들을 하나로 만드는데 사용할 수 있습니다.
Opening
두 연산은 순서에 따라 서로 다른 기능을 한다.
- Erode - Dilate
cv2.MORPH_OPEN
- 이미지 상의 노이즈(작은 흰색 물체)를 제거하는데 사용합니다.
kernel = np.ones((5, 5), np.uint8)
result = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
opened = cv2.cv2.morphologyEx(binary, cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)), iterations=5)
- src – Source image. The number of channels can be arbitrary. The depth should be one of
CV_8U
,CV_16U
,CV_16S
,CV_32F
or ``CV_64F`. - op - Type of a morphological operation that can be one of the following:
- MORPH_OPEN - an opening operation
- MORPH_CLOSE - a closing operation
- MORPH_GRADIENT - a morphological gradient. Dilation과 erosion의 차이.
- MORPH_TOPHAT - “top hat”. Opeining과 원본 이미지의 차이
- MORPH_BLACKHAT - “black hat”. Closing과 원본 이미지의 차이
- kernel – structuring element.
cv2.getStructuringElemet()
함수로 만들 수 있음. - anchor – structuring element의 중심. default (-1,-1)로 중심점.
- iterations – erosion and dilation 적용 횟수
- borderType – Pixel extrapolation method. See
borderInterpolate
for details. - borderValue – Border value in case of a constant border. The default value has a special meaning.
Closing
- Dilate - Erode
cv2.MORPH_CLOSE
- 보통 한 객체를 추출했을 때 두개 이상의 작은 부분으로 나올 경우 큰 객체로 합칠 때 사용한다.
- 희색 오브젝트에 있는 작은 검은색 구멍들을 메우는데 사용합니다.
closed = cv2.cv2.morphologyEx(binary, cv2.MORPH_CLOSE,
cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)), iterations=5)
'Python > Image vision' 카테고리의 다른 글
이미지의 기하학적 변형 (0) | 2020.01.20 |
---|---|
OCR 이미지 문자열 추출 (Tesseract) (0) | 2020.01.20 |
Contour Feature (0) | 2020.01.20 |
Image Contours (0) | 2020.01.20 |
Image Smoothing (0) | 2020.01.20 |