728x90
반응형
이번 포스팅은 책 '파이썬으로 만드는 OpenCV 프로젝트'를 보고 공부한 내용을 바탕으로 만들었습니다.
혹시나 틀린 부분이나 수정해야 할 부분이 있다면 댓글 남겨주세요!
모폴로지(morphology)는 노이즈, 구멍 제거, 경계 붙이기 등의 연산에 효과적입니다.
대표적인 연산은 침식, 팽창이며 둘을 결합한 열림과 닫힘 연산이 있습니다.
침식(erosion) 연산
- 침식 연산은 1로 채워진 커널을 입력 영상에 적용하여 커널 안에 전부 1로 들어가지 않으면 0으로 반환합니다.
- OpenCV 에서 커널 생성을 위해 함수를 제공하며 cv2.getStructuringElment()이며 MORPH_RECT는 사격형으로 커널을 만든다는 의미이며 (6,6)은 커널의 크기를 의미합니다.
- 침식 연산을 위한 함수는 cv2.erode(src, kernel)입니다.
- 결과를 보았을 때 그림이 홀쭉해진 것을 볼 수 있고 작은 점들이 사라진 것을 볼 수 있습니다.
팽창(dilatation) 연산
- 팽창은 침식과 반대로 영상 영역을 확장시키는 연산입니다.
- 마찬가지로 커널을 입력영상에 적용하여 커널에 1이 다 채워지지 않으면 해당 픽셀은 1로 넣습니다.
- OpenCV는 cv2.dilate(src, kernel)로 팽창 함수를 제공합니다.
- 결과를 보면 그림이 통통해진 것을 확인할 수 있고 그림 안에 있는 검은색 점들이 사라진 것을 볼 수 있습니다.
열림과 닫힘, 그 외의 모폴로지 연산
앞의 침식, 팽창 연산의 결과로 봤을 때 원래의 영상이 변형되는 문제점을 가지고 있습니다.
그렇지만 침식과 팽창의 연산을 조합한다면 모양을 유지하며 노이즈를 제거할 수 있습니다.
OpenCV에서 열림과 닫힘, 그 외의 모폴로지 연산을 cv2.morphologyEx(src, op, kernel)로 제공합니다.
op는 모폴로지 연산 종류를 지정하며 코드와 함께 설명하겠습니다.
열림(opening)과 닫힘(closing) 연산
- getStructuringElement 함수로 사각형 (4,4)의 커널을 생성하였고 morphologyEx의 op를 변경하며 결과를 나타내었습니다.
- cv2.MORPH_OPEN은 열림, cv2.MORPH_CLOSE는 닫힘입니다.
- 열림의 경우 침식 연산 후 팽창 연산을 수행하며, 닫힘은 팽창 연산 후 침식 연산을 수행합니다.
- 그 결과 영상의 변형이 없으면서 노이즈를 제거한 것을 볼 수 있습니다.
그래디언트(gradient) 연산
- 그래디언트는 팽창 연산 결과에서 침식 연산 결과를 빼게 되는데 이 경우 경계만 얻게 됩니다.
- 앞에 내용에서 살펴본 경계(edge) 검출과 비슷한 결과를 볼수 있습니다.
- morphologyEx의 op를 cv2.MORPH_GRADIENT를 주게 되면 그래디언트 연산을 수행합니다.
탑햇(tophat)과 블랙햇(blackhat) 연산
- 탑햇(top hat) 연산은 원본 영상에서 열림 연산의 결과를 뺀 것이며 밝기 값이 크게 튀는 곳을 강조할 수 있습니다
- 블랙햇(black hat) 은 닫힘 연산 결과에서 원본 영상을 뺀 것이며 어두운 부분을 강조할 수 있습니다.
- op는 각각 MORPH_TOPHAT, MORPH_BLACKHAT이며 결과로 보면 달의 밝은 부분과 어두운 부분이 강조된 것을 볼 수 있습니다.
오늘은 6장 영상필터의 모폴로지 연산을 정리해 보았습니다.
문제가 있는 부분이나 질문이 있으면 댓글로 남겨주시길 바랍니다.
감사합니다.
728x90
반응형
'영상처리' 카테고리의 다른 글
Python - OpenCV (6) : Image Inpainting (0) | 2021.07.09 |
---|---|
Python - OpenCV (5) : 허프 변환 (Hough Transformation) (0) | 2021.05.25 |
Python - OpenCV (4) : 컨투어(contour) 1 (0) | 2020.12.06 |
Python - OpenCV (2) : 영상 필터 경계(edge) 검출 (0) | 2020.12.03 |
Python - OpenCV (1) : 영상 필터 convolution & blurring (0) | 2020.12.02 |