楕円面積内の平均値を計算する
3 ビュー (過去 30 日間)
古いコメントを表示
解決の方針を立てられず、こちらでご質問させていただきます。
物体(数値データ)を楕円近似して、重心位置から物体の先端まで、一定間隔で面積を求めたいです。その後、面積S1、S2、S3の範囲にある数値データの平均値を計算できないか模索しています。
重心位置の座標を計算するところまで解決しております。
重心から物体先端に向かって、任意の距離を取る方法をご教示いただけないでしょうか。
よろしくお願いいたします。
イメージ図
青色:物体(数値データ) ×印:重心位置 S1,S2,S3...:各範囲の面積
0 件のコメント
採用された回答
Atsushi Ueno
2022 年 9 月 9 日
>一定間隔で面積をくりぬきたいです
⇒下図のようにドーナツ型をくり抜く解釈であってますか?
すぐ近くにあった上記質問に対する回答を応用します。この例では物体を包む長方形に内接する楕円の範囲しか演算していないので、物体の先端が四隅の方に伸びるとカバー出来ません。ではどこまで求めればよいかというと、面積がゼロになるまでドーナツを外側に広げていけば良いのですが、元画像に対する物体の占有面積が大きいとドーナツが元画像からはみ出してエラーが生じる可能性があります。この問題を解消するには、今回の回答のようなラスタ画像ベースではなくベクタ画像ベースにすれば良いと思います(その先はあまり検討してませんが)
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になる
% imshow(J) % この行は不要。面積S1,S2,S3,S4の範囲を図示する為
>重心から物体先端に向かって、任意の距離を取る方法を教示いただけないでしょうか。
この回答ではこの質問に対する回答をしていません。
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!