can anyone suggest a good way to save & again read a image that will loss lowest possible information?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
anika hossain
el 10 de Sept. de 2015
Comentada: anika hossain
el 11 de Sept. de 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 comentarios
Respuesta aceptada
Thorsten
el 10 de Sept. de 2015
Editada: Thorsten
el 10 de Sept. de 2015
Use
save
and
load
9 comentarios
Image Analyst
el 11 de Sept. de 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.
Más respuestas (1)
Image Analyst
el 10 de Sept. de 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 comentarios
Thorsten
el 10 de Sept. de 2015
Use imread to read the image, and load and save for the result of your computations on the image.
Image Analyst
el 10 de Sept. de 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.
Ver también
Categorías
Más información sobre Image Processing Toolbox en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!