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

8 views (last 30 days)
Chikako Kuriyama
Chikako Kuriyama on 7 Sep 2017
Commented: Chikako Kuriyama on 11 Sep 2017
ハフ変換で得た直線を延長して二本の直線を交差させたいです。また、得た直線の始点からx軸に平行な線を引きたいです。 見た目としては下の図のようにしたいと思っています。
  2 Comments
Jiro Doke
Jiro Doke on 7 Sep 2017
見やすいように添付画像をここに貼り付けておきます。
line.png
line2.png
line3.png
Chikako Kuriyama
Chikako Kuriyama on 11 Sep 2017
ありがとうございます。どのようなプログラムなのか見せてもらうことは可能ですか。

Sign in to comment.

Accepted Answer

Kei Otsuka
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軸に対して平行線を描く例は記載しませんが、是非トライしてみてください。

More Answers (1)

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

Categories

Find more on 関数の基礎 in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!