가장자리가 서로 닿을 때 다른 물체를 어떻게 감지합니까?


21

카메라에서 검색 한 이미지에서 모든 윤곽선을 찾아야합니다. 먼저 캐니 에지 탐지기를 사용하여 가장자리를 찾은 다음 윤곽선을 찾습니다. 꽤 간단합니다.

그러나 윤곽이 "병합"됩니다. 예를 들어 아래 이미지에는 4 가지 다른 물체가 있습니다. 그러나 가장자리는 약간의 지점에서 약간 닿아 있으므로 4 개의 개별 윤곽 대신 하나의 큰 윤곽선이 나타납니다. 나는 임계 값, 침식, 형태학 연산 및 유사한 것들을 변경하려고 시도했지만 가장자리는 약간 만져졌습니다. 아래 이미지와 비슷한 이미지에서 별도의 윤곽을 얻는 방법에 대한 제안이 있습니까? (아래 이미지는 분명히 예일뿐입니다. 실제 이미지는 훨씬 더 복잡하지만 동일한 기본 문제가 있습니다).

여기에 이미지 설명을 입력하십시오


유역 분할이 작동 할 수 있습니다.
sm176357

따라서 접점이 선이 아닌 점이 아닌 경우도 고려해야합니다 (만지지 만 겹치지
않아야 함

답변:


11

다른 구성 요소 감지 :

다른 구성 요소를 감지하려는 경우 윤곽을 감지하는 것 이외의 다른 방법이있을 수 있습니다. 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를 더 작은 크기로 저장하기 때문입니다. 내 화면에서는 그런 식으로 보이지 않습니다.


2

침식 과 같은 형태 적 필터를 사용 하여 이미지를 사전 처리하십시오 . 터치 윤곽을 분리 할 수 ​​있습니다. 등고선을 감지 한 후 확장 작업을 적용하여 격자를 완성 할 수 있습니다 .


나는 그것을 시도했지만 결과는 개선되지 않았다.

1
실제 예제 이미지를 보여줄 수 있습니까?

2

귀하의 질문에 대한 답변은 아니지만 윤곽 분석은 오류가 발생하기 쉽습니다. 당신은 그것에 대해 많은 것을 할 수 없으며 매우 간단한 시나리오에서만 작동합니다.

사용에 문제가 있으면 완전히 다른 알고리즘을 찾아야합니다. 사물을 해결하는 더 복잡하고 강력한 방법이 있지만 달성하려는 대상 (물체 감지, 추적 등)에 따라 다릅니다.


고맙습니다. 내 프로그램은 손 감지에 사용되므로 개체 감지와 매우 유사하다고 생각합니다. 더 복잡하고 강력한 알고리즘에 대한 제안을 했습니까? Haar Features, SURF 및 이와 유사한 기계 학습 알고리즘은 제가 할 수있는 일이 아닙니다.

이 자료들을 보았습니까? paginas.fe.up.pt/~hgc2011 주로 데이터베이스 / 결과이지만 여기에서 좋은 논문을 찾을 수 있기를 바랍니다.

0

컨투어가 반드시 열려있는 것은 아닙니다. 캐니를 사용하여 감지 한 것으로 간주하십시오. Canny의 문제는 이미 여기서 논의 되었습니다 . 토론 영리한에 당신에게 아직 평가 폐쇄 윤곽에 영리한 위에 필요 폐쇄하고 팽창 등의 작업이 있다는 기본적인 아이디어를 제공합니다.

이것은 또한 우리가 윤곽 또는 세분화를 찾고 있는지에 달려 있습니다 (Canny vs Graphcuts 와 같은 방법 ). 따라서 강력한 솔루션을 찾는 것은 최종 응용 프로그램에 달려 있다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.