頂点の近似をしたいです。

8 views (last 30 days)
添付ファイルの画像にある四角形の角が丸みのある角です。 その四角形のそれぞれの辺を延長し、交わった座標の取得を行いたいです。 よろしくお願い致します。
  2 Comments
daisuke shuugisono
daisuke shuugisono on 8 Jul 2018
ありがとうございます。次回から利用させていただきます。

Sign in to comment.

Accepted Answer

Yuichi Tadokoro
Yuichi Tadokoro on 7 Jul 2018
ちょうど似たような内容に取り組んでいたので回答します. 方法はいろいろ考えられますが,ハフ変換を使用したものが簡単だと思います.
手順は以下のとおりです.
  1. ラプラシアンフィルタ等で輪郭線だけを取り出す
  2. ハフ変換をかける
  3. ハフ空間上のピークをhoughpeaks関数で4つ取り出す
  4. 得られた4つの直線から2つ選ぶ組み合わせを列挙する
  5. 直線の式を連立することで交点を求める( https://blog.tokor.org/2018/07/04/%25E3%2583%258F%25E3%2583%2595%25E5%25A4%2589%25E6%258F%259B%25E3%2581%25A7%25E6%25B1%2582%25E3%2582%2581%25E3%2581%259F2%25E7%259B%25B4%25E7%25B7%259A%25E3%2581%25AE%25E4%25BA%25A4%25E7%2582%25B9/ )
コードとしては以下のような感じになります.
※外側の四角がじゃまだったため,コードの最初の部分で画像の真ん中の方だけ取り出しています.
clear
close all
GS = rgb2gray(imread('sample.bmp'));
BW = GS(100:end-100, 100:end-100)>128;
BW2 = imfilter(BW,fspecial('laplacian'),'replicate');
figure(1);
imshow(BW2);
[H,T,R] = hough(BW2,'RhoResolution',0.5,'ThetaResolution',0.5);
P = houghpeaks(H,4);
A = [cosd(T(P(:,2)))' sind(T(P(:,2)))'];
B = R(P(:,1))';
figure(2);
imshow(BW);hold on;
XY = [];
idx = nchoosek([1 2 3 4],2); % 4直線の組み合わせをつくる
for k=1:size(idx,1)
if abs(det(A(idx(k,:),:))) < 1e-3
% 交点がないor遠方にできる場合(1e-3は適宜調整)
continue;
end
xy = A(idx(k,:),:)\B(idx(k,:)); % 交点を求める
XY = [XY; xy'];
end
plot(XY(:,1), XY(:,2), 'r*', 'MarkerSize', 10);
XY
  1 Comment
daisuke shuugisono
daisuke shuugisono on 8 Jul 2018
例文や参考までのせてくださりありがとうございます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!