can anyone suggest a good way to save & again read a image that will loss lowest possible information?

4 visualizzazioni (ultimi 30 giorni)
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?

Risposta accettata

Thorsten
Thorsten il 10 Set 2015
Modificato: Thorsten il 10 Set 2015
Use
save
and
load
  9 Commenti
Image Analyst
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.

Accedi per commentare.

Più risposte (1)

Image Analyst
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
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
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.

Accedi per commentare.

Categorie

Scopri di più su Image Processing Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by