楕円面積内の平均値を計算する

9 views (last 30 days)
non
non on 9 Sep 2022
Commented: non on 12 Sep 2022
解決の方針を立てられず、こちらでご質問させていただきます。
物体(数値データ)を楕円近似して、重心位置から物体の先端まで、一定間隔で面積を求めたいです。その後、面積S1、S2、S3の範囲にある数値データの平均値を計算できないか模索しています。
重心位置の座標を計算するところまで解決しております。
重心から物体先端に向かって、任意の距離を取る方法をご教示いただけないでしょうか。
よろしくお願いいたします。
イメージ図
青色:物体(数値データ) ×印:重心位置 S1,S2,S3...:各範囲の面積

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 9 Sep 2022
>一定間隔で面積をくりぬきたいです
⇒下図のようにドーナツ型をくり抜く解釈であってますか?
すぐ近くにあった上記質問に対する回答を応用します。この例では物体を包む長方形に内接する楕円の範囲しか演算していないので、物体の先端が四隅の方に伸びるとカバー出来ません。ではどこまで求めればよいかというと、面積がゼロになるまでドーナツを外側に広げていけば良いのですが、元画像に対する物体の占有面積が大きいとドーナツが元画像からはみ出してエラーが生じる可能性があります。この問題を解消するには、今回の回答のようなラスタ画像ベースではなくベクタ画像ベースにすれば良いと思います(その先はあまり検討してませんが)
N = [500, 800]; % 画像サイズ
O = N/2; % 物体サイズ。ここでは画像サイズの1/4とする
C = N/2; % 物体の重心。ここでは画像サイズの中央とする
NM = min(O); % 物体サイズの縦横小さい方を取る
A = NM./O; % 楕円の縦横比を物体サイズのアスペクト比に合わせる
J = rand(N); % 画像の値。ここではテスト用に0~1の乱数とする
[xg, yg] = meshgrid(1:N(2), 1:N(1));
for k = NM/8:NM/8:NM/2 % 物体を包む長方形に内接する楕円の範囲でドーナツ状にくり抜き平均値を演算する
l = k - NM/8;
S = sqrt(((xg-C(2))*A(2)/k).^2 + ((yg-C(1))*A(1)/k).^2) <= 1;
T = sqrt(((xg-C(2))*A(2)/l).^2 + ((yg-C(1))*A(1)/l).^2) <= 1;
mean(J(S & ~T),'all')
% J(S & ~T) = k/NM; % この行は不要。面積S1,S2,S3,S4の範囲を図示する為
end % 画像の値は0~1の乱数なので平均値は約0.5になる
ans = 0.4967
ans = 0.5049
ans = 0.4991
ans = 0.5016
% imshow(J) % この行は不要。面積S1,S2,S3,S4の範囲を図示する為
>重心から物体先端に向かって、任意の距離を取る方法を教示いただけないでしょうか。
この回答ではこの質問に対する回答をしていません。
  1 Comment
non
non on 12 Sep 2022
ご回答ありがとうございます。 的確なご説明が、とても参考になりました。自身でも、もう少し考えてみようと思います。
この度はありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!