2011-06-11 6 views
1

도로의 가장자리에 2 또는 3 개의 선이 그려져 있는데,이 선들은 도로와 하늘이 만나는 수평선 지점에서 교차합니다. 나는이 지점을 찾아 내고 싶다. 나는 어떻게 hough 선을 사용하여 이것을 달성 할 수 있는가? 투표지도에 대한 내 생각에는 아이디어가 나타납니다. 어떻게 투표지도를 만들 수 있습니까? 이것은 내 코드입니다. 도로의 가장자리에서 잡초 선을 가정하고, 내부의 도로 지역과 교차하고 삼각형을 만듭니다. 여기라인 사이의 교차점을 찾는 방법 matlab

enter image description here

I = imread('1.jpg'); 


J = imfilter(I, fspecial('gaussian', [17 17], 5), 'symmetric'); 

se3 = strel('disk', 4); 

%J = imdilate(J, se); 

J = rgb2gray(J); 

BW = edge(J, 'sobel'); 
BW = imdilate(BW, se3); 

[H T R] = hough(BW); 

P = houghpeaks(H, 4); 

lines = houghlines(J, T, R,P); 
Q = figure(5); 
imshow(I) 
hold on; 

xy1 = [lines(3).point1; lines(3).point2]; 
line1 = plot(xy1(:,1),xy1(:,2),'LineWidth',6,'Color','blue'); 

    xy2 = [lines(4).point1; lines(4).point2]; 
line2 = plot(xy2(:,1),xy2(:,2),'LineWidth',6,'Color','blue'); 

    xy3 = [lines(2).point1; lines(2).point2]; 
line3 = plot(xy3(:,1),xy3(:,2),'LineWidth',6,'Color','blue'); 

답변

1

방정식이있는 경우 두 개의 미지수 (교차점 x, y)가있는 3 개의 방정식을 풀면됩니다. matlab 행렬 나누기 연산자 (\)를 사용하십시오. 예 : 넌 3 개 회선이

  • X + 2Y = 7
  • 3X는 + 4Y = 8
  • 5X + 6Y = 9

코드입니다

A = [1,2;3,4;5,6] 
b = [7,8,9]' 
x = A\b 

방정식을 알지 못하지만 그 줄이 지나가는 픽셀 만 알면 검정색 이미지에서 모든 줄을 버려야합니다. e와 최대 픽셀 값 검색. 교차점은 나머지 라인보다 3 배 더 밝을 것입니다. 임의의 선에서 시작 시간보다 실행 시간을 줄이고 교차점을 찾을 때까지 이웃을 반복합니다.

+0

감사합니다 다니엘 HsH. 당신은 나에게 시작 코드 샘플을 줄 수 있습니까? –

2

가 어렵게 만드는 라인의 방정식 또는 지점을 가지고 있지 내 출력 이미지입니다. 이 작업이 단지 한 번 작업이고 3 행만있는 경우 ginput을 사용하고 점을 직접 선택하는 것이 좋습니다.

그림을 그린 후에는 명령 줄에 [x,y]=ginput;을 입력하십시오. 이것은 당신의 인물에 초점을 가져와야하고 당신은 인물 위로 움직일 수있는 십자선을 보게 될 것입니다. 이제 원하는 세 점을 클릭 한 다음 Enter 키를 누릅니다. 이제 xy에는 세 점의 좌표가 포함됩니다.

+0

감사합니다. 이 코드는 비디오 및 실시간으로 구현됩니다. hough 선을 사용하는 im은 hough 선이 아직 이미지의 일부가 아니지만이 선들이 교차한다고 가정합니다. 나는 그 지점을 소실점이나 지평선으로 삼고 싶다. 나는 이해가 되니? 미안 해요 내 영어에 대한 : ( –

+0

@ 하심 : 그건 당신이 당신이 뭘하려고하는지 다른 사람들이 이해할 수 있도록 귀하의 질문에 제공해야합니다 정보의 종류 ... 자세한 내용을 추가하려면 질문을 편집하십시오 – abcd

0

전반적인 전략은 다음 1. 자신의 교차점을

당신을 찾아 줄 방정식 3. 라인 방정식을 얻기 위해 각 무릎 라인 2.에이 두 점을 두 점을 지정 각 줄에서 두 지점을 선택하는 방법을 알아야합니다. 줄 1은 p1과 p2이고 줄 2는 q1과 q2입니다. 그런 다음 p [1 | 2], q [1 | 2]가 2D 행 벡터 인 경우

line1 = GetLineFromTwoImagePoints(p1, p2); 
line2 = GetLineFromTwoImagePoints(q1, q2); 
intersection = GetPointFromTwoImageLines(line1, line2); 

function line = GetLineFromTwoImagePoints(one, two) 
    line = cross([one 1], [two 1]); 
end 

function point = GetPointFromTwoImageLines(one, two) 
    p = cross(one, two); 
    point = [p(1)/p(3) p(2)/p(3)]; 
end 
관련 문제