image arithmetic result not the same
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Aaron Connell
am 26 Feb. 2018
Kommentiert: Aaron Connell
am 26 Feb. 2018
Good evening, I have a question about image arithmetic. Below is some code that reads in a grayscale image and performs arithmetic on it. I want to know why the modified image does not look the same when we essentially divided the image pixels by 64 and then multiplied the result by 64. the resulting image should have been identical. Below is the image of the result:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/170773/image.jpeg)
b=imread('blocks.jpg');
class(b); %shows it is a uint8 image
b2=(b/64)*64;
subplot(1,2,1)
imshow(b)
title('original image')
subplot(1,2,2)
imshow(b2)
title('modified image')
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 26 Feb. 2018
>> uint8(65)/64
ans =
uint8
1
>> uint8(63)/64
ans =
uint8
1
we deduce from this that when you do arithmetic on an int8 or uint8, the result is always as if you had done the arithmetic in double precision, then rounded it, and converted back to the data type.
>> uint8(round(double(uint8(65))/double(64)))
ans =
uint8
1
>> uint8(round(double(uint8(63))/double(64)))
ans =
uint8
1
0 Kommentare
Weitere Antworten (1)
Steven Lord
am 26 Feb. 2018
How many unique values can the results of (b/64)*64 take on?
b = intmin('int8'):intmax('int8');
b2 = (b/64);
unique(b2)
Siehe auch
Kategorien
Mehr zu Geometric Transformation and Image Registration finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!