how is imwrite() in Matlab2020a saving RGB?
9 次查看(过去 30 天)
显示 更早的评论
I tried to add noise to one of the three color channels, say GREEN, save the new noisy image with imwrite(), open it again with imread(), and compare against the original. The image Ia has noise only on GREEn channel. Why is the noise in image Ib over all color channels after using imwrite() and reading the noisy image with imread()?
Here is the code:
=======
clear all;
close all;
clc;
I=imread('strawberries.jpg');
greenChannel=I(:,:,2);
%add noise to green channel
Ia=I;
Ia(:,:,2)=imnoise(greenChannel,'salt & pepper',0.01);
%save noisy image
imwrite(Ia,'./strawberries_noise1.jpg');
%read noisy image
Ib=imread('./strawberries_noise1.jpg');
%compare original and noisy image before imwrite()
I1a=double(I(:,:,1))-double(Ia(:,:,1));
I2a=double(I(:,:,2))-double(Ia(:,:,2));
I3a=double(I(:,:,3))-double(Ia(:,:,3));
%compare original and noisy image after imwrite()
I1b=double(I(:,:,1))-double(Ib(:,:,1));
I2b=double(I(:,:,2))-double(Ib(:,:,2));
I3b=double(I(:,:,3))-double(Ib(:,:,3));
figure;
subplot(2,3,1);imshow(mat2gray(I1a));title('no noise on RED')
subplot(2,3,2);imshow(mat2gray(I2a));title('noise on GREEN')
subplot(2,3,3);imshow(mat2gray(I3a));title('no noise on BLUE')
subplot(2,3,4);imshow(mat2gray(I1b));
subplot(2,3,5);imshow(mat2gray(I2b));
subplot(2,3,6);imshow(mat2gray(I3b));
0 个评论
回答(1 个)
Cedric
2020-4-24
编辑:Cedric
2020-4-24
You are saving as a jpeg file, which is lossy by default.
If you save as .png for example (lossless), there will be no difference in the R and B components:
imwrite(Ia,'./strawberries_noise1.png');
Ib=imread('./strawberries_noise1.png');
You can also keep the jpeg format but set the mode to lossless:
imwrite(Ia,'./strawberries_noise1.jpg', 'Mode','lossless');
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!