MATLAB Answers

1

ハフ変換で得た直線の​延長のやり方と直線の​始点からx軸に平行な​線の引き方を教えてく​ださい。

Asked by Chikako Kuriyama on 7 Sep 2017
Latest activity Commented on by Chikako Kuriyama on 11 Sep 2017

ハフ変換で得た直線を延長して二本の直線を交差させたいです。また、得た直線の始点からx軸に平行な線を引きたいです。 見た目としては下の図のようにしたいと思っています。

  2 Comments

jiro
on 7 Sep 2017

見やすいように添付画像をここに貼り付けておきます。

line.png

line2.png

line3.png

ありがとうございます。どのようなプログラムなのか見せてもらうことは可能ですか。

Log in to comment.

2 Answers

Kei Otsuka
Answer by Kei Otsuka
on 8 Sep 2017
 Accepted Answer

ハフ変換で直線の情報は得られているということなので、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

Log in to comment.


Answer by Chikako Kuriyama on 11 Sep 2017

ありがとうございます。説明のおかげでわからなかった部分がわかりました。ありがとうございました。

  0 Comments

Log in to comment.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today