2016-11-16 8 views
0

내가 그리드 점 밖에 같은 34 포인트가에 의해 그리드 선 세그먼트를 생성하기 위해 노력하고있어 포인트 좌표는 다음과 같습니다.

323.708 205.925 
382.585 206.75 
320.296 216.596 
381.729 217.499 
271.118 227.4 
286.04 227.643 
301.208 227.631 
316.538 228.165 
332.195 228.323 
348.114 228.828 
364.194 229.139 
380.893 229.356 
397.731 230.219 
414.795 230.634 
432.307 231.407 
312.507 241.026 
379.886 242.892 
307.735 254.944 
378.838 257.705 
251.514 268.437 
268.271 269.035 
285.124 269.701 
302.801 270.563 
320.684 271.637 
339.107 272.332 
358.067 273.122 
377.46 274.347 
397.01 275.033 
416.814 276.199 
437.558 277.354 
297.437 288.028 
375.766 292.266 
291.296 307.268 
374.233 313.316 

나는 격자 선을 탐지하기 위해 Hough Transform을 시도했습니다. 나는 다음 일을 할 수 있도록

enter image description here

enter image description here

: 는하지만 난 그냥 점 사이의 간격은 (이 같은) 가득 차 있었다 사진이 필요합니다. Hough 변환 사용은 약간 낭비입니다.

간격을 채우기 위해 선형 보간을 사용하려고했지만 수동으로 끝점을 찾아야합니다. 따라서 이러한 격자 점에 의해 그리드 선 세그먼트를 자동으로 생성하는 방법을 알고 싶습니다.

답변

1

에 모든 포인트를 추가하고 목록에 아직없는 경우 목록에 행을 추가하십시오. n 포인트의 숫자이면 내가 좋아 참조 각 축 방향

크기 |pnt[i1]-pnt[i1]| 미만이있는 행을 추가 용

  1. 루프 i = <0,n-2>
  2. 루프 j = <i+1,n-1>
  3. 또는 그리드 크기와 같고 라인의 방향이 실제 디렉 티비와 비슷합니다 N NS 또는 WE 그렇게 : 방향 벡터가 정확하지 않은 경우

    abs(dot(direction/|direction|,(pnt[i1]-pnt[i1])/|pnt[i1]-pnt[i1]|)) 
    

    0.75 다음 더 이상 1에 가까운 또는이다. 방향으로 당신은 다음과 같이 시작할 수 있습니다 :

    NS = (0.0, 1.0) 
    WE = (1.0. 0.0) 
    

    NS 방향이 더 벗어 났으므로 더 큰 여백을 사용해야합니다.

    당신은 단위 벡터에 대한 내적 내부의 정상화 제거 할 수

0

당신은 이미 중요한 점을 알고 있습니다, 그래서 Hough 변환은 꽤 오버 헤드입니다.

포인트가 약 1,000 개이면 약 1000 쌍이 형성되고 모든 쌍의 라인을 빌드 한 다음 복잡한 알고리즘 없이도이 라인을 ρ-θ 공간에 클러스터링 할 수 있습니다 (이 접근법은 2 차입니다) . 당신은 4 개의 커다란 클러스터를 가질 것이고,이 클러스터들로부터 어떤 선분 (포인트)이 끝나는지를 발견하는 것이 어렵지 않습니다. N,S,E,W 방향으로 가장 가까운 지점을 찾을 수

큰 데이터 세트를 들어 당신이 다음 작은 임의의 점 집합에 대한 임의의 방식으로 초기 클러스터를 형성 할 수는 맞는 최적의 라인을 각 지점에 대한 (리니어 방식)