2017-02-24 3 views
3
h, theta, d = transform.hough_line(outlines) 
for acum, angle, dist in zip(*transform.hough_line_peaks(h, theta, d)): 
    y0 = (dist - 0 * np.cos(angle))/np.sin(angle) 
    y1 = (dist - outlines.shape[1] * np.cos(angle))/np.sin(angle) 
    x0 = ... 
    x1 = ... 
    rr,cc,_ = draw.line_aa(x0,y0,x1,y1) 

와 무릎 라인 피크 좌표, 즉 640,640 (2D)입니다. y0y1의 크기를 outline.shape 크기로 조정하고 싶습니다.이 extream X를받는 방법, y는 내가 원하는 것은 내 윤곽 모양의 범위 사이의 <code>x0</code> 및 <code>x1</code> 값입니다 skimage

+0

상황을 자세히 자세히 설명해 주실 수 있습니까? –

+0

확인. 그래서 정사각형 경계 이미지가 있다면 상상해보십시오. 그리고 hough transform을 사용하면 라인을 얻을 수 있습니다. 이제 웹에서 찾은 수식을 사용하여 선의 y 좌표를 얻습니다. http://scikit-image.org/docs/dev/auto_examples/edges/plot_line_hough_transform.html 이제이 라인 경계에는 아무런 제한이 없습니다. 아무런 제한없이 나는 포인트가 0보다 작을 수 있다는 것을 의미한다. 내가 원한 것은 y 좌표와 함께 x 좌표를 얻고 0에서 640까지의 범위 내에서 얻는 것이다. –

답변

1

해당 수식으로 계산 한 y0, y1 좌표는 선이 이미지의 가장자리와 교차하는 위치와 일치합니다. 그것이 0outlines.shape[1]을 포함하는 이유입니다.

y0은 행이 열 0과 교차하는 행에 해당하므로 0 * cos(angle)입니다.

y1은 광고가 이미지의 마지막 열을 교차하는 행 (outlines.shape[1]이다), 즉 그 너비

그래서 만약 검출 라인을 강조 (0, y0)에서 (width, y1)에 선을 그릴 수에 대응한다. 예 : outlines[line(0, y0, width-1, y1] = 1과 같이 사용하십시오. 인덱싱이 0에서 시작하고 width이 범위를 벗어나기 때문에 width - 1을 입력했습니다. dist

This tutorial에서 이미지가 발견 된 행을 이미지에 추가하는 방법 (첫 번째 부분)을 잘 보여 주므로 수식에는 해당되지 않습니다. 원하지 않는 X 자 모양의 이미지를 원하는 이미지로 바꾸면 선이 보입니다. 당신의 이미지는 이상적으로 이진화되어야하고 너무 많은 점수를 가지지 않아야합니다. 따라서 가장자리 검출기 (Canny) 나 골격화 절차를 통과시켜보십시오.