can anyone suggest a good way to save & again read a image that will loss lowest possible information?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
anika hossain
il 10 Set 2015
Commentato: anika hossain
il 11 Set 2015
i need to save my worked image & use it for next work. but i am losing information in read & write the image. i am using
imread(w1,'x.png');%after that preform other operation
imwrite(ww,'y.png');
imread(w2,'y.png');%again read the image for next work
i read about export_fig .is it will be helpful for me? & if how to use it?
0 Commenti
Risposta accettata
Thorsten
il 10 Set 2015
Modificato: Thorsten
il 10 Set 2015
Use
save
and
load
9 Commenti
Image Analyst
il 11 Set 2015
My guess is that "final" is not uint8, and that when you cast it to uint8, you're changing it. Perhaps it has values outside the range of 0-255 and those pixels are the ones that will be noticeably different.
If you do this,
final=cat(3,cDR,cDG,cDB);
final8bit = uint8(final);
imwrite(final8bit,'Watermarked_Image.png');
figure();
subplot(1,2,1);
imshow(final8bit);
title('Watermarked Image');
x = imread('Watermarked_Image.png');
subplot(1,2,2);
imshow(x);
Then you will see not difference between x and final8bit because a round-trip to a PNG file will not change the image. However if you compare final and final8bit you will see a difference. To verify:
diffImage = final - final8bit;
fprintf('max Diff=%f\n', max(diffImage(:)));
diffImage = x - final8bit;
fprintf('max Diff=%f\n', max(diffImage(:)));
The first one will show a difference of some number. The second will show a max difference of 0 because PNG does not change the image. Your image corruption is happening when you cast to uint8, and not because you're using a PNG image.
Più risposte (1)
Image Analyst
il 10 Set 2015
You forgot to assign the output of imread to a variable, plus the first argument of imread has to be a string. Not sure what your w1 is. Try it this way:
ww = imread('x.png'); % Read in original image
% After that preform other operation
% Output image is still called ww (though that's probably not a good name).
imwrite(ww,'y.png');
w2 = imread(y.png');% Recall the save image for next work
5 Commenti
Thorsten
il 10 Set 2015
Use imread to read the image, and load and save for the result of your computations on the image.
Image Analyst
il 10 Set 2015
anika, you are NOT already doing that. My code is substantially different than yours. Take a closer look.
There will be no loss of information in the image at all if you use a PNG format file. This is a standard lossless image format supported by virtually every program. You can use a .mat file to save the variable but it's a proprietary format that only MATLAB (and maybe a few other programs) understands. That's why Thorsten and I both recommend to use png for images and load()/save() for other kinds of variables, like the non-image results of your image analysis.
Vedere anche
Categorie
Scopri di più su Image Processing Toolbox in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!