How to round a value to the nearest value in an array?
26 views (last 30 days)
Show older comments
I have a large matrix of orientation values from an image and want to round them to the nearest value from an array.
What I have right now is a very long and overly complicated if/else statement that looks like this:
array = [0, 45, 90, 135];
if ((value(x, y) >= 0 && value(x, y) < 22.5) || (value(x, y) >= 157.5 && value(x, y) < 202.5) || (value(x, y) >= 337.5) && (value(x, y) <= 360))
value(x, y) = array(1);
elseif ((value(x, y) >= 22.5) && (value(x, y) < 67.5) || (value(x, y) >= 202.5) && (value(x, y) < 247.5))
value(x, y) = array(2);
...
end
What I would like is something that resembles more the following, or any MATLAB type shortcut:
array = [0, 45, 90, 135];
value(x, y) = roundToNearest(value(x, y), array);
0 Comments
Answers (2)
Ameer Hamza
on 10 Nov 2020
You can use interp1() with 'nearest'
array = [0, 45, 90, 135];
value; % matrix
value_rounded = interp1(array, array, value, 'nearest', 'extrap')
0 Comments
Bjorn Gustavsson
on 10 Nov 2020
At the file exchange I quickly found a couple of contributions that allows rounding to some desired precision. For this case could you use something like:
y_rounded = 45*round(y_values/45);
HTH
0 Comments
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!