为什么YCbCr通道保存为jpeg图像,像素的值会发生变化?



我在matlab R2013a中使用函数rgb2ycbcr将RGB更改为YCBCR色彩空间。我将YCBCR的每个通道保存为jpeg图像。然后我读取了jpeg图像,例如CB通道,但是我发现jpeg图像中的像素值与保存前的通道CB不同。为什么会这样?这是我的代码:

I = imread('pic.jpg');  % // 'pic.jpg' is an unin8 rgb image
YCBCR = rgb2ycbcr(I);
Y = YCBCR(:,:,1);
CB = YCBCR(:,:,2);
CR = YCBCR(:,:,3);
imwrite(Y,'F:CASIA V1.0Y.jpg','jpg');
imwrite(CB,'F:CASIA V1.0CB.jpg','jpg');
imwrite(CR,'F:CASIA V1.0CR.jpg','jpg');

然后我看了CB.jpg,发现像素值和YCBCR(:,:,2)中的不一样。我的代码有什么问题吗?如果有人能回答我的问题,我将不胜感激。

当您使用 imwrite 将图像存储为 jpg 时,它会在将图像保存到文件之前对图像运行 jpeg 压缩。默认情况下,压缩质量设置为原始质量的 75%。我猜这是某些像素值从未压缩图像更改为压缩图像的原因。

最新更新