I am trying to create a mask using by 168x1 struct but whenever i run the code i get this error - Expected one output from a curly brace or dot indexing expression, but there were 168 results.
Is there a way i can iterate through the structure and create a mask out of these fields.
Any help is appreciated
[x,y] = pixcenters(R);
[X,Y] = meshgrid(x,y);
names = fieldnames(S);
no_afr_stru = cell2struct(filt_nonaf_country,names,1);
fn = fieldnames(no_afr_stru);
rx = no_afr_stru.X(1:end-1);
ry = no_afr_stru.Y(1:end-1);
mask = inpolygon(X,Y,rx,ry);

2 件のコメント

Ive J
Ive J 2020 年 12 月 13 日
Please provide more details so that everyone can reproduce your error. For starters, what are X, Y, rx and ry? can you provide an example?
Jordan Coombs
Jordan Coombs 2020 年 12 月 13 日
X & Y are the points from my geotiff file and rx and ry are the points from the countries which i want to mask on my tiff file. as my struct no_afr_stru is 168x1 i want to iterate over all 168 lines in the structure and apply them all to the mask. Hope this helps!

サインインしてコメントする。

 採用された回答

Rik
Rik 2020 年 12 月 13 日

0 投票

You can index a struct in a loop:
rx = no_afr_stru(n).X(1:end-1);
ry = no_afr_stru(n).Y(1:end-1);

1 件のコメント

Jordan Coombs
Jordan Coombs 2020 年 12 月 13 日
Thank you that really helped!

サインインしてコメントする。

その他の回答 (1 件)

Ive J
Ive J 2020 年 12 月 13 日
編集済み: Ive J 2020 年 12 月 13 日

0 投票

Try this:
mask = arrayfun(@(x)inpolygon(X, Y, x.X, x.Y), no_afr_stru, 'UniformOutput', false);

2 件のコメント

Rik
Rik 2020 年 12 月 13 日
I suspect the goal is to create a single mask, which would be easier with a loop. Also, arrayfun will have an overhead.
Jordan Coombs
Jordan Coombs 2020 年 12 月 13 日
you would be correct there sorry i should have specified

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

2020 年 12 月 12 日

コメント済み:

2020 年 12 月 13 日

Community Treasure Hunt

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

Start Hunting!

Translated by