이진 이미지가 있습니다. 불연속 라인을 감지하고 연결하고 싶습니다. 나는 (좌표, 각도 등) 아무것도 모른다. 어떻게 시작해야하나요? 나는이 이미지가 있다고 가정 : 나는 불연속 라인에 가입 할불연속적인 골격 모양과 불연속 라인 결합하기
. 그리고 나중에 사용할 라인에 정보를 저장하고 싶습니다.
이진 이미지가 있습니다. 불연속 라인을 감지하고 연결하고 싶습니다. 나는 (좌표, 각도 등) 아무것도 모른다. 어떻게 시작해야하나요? 나는이 이미지가 있다고 가정 : 나는 불연속 라인에 가입 할불연속적인 골격 모양과 불연속 라인 결합하기
. 그리고 나중에 사용할 라인에 정보를 저장하고 싶습니다.
나는 당신의 문제를 흥미로웠다. 나는 당신에게 불행히도 완전한 알고리즘이 아님을 안다. 나는 또한 대답하지 않은 질문들로 당신을 떠날 것입니다.
내가 게시 한 이미지를 검은 색 픽셀 값이 0이고 흰색 픽셀 값이 1 인 이진 이미지로 생각합니다. 나는 빨간 픽셀을 무시합니다. 왜냐하면 당신이 파선을 연결하고자하는 부분을 강조하기 위해 그린 것으로 생각하기 때문입니다. 빨간색 픽셀을 무시한다는 것은 그 값을 0으로 설정한다는 의미입니다.
우선 우리는 몇 가지 정의가 필요합니다.
비 - 테두리 픽셀 가지고 8 개의 이웃 (북쪽, 북쪽, 남쪽, 동쪽, 남쪽, 동쪽, - 북동, 남서쪽, 서쪽) 픽셀 : 상기 다이어그램
abc
h*d
gfe
픽셀은 *
이고 그 이웃은 a,b,c,d,e,f,g
및 h
이다. 예를 들어이 도면 종료점 화소
000
011
000
에게 표시되도록
I 하나의 값을 하나의 값을 갖는 하나 개의 이웃 화소로서
종료점 화소 정의
는 나머지 인접는 0의 값을 가지고 이고 나머지 모든 인접 요소는 0이므로
입니다. 다음 다이어그램 대신 한 (a=1
및 e=1
)와 동일한 두 개의 이웃을 가지고 있기 때문에하지와 끝점 화소 인 화소
100
010
001
이제 우리는 간단한 알고리즘의 일부를 설명하기 시작할 수를 나타낸다.
첫 번째 단계에서 모든 끝점 픽셀을 찾아 벡터에 넣습니다. 다음 이미지에서 1에서 15 사이의 끝점을 표시했습니다 (게시 한 이미지에서 끝점 15가 강조 표시되지 않았습니다).
두 번째 단계에서, 각 엔드 포인트에 대해, 가장 가까운 엔드 포인트를 찾을 수 있습니다 : 예를 들어, 엔드 포인트 (4)는, 가장 가까운 엔드 포인트 지금 5. 고려해야 당신은 하나의 엔드 포인트를 연결하는 간단한 규칙을 따르는 경우에 그 가장 가까운 종단점은 4-5, 10-11, 13-14를 연결하는 세그먼트를 가지며 모두 괜찮습니다. 그러나 1을 고려하십시오 : 그것의 가장 가까운 종점은 2이거나 3 일 수도 있지만 알고리즘을 방금 2와 3에 연결하고 1을 가장 왼쪽 수직선에 연결하고 싶습니다. 6, 9, 12에 대해서도 같은 행동을하고 싶습니다.
이제 다른 상황 : 약 6, 7, 8은 어떨까요? 잠시 무시하십시오. 8, 가장 가까운 끝 점은 6입니다. 그러나 그들은 이미 연결되어 있습니다. 어떻게이 사건을 관리 할 수 있습니까?
그리고 마지막으로 15 일을 고려하십시오. 게시 한 이미지에서 왜 강조 표시하지 않았습니까? 어쩌면 무시해야할까요?
당신의 답변에 대해 당신이 제안한 추론은 명확하지만 나는 선물이 될 수있는 모든 경우를 다룰 수 없다고 생각합니다. 귀하의 질문 케이스 15에 대한 답변은 무시 될 것이며이 사건 1,6,9 및 12를 어떻게 관리 할 수 있는지 잘 모르겠습니다. 귀하의 추론을 개선하고 모든 사례를 관리 할 수있는 방법을 생각합니다. – Bertrand
이 경우 도움이 될 수 있습니다.
end-point
가 있습니다. 이것을 reference point
이라고 부르십시오. 끝점과 참조 점 사이의 벡터는 확장 방향을 나타냅니다.는 도움이되기를 바랍니다.
어떤 종류의 라인 감지 알고리즘으로 시작할 수 있습니다 : http://www.ipol.im/pub/art/2012/gjmr-lsd/ 또는 Matlab의 Hough-lines 기능. – GilLevi