Program/OPEN_CV

[Open CV] 이진 영상 처리 _ 모폴로지 _ 열기와 닫기

사막여유 2022. 6. 8. 21:51
728x90

 

 

이진 영상의 열기 ( Opening ) 연산

 Opening ( 열기 ) = Erosion ( 침식 ) -> Dilation ( 팽창 )

 

이진 영상의 닫기 ( Closing ) 연산

Closing ( 닫기 ) = Dilation ( 팽창 ) -> Erosion ( 침식 )

 

 

아래 이미지를 활용하여 열기 연산 효과를 먼저 보면 

 

 

먼저 열기 연산을 하게되면 침식 연산을 먼저 하게된다.

그럼 객체들을 깎아내게 되는데 객체 주변의 한두픽셀 노이즈객체들을 제거할 수 있게된다.

즉, 작은 돌기, 작은 객체가 사라지고, 얇은 연결선이 끊어지는 효과를 얻을 수 있다.

열기 연산 결과

 

닫기 연산을 하게 되면 팽창 연산을 먼저 하게되는데

객체들 내부에 있는 작은 홀들을 채워주게된다.

즉, 작은 홈, 작은 홀들이 사라지고 얇은 연결선이 두꺼워 주는 효과를 얻을 수 있다.

닫기 연산 결과

 

 * 대부분 열기연산을 통한 노이즈 제거효과로 많이 사용되고 있다.

 

이 전 강의에서 나왔던 침식, 팽창 연산을 모폴로지 연산 함수를 사용 연산할 수 있는데
열기와 닫기 연산도 수행할 수 있다.

 

범용 모폴로지 연산 함수

cv2.morphologyEx(src, op, kernel, dst, anchor, iterations, borderType, borderValue )

src : 입력 영상

op : 모폴로지 연산 플래그

모폴로지 연산 플래그

kernel : 커널

dst : 출력 영상

이외의 인자들은 이 전 강의에서 나왔던 침식, 팽창 ( Erode , Dilate ) 의 인자와 같은 특성이다.

 

 

위 코드를 보게되면 rice 라는 파일을 지역이진화하여 Binary 시켜준 뒤 

connectedComponents 함수를 사용하여 객체들의 갯수를 리턴 받는다.

그리고 금일 배운 MORPH_OPEN 인자를 사용하여 열기 연산을 해준 뒤 다시 객체들의 갯수를 리턴 받는다.실제 Run을 시켜보면 다음과 같은 결과를 얻을 수 있다.

 

좌 : 113 , 우 :99

 

위 영상을 보게되면 좌측 영상에 조그만 노이즈성 객체들도 보이는데 그 객체까지 한 덩어리로 보고 모두

객체카운팅을 하여 리턴해주게된다.

그런데 열기연산을 진행하고 난 이후에는 조그만 객체들은 모두 사라져 객체 카운팅이 줄어든것을 볼 수 있다.

 

 

 

그리고 위에서 본 것처럼 Opening = erode -> dilate 을 구현해줘도 같은 결과가 나오는 것을 볼 수 있다.

 

 

 

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90