2

이진 이미지가 있습니다. 불연속 라인을 감지하고 연결하고 싶습니다. 나는 (좌표, 각도 등) 아무것도 모른다. 어떻게 시작해야하나요? 나는이 이미지가 있다고 가정 : 나는 불연속 라인에 가입 할불연속적인 골격 모양과 불연속 라인 결합하기

enter image description here

. 그리고 나중에 사용할 라인에 정보를 저장하고 싶습니다.

+0

어떤 종류의 라인 감지 알고리즘으로 시작할 수 있습니다 : http://www.ipol.im/pub/art/2012/gjmr-lsd/ 또는 Matlab의 Hough-lines 기능. – GilLevi

답변

1

나는 당신의 문제를 흥미로웠다. 나는 당신에게 불행히도 완전한 알고리즘이 아님을 안다. 나는 또한 대답하지 않은 질문들로 당신을 떠날 것입니다.

내가 게시 한 이미지를 검은 색 픽셀 값이 0이고 흰색 픽셀 값이 1 인 이진 이미지로 생각합니다. 나는 빨간 픽셀을 무시합니다. 왜냐하면 당신이 파선을 연결하고자하는 부분을 강조하기 위해 그린 것으로 생각하기 때문입니다. 빨간색 픽셀을 무시한다는 것은 그 값을 0으로 설정한다는 의미입니다.

우선 우리는 몇 가지 정의가 필요합니다.

비 - 테두리 픽셀 가지고 8 개의 이웃 (북쪽, 북쪽, 남쪽, 동쪽, 남쪽, 동쪽, - 북동, 남서쪽, 서쪽) 픽셀 : 상기 다이어그램

abc 
h*d 
gfe 

픽셀은 *이고 그 이웃은 a,b,c,d,e,f,gh이다. 예를 들어이 도면 종료점 화소

000 
011 
000 
에게 표시되도록

I 하나의 값을 하나의 값을 갖는 하나 개의 이웃 화소로서 종료점 화소 정의

는 나머지 인접는 0의 값을 가지고 이고 나머지 모든 인접 요소는 0이므로

입니다. 다음 다이어그램 대신 한 (a=1e=1)와 동일한 두 개의 이웃을 가지고 있기 때문에하지와 끝점 화소 인 화소

100 
010 
001 

이제 우리는 간단한 알고리즘의 일부를 설명하기 시작할 수를 나타낸다.

첫 번째 단계에서 모든 끝점 픽셀을 찾아 벡터에 넣습니다. 다음 이미지에서 1에서 15 사이의 끝점을 표시했습니다 (게시 한 이미지에서 끝점 15가 강조 표시되지 않았습니다).

두 번째 단계에서

enter image description here

, 각 엔드 포인트에 대해, 가장 가까운 엔드 포인트를 찾을 수 있습니다 : 예를 들어, 엔드 포인트 (4)는, 가장 가까운 엔드 포인트 지금 5. 고려해야 당신은 하나의 엔드 포인트를 연결하는 간단한 규칙을 따르는 경우에 그 가장 가까운 종단점은 4-5, 10-11, 13-14를 연결하는 세그먼트를 가지며 모두 괜찮습니다. 그러나 1을 고려하십시오 : 그것의 가장 가까운 종점은 2이거나 3 일 수도 있지만 알고리즘을 방금 2와 3에 연결하고 1을 가장 왼쪽 수직선에 연결하고 싶습니다. 6, 9, 12에 대해서도 같은 행동을하고 싶습니다.

이제 다른 상황 : 약 6, 7, 8은 어떨까요? 잠시 무시하십시오. 8, 가장 가까운 끝 점은 6입니다. 그러나 그들은 이미 연결되어 있습니다. 어떻게이 사건을 관리 할 수 ​​있습니까?

그리고 마지막으로 15 일을 고려하십시오. 게시 한 이미지에서 왜 강조 표시하지 않았습니까? 어쩌면 무시해야할까요?

+1

당신의 답변에 대해 당신이 제안한 추론은 명확하지만 나는 선물이 될 수있는 모든 경우를 다룰 수 없다고 생각합니다. 귀하의 질문 케이스 15에 대한 답변은 무시 될 것이며이 사건 1,6,9 및 12를 어떻게 관리 할 수 ​​있는지 잘 모르겠습니다. 귀하의 추론을 개선하고 모든 사례를 관리 할 수있는 방법을 생각합니다. – Bertrand

0

이 경우 도움이 될 수 있습니다.

  1. 증가에서 - 적어도 2
  2. 에 라인의 두께는 이전 또는 다음 열 런 길이 내의 모든 배경 픽셀이 이미지에 수직 방향으로 연속 전경 픽셀의 그 실행을 찾을 수 있습니다. 이렇게하면 처리해야 할 점의 위치를 ​​알 수 있습니다.
  3. 각 점에 대해 가장 가까운 가파른 점을 찾으십시오. 이것은 branch point이거나 각도가 갑자기 변하는 지점입니다. (이전 답안 이미지의 예 15). 그런 점이 없다면 명백히 또 다른 end-point가 있습니다. 이것을 reference point이라고 부르십시오. 끝점과 참조 점 사이의 벡터는 확장 방향을 나타냅니다.
  4. 이제 어떤 지점을 조인할지 결정할 수있는 다양한 방법이 있습니다. 그 방향에서 가장 가까운 전경을 찍을 수 있습니다. 또한 KNN 분류기에서 사용할 끝점과 확장 점 사이의 각도 및 거리에 따라 일부 기능을 선택할 수 있습니다.

는 도움이되기를 바랍니다.

+0

나는 솔직합니다. 내가 어떻게 구현할 수 있을지 모르겠지만 당신의 응답에 대해 대단히 감사합니다. – Bertrand

+0

루틴 분기 지점을 감지, 엔드 포인트는 matlab에서 사용할 수 있습니다. 분기점을 삭제 한 후에 참조 점을 얻는 것이 더 쉬울 수도 있습니다. – Dib