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

4 views (last 30 days)
daisuke shuugisono
daisuke shuugisono on 6 Jul 2018
添付ファイルの画像にある四角形の角が丸みのある角です。 その四角形のそれぞれの辺を延長し、交わった座標の取得を行いたいです。 よろしくお願い致します。
  2 Comments
mizuki
mizuki on 8 Jul 2018
いつも MATLAB Answers をご活用いただきありがとうございます.ご質問とは関係ありませんが,MATLAB Answers 利用時のヒントをお知らせします.
画像ファイルがある場合,本文の文中に挿入していただくと文章と一緒に画像を見ることができます.また,適切な場所で画像を紹介することができます.
画像を挿入する方法は,以下のキャプチャの赤い部分をクリックします.
もし画像以外のコードやPDFファイルなどをお持ちの場合は,今までどおり青い部分をクリックしてください.
MATLAB Answers の UI が分かりにくく恐縮ですが,ぜひ次回画像を使用される場合はご活用ください.
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!