ハフ変換で得た直線の延長のやり方と直線の始点からx軸に平行な線の引き方を教えてください。
6 views (last 30 days)
Show older comments
Chikako Kuriyama
on 7 Sep 2017
Commented: Chikako Kuriyama
on 11 Sep 2017
ハフ変換で得た直線を延長して二本の直線を交差させたいです。また、得た直線の始点からx軸に平行な線を引きたいです。 見た目としては下の図のようにしたいと思っています。
2 Comments
Accepted Answer
Kei Otsuka
on 8 Sep 2017
ハフ変換で直線の情報は得られているということなので、2直線の交点を求めることができれば、目的の図が得られそうです。 恐らくhoughlinesをお使いかと思いますが、出力は構造体になっていますので求められた直線の始点・終点だけ取り出してみます。
line1 = [lines(1).point1; lines(1).point2];
line2 = [lines(2).point1; lines(2).point2];
2直線を式(y=ax+b)で表現したいので、まずは2直線の傾きを求めます。
slope = @(line) (line(2,2) - line(1,2))/(line(2,1) - line(1,1));
a1 = slope(line1)
a2 = slope(line2)
次に、交点を求めます。
intercept = @(line,a) line(1,2) - a*line(1,1);
b1 = intercept(line1, a1);
b2 = intercept(line2, a2);
xint= (b2-b1)/(a1-a2);
yint = a1*xint + b1;
2直線と交点をプロットするとこんな感じです。
figure, imshow(bw) %画像データ
hold on
h = plot(line1(:,1), line1(:,2));
h(2) = plot(line2(:,1),line2(:,2));
set(h,'linewidth', 2)
plot(xint, yint, 'm*', 'markersize', 8)
交点が求まったので、insertShapeなどを利用して直線を描くと結果が得られます。
img = insertShape(img, 'line', [line1(2,:) xint yint], 'LineWidth', 7, 'Color', 'red');
img = insertShape(img, 'line', [line2(2,:) xint yint], 'LineWidth', 7, 'Color', 'red');
figure, imshow(img)
X軸に対して平行線を描く例は記載しませんが、是非トライしてみてください。
0 Comments
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!