7-4. 모폴로지 (1): 침식과 팽창
모폴로지(Mopology) 연산
영상을 형태학적 측면에서 다루는 기법으로 다양한 처리 시스템에서 전처리(Pre-processing)/후처리(post-processing)에 사용
필터와 비슷하게 커널(=마스크, 윈도우)로 연산 결과가 결정됨
침식과 팽창
| 침식(Erosion) | 팽창(Dilation) | |
| 연산 방식 | 구조 요소가 객체 영역 내부에 완전히 포함될 경우 고정점 픽셀을 255로 고정하고 외각에 해당되는 픽셀을 깎아내는 연산 | 구조 요소와 객체 영역이 한 픽셀이라도 만나는 경우 고정점 픽셀은 255로 설정함으로써 객체 외과을 확산하는 연산 |
| 연산 예시 (3x3 커널 사용) |
![]() (원본) |
|
![]() |
![]() |
|
| 효과 | 객체의 크기는 감소, 배경은 확대 | 객체 크기는 증가, 배경은 축소 |
| 사용 방식 | 작은 크기의 객체 및 잡음 제거에 효과적 | 객체 내부 빈 공간(Hole)을 매우는데 효과적 |
| 연산 함수 | cv2.erode(src, kernel, dst, anchor, iterations, borderType, borderValue) -> dst | cv2.dilate(src, kernel, dst, anchor, iteration, borderType, borderValue) -> dst |
| 인자 설명 | src는 입력 영상, dst는 src와 동일한 크기와 타입을 갖는 출력 영상 kernel는 구조 요소로써 getStructuringElement() 함수에 의해 생성 가능하며 None일 경우 3x3으로 설정 anchor는 kernel의 고정점 위치로 (-1,-1)일 경우 중앙점 사용 iterations는 반복 횟수로 기본값은 1 borderType는 가장자리 픽셀 확장 방식으로 기본값은 cv2.BORDER_CONSTANT borderValue는 cv2.BORDER_CONSTANT인 경우 확장된 가장자리를 채울 값 |
|
| 구조 요소 생성 | cv2.getStructuringElement(shape, ksize, anchor) -> retval | |
| 인자 설명 | shape는 구조 요소 모양을 나타내는 플래그![]() ksize는 구조 요소 크기로 (width, height) 튜플 형식 사용 anchor는 shape가 MORPH_CROSS일 경우 구조 요소의 고정점 좌표로 (-1,-1)일 경우 중앙점 사용 |
|


7-5. 모폴로지(2): 열기와 닫기
열기와 닫기
| 열기(Opening) | 닫기(Closing) | |
| 연산 방식 | 침식 -> 팽창 | 팽창 -> 침식 |
| 연산 예시 (3x3 커널 사용) |
![]() (원본) |
|
![]() |
![]() |
|
| 효과 | 작은 돌기, 객체가 사라지고 얇은 연결선이 끊어짐 | 작은 홈, 홀이 사라지고 얇은 연결선이 두꺼워짐 |
| 범용 연산 함수 | cv2.morphoogyEx(src, op, kernel, dst, anchor, iterations, borderType, borderValue) -> dst | |
| 인자 설명 | src는 입력 영상, dst는 출력 영상 op는 모폴로지 연산 플래그 ![]() ksize는 구조 요소 크기로 (width, height) 튜플 형식 사용 anchor는 shape가 MORPH_CROSS일 경우 구조 요소의 고정점 좌표로 (-1,-1)일 경우 중앙점 사용 iterations는 반복 횟수로 기본값은 1 borderType는 가장자리 픽셀 확장 방식으로 기본값은 cv2.BORDER_CONSTANT borderValue는 cv2.BORDER_CONSTANT인 경우 확장된 가장자리를 채울 값 |
|


지역 이진화한 영상에서 보면 쌀알이 아닌 흰 점들도 카운팅되기 때문에 열기 연산이 된 영상보다 더 많은 객체가 카운팅 된 것을 볼 수 있다. 반면 닫기 연산이 된 영상의 경우 팽창 후 침식 되었기 때문에 갯수가 좀 줄어들긴 했지만 역시 정확하다고 보기 어렵다.
인증 타임
술 한 잔 하고 블로그 글 쓰려니 너무 힘들다 ㅠㅠ 겹치는 객체에 대하여 처리 방식을 다른 것을 배웠던거 같은데 모폴로지라는 새로운 처리 방식을 배워서 흥미로웠다. 맨 처음 강의에 나왔던 질문, 우리는 사과를 어떻게 사과라고 판단하는가?,에 대한 답을 컴퓨터로 내리기 위해서 영상이 매우 많은 단계를 거쳐야함이 점점 실감이 난다.


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online
패스트캠퍼스(FastCampus) 강의 둘러보러 가기
↓ ↓ ↓
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'남돈내배 > 2022_FastCampus_환급이벤트' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 32일차 - Ch8. 영상 분할과 객체 검출 (0) | 2022.02.24 |
|---|---|
| 패스트캠퍼스 챌린지 31일차 - Ch7. 이진 영상 처리 (0) | 2022.02.23 |
| 패스트캠퍼스 챌린지 29일차 - Ch7. 이진 영상 처리 (0) | 2022.02.21 |
| 패스트캠퍼스 챌린지 28일차 - Ch6. 영상의 특징 추출 (0) | 2022.02.20 |
| 패스트캠퍼스 챌린지 27일차 - Ch6. 영상의 특징 추출 (0) | 2022.02.19 |







