2014-10-28 1 views
1

필자는 Python과 numpy를 사용하여 라인 탐지를위한 표준 Hough Transform을 구현 해왔다.사인 곡선을 반향하는 선들이 왜곡을 반으로 나눈 이유는 무엇입니까?

알고리즘을 구현하는 데 성공했지만 출력 결과가 반으로 나뉘어 진 사인 곡선을 갖습니다. 반은 결과 이미지의 극단에 있고 나머지는 이미지의 다른 부분에 있습니다. 내가 문제가 (허프 공간의 정의에 어딘가 의심

def houghTransf(img, r_ro, r_theta,thrs): 

    linhas, colunas =img.shape 

    theta = np.linspace(0.0,180.0,np.ceil(180.0/r_theta)+1) 

    max_rho = np.sqrt((linhas**2)+(colunas**2)) 

    rho = np.linspace(0.0,max_rho,np.ceil(max_rho/r_ro)+1) 


    res = np.zeros((len(theta),len(rho))) 

    # Hough Transform 

    for i in range(linhas): 
     for j in range(colunas): 
      if(img[i,j]<>0): 
       for k in theta: 
        v_rho = i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180)) 
        res[k,v_rho] += 1 

    return res 

: 여기

This is the result of the algorithm.

내 코드입니다 : 여기

는 내가 갖는 출력의 예 thetarho의 정의), 각각의 linspace의 최소 한계를 변경하는 것이 도움이되지 않는 것 같습니다.

사인 곡선을 이미지 에서처럼 분할하지 않고 표시 할 수있는 방법이 있습니까?

rhotheta 범위를 조정할 수 있습니까?

편집 :

또한 한 줄로 알고리즘을 실행하려고했습니다. 여기

enter image description here

은 하나 개의 라인 거기있는 경우에 대한 알고리즘의 내 구현의 출력입니다 :

enter image description here

답변

1

참고이 줄 끝

v_rho = i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180)) 

v_rho이 부정적 일 수 있습니다. 이 같은 그것에 무언가를 범위의 절반을 추가해야합니다 :

v_rho = 1.0*len(rho)/2 + i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180)) 

(당신은 범위가 지금보다 두 배 큰 것으로, 반드시 아마도 rho 요구에 모든 권리가 아닌 경우 확인해야합니다).

파이썬과 numpy이 음수로 색인 배열을 허용하기 때문에 문제가 숨겨졌습니다. 이 수정은 사인 곡선의 절반 범위를 오른쪽으로 바꿀 것이므로 더 이상 분리되지 않을 것입니다.

+0

수정. 그리고 ρ는 실제로 그것이 작동하기 위해서는 두 배 더 커야합니다. –