Help on converting dubble to uint8 ?

Hey,
I have wave signal that change between 2-20 and it's type of dubble. I need to convert it to type uint8, for example:
The wave signale is INDX(change from 2 to 20) type of dubble. Convert signal is: ADR = uint8(INDX);
the result of that conversion gives me values from 0 to 20. Even when ADR is runs from 0 to 18 or 1 to 19 I get the same result : ADR = 0 to 20 ?
Is it possible to get the same values of INDX after using INDX input ? for example, if INDX is running from 3 to 17, the result (ADR=uint8(INDX)) will be 3 to 17 instead 0f 0 to 20 ? or, if INDX is running from 2 to 18, the result (ADR=uint8(INDX)) will be 2 to 18 instead 0f 0 to 20 ? or, if INDX is running from 2 to 20, the result (ADR=uint8(INDX)) will be 2 to 20 instead 0f 0 to 20 ?
I need to keep the same values of the start and end(of INDX) after using uint8(INDX). uint8 type ,must be use.
Thanks, Henry

 Accepted Answer

You must have made a mistake somewhere.
>> uint8(3:17)
ans =
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
In the expression 3:17 the values are double precision values, so this shows that converting double precision values to uint8 works as expected for small non-negative values.

5 Comments

Henry Buck
Henry Buck on 18 Sep 2016
Edited: Stephen23 on 18 Sep 2016
Hi,
well, that's the problem: the values of INDX are not a vector as you wrote.
INDX = round(A/B). B is a constant - let say 40. A is kind a sine wave - max value is 800 and min value is 0 - that gives INDX is between 0 to 20 In other case it couild be 90 to 700 - that gives INDX between 2 to 18..
whent I am using uint8(INDX), it gave me 21 values - 0 to 20.
Why is that ?
thanks, Henry
@Henry Buck: please show us exactly the 21 values with this behavior, and how you are converting them to uint8. Then we can explain what is happening.
Image Analyst
Image Analyst on 18 Sep 2016
Edited: Image Analyst on 18 Sep 2016
Is it possible you use im2double() somewhere along the way? That might rescale and shift things. gray2mat() also scales and shifts to the 0 to 1 range. Also, uint8 rounds internally. It does not just chop off the fractional part.
Like everyone else is saying, you need to show more code, or at least a small similar example, like Walter did, that proves what you're saying.
Not being a vector is irrelevant.
>> A = 53*(reshape(3:17, 3, 5) + rand(3,5)); B = 48; INDX = uint8(A/B)
INDX =
4 8 10 14 17
5 9 12 15 19
6 9 13 16 19
hey guys,
I have to be honest. It is my mistake.
Thanks again.
Henry

Sign in to comment.

More Answers (0)

Categories

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!