다른 구성 요소 감지 :
다른 구성 요소를 감지하려는 경우 윤곽을 감지하는 것 이외의 다른 방법이있을 수 있습니다. Mathematica의 예가 있습니다. 침식 후 팽창은 감지 전에 두 번째 구성 요소의 간격을 닫는 데 사용됩니다 (이를 수행하지 않으면 감지하지 않음).
img = Binarize@Import["http://i.stack.imgur.com/yqDyu.png"];
Colorize[MorphologicalComponents[Dilation[Erosion[img,1],1]]]
아래 왼쪽의 그림은 불완전한 물체 감지 (갭을 닫지 않은 상태)를 보여주고 오른쪽은 올바른 감지 (위의 코드를 실행)를 보여줍니다.
다른 윤곽 감지 :
그러나 실제로 윤곽 만 분리하려면 다음 예를 참조하십시오. 침식 및 팽창은 갭을 폐쇄하기 전과 같이 수행되고 결과 이미지는 캐니 에지 검출기를 통해 진행된다. 기본 옵션을 명시 적으로 만들었으므로 사용중인 것을 볼 수 있습니다.
img2 = EdgeDetect[Dilation[Erosion[img, 1], 1], Method -> "Canny"]
픽셀 너비가 1보다 큽니다. 성능이 저하되어 다른 이미지와 다를 수 있으므로 더 얇아 지려고 노력하지 않았습니다. 내부 윤곽은 원하는 모양이고 외부 윤곽은 4 가지 구성 요소의 결합 된 윤곽입니다. 이제 우리가해야 할 일은 가장 바깥 쪽을 버리는 것입니다.
SelectComponents[img2, "EnclosingComponentCount", # > 0 &]
내부 윤곽 만 제공합니다 (오른쪽 아래 참조). 다시 말해, 적어도 하나의 다른 윤곽으로 둘러싸인 윤곽 만 선택하여 가장 바깥 쪽 윤곽을 자동으로 제거합니다. openCV에서 이러한 명령 / 작업에 해당하는 것을 모르겠습니다.
그림에서 명백한 중단은 jpeg를 더 작은 크기로 저장하기 때문입니다. 내 화면에서는 그런 식으로 보이지 않습니다.