MATLAB Answers

How to associate a rectangle with a struct?

2 views (last 30 days)
Hi there Community,
I have the folllowing image and the antenna:
[Horizontal,Vertical,Optional] = msiread(strcat(pathName,fileName));
How can I associate a rectangle to an antenna?
I made the rectangle using:
rectangle('Position', [(x - handles.Rwidth/2) (y - handles.Rwidth/2)...
handles.Rwidth handles.Rheight], 'FaceColor', 'g','LineStyle', 'none');
Is it possible to affect the rectangule with the struct (antenna)?

  10 Comments

Show 7 older comments
Oliver Lestrange
Oliver Lestrange on 6 Aug 2020
Maybe with this image is more easy to explain.
Imagine that I read this image. Now, I need to know, or put, the antennas in the yellow thing called BTS_xx, in order to calculate the coverage.
Adam Danz
Adam Danz on 6 Aug 2020
So this is an image processing problem as Walter Roberson elluded to, correct?

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 6 Aug 2020
rgb = imread(filename) ;
mask = rgb(:, 1) < 32 & rgb(:, 2) > 224 & rgb(:, 3) > 224;
mask = bwareafilt(mask, [50 inf]);
props = regionprops(mask, 'centroid') ;
locations = vertcat(props.Centroid);
The constants in the above are not tested, only "by eye", and probably need to be adjusted.
The resulting variable will be a something by 2 array in which the first column is x and the second is y. Note that x corresponds to columns, second array index, and y corresponds to row, first index.

  4 Comments

Show 1 older comment
Walter Roberson
Walter Roberson on 6 Aug 2020
It detects bright yellow. Yellow has little red component but bright yellow has strong blue and green components.
Oliver Lestrange
Oliver Lestrange on 7 Aug 2020
And why the < 32 and > 224 ? Where this numbers came from?
Walter Roberson
Walter Roberson on 7 Aug 2020
Looks like I should have used
mask = rgb(:, :, 1) > 224 & rgb(:, :, 2) > 224 & rgb(:, :, 3) < 32;
as I was mistaken about the composition of yellow in RGB.
filename = 'image.png';
rgb = imread(filename) ;
mask = rgb(:, :, 1) > 200 & rgb(:, :, 2) > 200 & rgb(:, :, 3) < 32;
maskfilt = bwareafilt(mask, [50 inf]);
props = regionprops(maskfilt, 'centroid') ;
locations = vertcat(props.Centroid);
imshow(rgb)
hold on
scatter(locations(:,1), locations(:,2), 'r*')
hold off
The 32 and 224 came from my experience with RGB colors.
Your yellow blobs appear to be approximately "dark yellow 1". You can tell the values by imshow(rgb) and using the data cursor tool to read RGB values off of the image.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by