regionprop​sのCentroid​プロパティについて

조회 수: 10 (최근 30일)
Yumi Iwakami
Yumi Iwakami 2019년 11월 15일
댓글: Yumi Iwakami 2019년 11월 16일
図のようないびつな画像の黒の部分の重心を求めようと思っています.
ex.png
この場合,黒の部分は2つあるので,重心は2つとれると思いますが,この2つの島全体の重心をとる場合,質量が考慮されていれば,中点(重心のx座標:(c(1).Centroid(1)+c(2).Centroid(1))/2)をとるだけでいいと思うのですが,考慮されていない場合積分して求める必要があると思い,質問しました.
質量が考慮されていない場合,regionpropsに変わる関数があればご教示ください.

채택된 답변

Kenta
Kenta 2019년 11월 15일
こんにちは、すでに他の方が回答されているようですが、気づいておりませんでした。
以下、参考になれば幸いです。もしかしたらどこか間違っているかもしれませんので、
確認いただけると幸いです。
重心は(1)のように、各質点と位置の積の和を、質量の和で割れば求まると思います。
これは、kusanoさまに添付いただいた資料にもあるように、釣り合いの式から導出できます。
これを今回の例にあてはめると、今回は、図形の面積のようなので、各島の重心の位置は、(2)、(3)のようになって、さらに
あらためて、(1)にならって全島に対する重心を求めようとすると式(4)のようになります。
ここで、regionprops関数によって、すでに各島の重心が求まっているので、それをもとに(4)を書き直すと
(5)のようになります。つまり、各島の重みと面積、重心が求まっていれば、(5)の値も算出できます。
実際に、下のようにコードを書いて、重みを変化させてみると、それらしい結果が得られます。
img.PNG
clear;clc
I = zeros(500,500);
C1 = insertShape(I,'FilledCircle',[300 400 50],'Color',"white",'Opacity',1);
C2 = insertShape(C1,'FilledCircle',[100 400 50],'Color',"white",'Opacity',1);
% figure;imshow(C2)
BW = C2(:,:,1)>0;
figure;imshow(double(BW))
stats = regionprops('table',BW,'Centroid',...
'MajorAxisLength','MinorAxisLength','Centroid','Area')
area = stats.Area;
centroid = stats.Centroid;
w1 = 2;
w2 = 1;
weighted_centroid = (w1*area(1)*centroid(1,:)+w2*area(2)*centroid(2,:))./(area(1)*w1+area(2)*w2)
im2.PNG
  댓글 수: 1
Yumi Iwakami
Yumi Iwakami 2019년 11월 16일
ありがとうございます.
コードまで書いていただいて感謝いたします.

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

추가 답변 (1개)

Shunichi Kusano
Shunichi Kusano 2019년 11월 15일
正確にご質問の意図を捉えられているのかいまいち自信がありませんが…。
regionpropsのCentroidで出てくるのは各島の重心ですので、それらの中点をとっても黒(実際に計算するときは白黒反転が必要)全体の重心にはなりません。2値画像であれば、各島の質量=面積になりますので、regionpropsからAreaとCentroidを計算して組合わせれば全体の重心が計算できるかと思います。
  댓글 수: 3
Shunichi Kusano
Shunichi Kusano 2019년 11월 15일
重心点を各島の質点と考えると、それぞれの重さの比は面積に比例するので、その割合で按分すればいいと思います。
島の面積、重心点座標ををそれぞれA1,P1, A2,P2としますと
(P1*A1 + P2*A2) / (A1+A2)
で求まる…と思います。
ご参考までですが、検索すると下のようなページで解説が見つかりました。
Yumi Iwakami
Yumi Iwakami 2019년 11월 16일
コメントありがとうございます.
参考サイトもありがとうございます.

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

Community Treasure Hunt

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

Start Hunting!