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

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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Weitere Antworten (1)

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

Kategorien

Mehr zu 関数の基礎 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!