IMWRITE followed by IMREAD Changes Pixel Values

1 view (last 30 days)
I have an image matrix
aa 150x200x3 720000 double
With pixel values 0-255
Why does this test fail :
imwrite(aa, 'aatest.png');
aanew = imread('aatest.png');
isequal(aa, aanew)

Accepted Answer

Amith Kamath
Amith Kamath on 19 Aug 2013
Edited: Amith Kamath on 19 Aug 2013
I tried this, and I realized that ISEQUAL compares a DOUBLE and UINT8, which quite obviously does not return true.
p = rand(150,200,3);
imwrite(p,'test.png');
pnew = imread('test.png');
isequal(p,pnew)
if you really want to check equality,
isequal(im2uint8(p),pnew)
is the way to go.

More Answers (1)

Image Analyst
Image Analyst on 19 Aug 2013
I don't believe PNG is meant for doubles, though I could be wrong. Anyway I never try to save color images while in a double class unless it's to a mat file. Try casting your aa array to uint8 before you save it out. I think that's really what you want and intended anyway.

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!