The maximum value is not changing even after adding 1
3 次查看(过去 30 天)
显示 更早的评论
I have an image with values ranging from [0,255]
It's data is attached below as data.mat below.
I read it and added 1 to its data.
The minimum value of data is changed to 1, but the maximum value of data is still 255.
I don't understand why.
0 个评论
采纳的回答
Voss
2024-6-13
编辑:Voss
2024-6-13
load data
class(x0_test)
The minimum value an 8-bit unsigned integer can have is 0, and the maximum value is 2^8-1 = 255.
In MATLAB, the convention when performing an operation on a variable of an integer class that will cause the variable to exceed the maximum value for the class (such as adding 1 to an 8-bit unsigned integer whose value is 255) is to cap the value of the variable at the max value of the class. That's why 255 stays at 255 after adding 1.
x = uint8(255:-15:1)
x+1
x+2
x+100
更多回答(1 个)
Ganesh
2024-6-13
The reason is quite simple, your data is stored as an "uint8" which stands for "unsigned integers in 8 bit". The range of acceptable values for that type is from 0 to 255, which makes it ideal to store image data.
y = uint8(255)
y = y+1
x = uint8(243);
x = x+1
This is simply a way that MATLAB handles it. If you were to do the same in C, there will be an integer overflow and the value is changed to "0" instead. MATLAB protects this integer overflow and hence retains the value of 255.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!