can anyone suggest a good way to save & again read a image that will loss lowest possible information?
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Thorsten
2015 年 9 月 10 日
編集済み: Thorsten
2015 年 9 月 10 日
Use
save
and
load
9 件のコメント
Image Analyst
2015 年 9 月 11 日
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.
その他の回答 (1 件)
Image Analyst
2015 年 9 月 10 日
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 件のコメント
Thorsten
2015 年 9 月 10 日
Use imread to read the image, and load and save for the result of your computations on the image.
Image Analyst
2015 年 9 月 10 日
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.
参考
カテゴリ
Help Center および File Exchange で Image Processing Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!