Most efficient way to find the indices of rectangular annuli in a 2D matrix

1 回表示 (過去 30 日間)
Sai Prasanth
Sai Prasanth 2020 年 11 月 4 日
編集済み: Matt J 2020 年 11 月 12 日
Hello,
I have a 2D matrix of dimensions 400 x 400. I am interested in extracting the indices of the regions marked in pink, green, and yellow in the below figure. One way to go about this would be: First, find the indices where the X > 100 & X < 300 & Y > 100 & Y < 300 and that is the pink region. Here, the Xs represent the columns and the Ys represent the rows. For the green and yellow regions, it will be useful if I can do something like: find the indices where the X > 50 & X < 350 & Y > 50 & Y < 350 and add an additional condition that the indices should not correspond to the pink region. Similarly, the yellow region is simply all the indices that do not correspond to the pink or green regions. How do I implement this?

採用された回答

Matt J
Matt J 2020 年 11 月 5 日
編集済み: Matt J 2020 年 11 月 5 日
I=[ones(1,50), 2*ones(1,50), 3*ones(1,100)];
I=[I,flip(I)];
pink = (I==3 & I.'==3);
green = (I>=2) & (I.'>=2)&~pink;
yellow = ~(pink|green);
imshow(pink)
imshow(green)
  9 件のコメント
Sai Prasanth
Sai Prasanth 2020 年 11 月 12 日
Wouldn't this create a uniform grid of 381 x 381? And we started with a nonuniform grid of 414x 381. How will this work?
Matt J
Matt J 2020 年 11 月 12 日
編集済み: Matt J 2020 年 11 月 12 日
True. Well, then you could do
[~,Stripes]=ndgrid(1:414, ceil((1:381)/20)/20 ) ;
or you could do,
Stripes=repmat( ceil( (1:381)/20)/20) , 414,1)

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by