2016-04-05 103 views
0

I imagescを使用してプロットを作成します。 X/Y軸はそれぞれ経度と緯度です。 Z値は、以下に示す画像の画像の強度です。私ができるようにしたいのは、示されている各ポリゴンの面積を計算することです。誰かがこれを達成するための簡単な(または任意の)方法を推奨できますか?MATLABプロット上の形状の面積を計算する

EDITは、画像を含むことを忘れました。

enter image description here

+0

ポリゴンの外側にある「Z」値は、特定の一意の値、たとえば0ですか?または、しきい値を適用できますか? – zeeMonkeez

答えて

1

以下はおもちゃの例です。 Zの値が外部(ここでは0ではない)内のオブジェクト内で異なっているという前提に基づいています。またここでは、4列目に直線分周器を仮定していますが、同じ原理(マスク適用)は他の境界にも適用できます。これは、値がxy軸に沿って等距離にあると仮定していますが、その質問には反対ではありません。そうでない場合は、bsxfunを使用してもう少し作業が必要です。

A = [0  2  0  0  0  2  0 
    3  5  3  0  1  4  0 
    1  4  0  0  3  2  3 
    2  3  0  0  0  4  2 
    0  2  6  0  1  6  1 
    0  3  0  0  2  3  0 
    0  0  0  0  0  0  0]; 

area_per_pix = 0.5; % or whatever 

% plot it 
cm = parula(10); 
cm(1, :) = [1 1 1]; 
figure(1); 
clf 
imagesc(A); 
colormap(cm); 

% divider 
dv_idx = 4; 

left_object = A(:, 1:(dv_idx-1)); 
left_mask = left_object > 0; % threshold object 
num_pix_left = sum(left_mask(:)); 

% right object, different method 
right_mask = repmat((1:size(A, 2)) > dv_idx, size(A, 1), 1); 
right_mask = (A > 0) & right_mask; 
num_pix_right = sum(right_mask(:)); 

fprintf('The left object is %.2f units large, the right one %.2f units.\n', ... 
    num_pix_left * area_per_pix, num_pix_right * area_per_pix); 
+0

それは目的を満たすようです!しかし、私はいくつかのロジックについて混乱しています。どのように/なぜあなたはarea_per_pixを選択しましたか?どのように/なぜdiv_idxを選択しましたか?もともと左のオブジェクトで使用されていたのと同じメソッドを使用する場合、Aマトリックスはどのように選択されますか?ありがとう。 – DeeTee

+0

@DeeTee 'area_per_pix'は、x軸に沿った2つのデータ点間の距離であり、y軸に沿った同じ時間になります。私はちょうど任意の値を選んだ。すべてのデータポイントが同じ面積を持つわけではない場合は、より複雑になります。私のおもちゃのデータに合わせて 'div_idx'が再び選ばれました。ここでは2つの図形を分離する列です。あなたはそれをあなたのデータから得る必要があります。データがある列に沿って分離できない場合は、やはりマスクを定義する他の方法があります。 – zeeMonkeez

+0

@DeeTee最後の質問がわかりません。 2つのアプローチの違いは、最初のものでは、まずAの関連部分を選択します(これはすべてを特定の列までとるため簡単です)、そしてしきい値です。これは右のものに等しく適用することができます( '(div_idx + 1):end'をインデックスとして使用します)。 2番目のアプローチでは、しきい値とマスクを組み合わせます(これはマスクが任意である可能性があるため、より一般的なアプローチです)。 – zeeMonkeez

関連する問題