[OpenCV/java] erode함수와 dilate함수란 무엇인가?

프로그래밍/그 외2018. 4. 15. 17:04

안녕하세요. 개발자 드리머즈입니다.


OpenCv의 erode함수와 dilate함수에 대해 찾아봤습니다.

erode는 "침식시키다", dilate는 "팽장시키다"라는 뜻을 가지고 있습니다.


http://mllab.tistory.com/4에 좋은 설명이 있습니다.


여러 가지 모폴로지 기법 중 기본적인 팽창과 침식에 대해서 알아본다. 이들 기법은 영상 내에서 잡음 제거, 또는 구성 요소들의 결합 또는 분리 등의 폭넓은 분야에서 널리 사용된다. 잡음이 존재하는 영상에 침식과 팽창을 적절하게 사용하여 잡음을 제거하고 완하시킬수 있다.

즉 원하는 이미지의 검출을 쉽게하기 위해 약간 손보는 작업을 할 때 쓰이는 함수로 보입니다.


http://dyndy.tistory.com/252에도 좋은 설명이 있습니다.


Erode 연산 : 필터 내부의 가장 낮은(어두운) 값으로 변환(and) - 침식연산

Dilate 연산 : 필터 내부의 가장 높은(밝은) 값으로 변환(or) - 팽창연산


두 연산은 순서에 따라 서로 다른 기능을 한다. 

Erode - Dilate = Opening 연산 : 주로 작은 노이즈들을 제거하는데 사용한다.

Dilate - Erode = Closing 연산 : 보통 한 객체를 추출했을 때 두개 이상의 작은 부분으로 나올 경우 큰 객체로 합칠 때 사용한다. 


제가 실제로 접한 erode, dilate코드는 아래와 같습니다.


1
2
Imgproc.erode(img_hue, img_hue, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(33)));
Imgproc.dilate(img_hue, img_hue, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(66)));
cs
erode를 먼저 사용하고 dilate를 사용했기에 opening 연산으로 분류할 수 있는 것 같습니다. 주로 작은 노이즈들을 제거하는데 사용된다고 하네요.


원본이미지에서 3x3 필터 크기로 작업을 해서 필터 내부의 가장 어두운 값으로 변환을 한 다음에 6x6 필터 크기로 필터 내부의 가장 밝은 값으로 변환시키는 작업 같네요.



작성자

Posted by 드리머즈

관련 글

댓글 영역