MATLAB Answers

x軸上で、ある点が原​点よりどちらにあるの​かを検出するプログラ​ム

13 ビュー (過去 30 日間)
tsuyoshi tsunoda
tsuyoshi tsunoda 2021 年 7 月 30 日
コメント済み: tsuyoshi tsunoda 2021 年 7 月 30 日
以前、「顔の切り抜いた部分の重心を求めてその点を結んだ三角形の面積を求めたい」という質問をしてやりたい事が出来るようになったのですが、そこからx軸上で口の重心を原点として、三角形の重心が口の重心(原点)と比較してどちらにあるかというプログラムを作りたいです。
もし、三角形の重心が口の重心(原点)よりも右にあったら「左向き」というテキスト、左にあったら「右向き」といったテキストも出せるようになりたいです。
ご教授願います。
%% Photoshop画像読込
Icolor = imread('/Users/tyt/Desktop/MATLAB/マネキン写真/右中心.png');
I = rgb2gray(Icolor); % グレースケール化
bgc = I(10,10); % 背景色の選択
%% 目と口の重心を求める
BW = I > bgc + 1 | I < bgc - 1; % (ほぼ)背景と背景以外で2値化(imbinarize)
s = regionprops(BW,'centroid'); % イメージ内の連結要素の重心を計算
Areas = regionprops(BW,'Area'); % 各重心位置計算されたエリアの面積
centroids = cat(1,s.Centroid); % 重心を格納する構造体配列を単一の行列に連結
centroids = centroids(cat(1,Areas.Area) > 10, :); % 面積の大きな連結要素のみ選択
%% 目と口の重心点を結んだ三角形の重心を求める
triangle = polyshape(centroids(:,1),centroids(:,2)); % 重心点を結んだ三角形を定義
[trcntx,trcnty] = centroid(triangle); % 三角形の重心
%% グラフィック表示
imshow(Icolor);
hold on;
plot(triangle);
plot(trcntx,trcnty,'*','Color','k');
hold off;

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 7 月 30 日
編集済み: Atsushi Ueno 2021 年 7 月 30 日
もし、三角形の重心が口の重心(原点)よりも右にあったら「左向き」というテキスト、左にあったら「右向き」といったテキストも出せるようになりたいです
単純に3つあると断定している連結要素のx座標をソートして、真ん中のx座標と三角形の重心点を比較しています。変更したところ以降を下記に表示します。
sorted = sort(centroids(:,1)); % 目と口の重心点(x座標)をソート
%% グラフィック表示
imshow(Icolor);
hold on;
plot(triangle);
plot(trcntx,trcnty,'*','Color','k');
if sorted(2) - trcntx < 0 %(口の重心点)-(三角形の重心点)<0 なら右向きと表示
text(trcntx-40,trcnty+30,'右向き');
else
text(trcntx-40,trcnty+30,'左向き');
end
hold off;
  2 件のコメント
tsuyoshi tsunoda
tsuyoshi tsunoda 2021 年 7 月 30 日
教えていただきありがとうございます。今やろうとしている事が理解できたので勉強して改良していこうと思います。

サインインしてコメントする。

その他の回答 (0 件)

タグ

Community Treasure Hunt

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

Start Hunting!