こんにちは、すでに他の方が回答されているようですが、気づいておりませんでした。
以下、参考になれば幸いです。もしかしたらどこか間違っているかもしれませんので、
確認いただけると幸いです。
重心は(1)のように、各質点と位置の積の和を、質量の和で割れば求まると思います。
これは、kusanoさまに添付いただいた資料にもあるように、釣り合いの式から導出できます。
これを今回の例にあてはめると、今回は、図形の面積のようなので、各島の重心の位置は、(2)、(3)のようになって、さらに
あらためて、(1)にならって全島に対する重心を求めようとすると式(4)のようになります。
ここで、regionprops関数によって、すでに各島の重心が求まっているので、それをもとに(4)を書き直すと
(5)のようになります。つまり、各島の重みと面積、重心が求まっていれば、(5)の値も算出できます。
実際に、下のようにコードを書いて、重みを変化させてみると、それらしい結果が得られます。
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);
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)