How to round a value to the nearest value in an array?

26 views (last 30 days)
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);

Answers (2)

Ameer Hamza
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')

Bjorn Gustavsson
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

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!