ハフ変換から得た直線​の始点と終点を関数と​してプログラム内で使​用するにはどうすれば​いいですか。

조회 수: 8(최근 30일)
Chikako Kuriyama
Chikako Kuriyama 2017년 9월 12일
댓글: michio 2017년 9월 12일
ハフ変換で得た直線を延長して二本の直線を交差させたいです。また、得た直線の始点からx軸に平行な線を引きたいです。 ハフ変換から得た直線の始点と終点を関数としてプログラム内で使用するにはどうすればいいですか。 書いたプログラムと使用した画像は添付しました。
I = imread('miti8.png');
RSI=imresize(I,0.5);
ID = imadjust(RSI,[0.7 0.7 0; 0.8 0.8 1],[]);
RS= imcrop(ID,[0.5 65.5 378 439]);
GSI=rgb2gray(RS);
figure
imshow(GSI)
J = imnoise(GSI,'salt & pepper',0.1);
K = medfilt2(J);
figure
imshow(K)
IB = imbinarize(K,0.2)
%小さいオブジェクトを削除
BR = bwareaopen(IB,150);
figure
imshow(BR);
%エッジ
BW = edge(BR,'Roberts');
figure
imshow(BW);
stats=regionprops('table',BR,'Centroid',...
'Extrema','Perimeter')
%ハフ変換を作成
[H,theta,rho] = hough(BW,'RhoResolution',0.1,'ThetaResolution',0.03);
figure
imshow(imadjust(mat2gray(H)),[],...
'XData',theta,...
'YData',rho,...
'InitialMagnification','fit');
xlabel('\theta (degrees)')
ylabel('\rho')
axis on
axis normal
hold on
colormap(hot)
%ハフ変換のピーク値を検出
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black');
%ラインを検出してプロット
lines = houghlines(BW,theta,rho,P,'FillGap',30,'MinLength',50);
figure, imshow(BW), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',1,'Color','green');
len(k) = norm(lines(k).point1 - lines(k).point2);
end
  댓글 수: 1
michio
michio 2017년 9월 12일
プログラム部分をコード表示に修正いたしました。
  • ハフ変換で得た直線を延長して二本の直線を交差させたいです。
こちらは上記URLで解決済みでしょうか。
  • 得た直線の始点からx軸に平行な線を引きたいです。
こちらも上記URLで紹介されたinsertShape関数などで表示できそうですが、いかがでしたでしょか。
  • ハフ変換から得た直線の始点と終点を関数としてプログラム内で使用するにはどうすればいいですか。
この点、すいません。もう少し詳細に説明ください。直線の始点と終点を入力引数して受け付ける関数を定義されたい、ということでしょうか。

댓글을 달려면 로그인하십시오.

답변(0개)

Community Treasure Hunt

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

Start Hunting!