我正在使用 matlab 对图像进行一些计算,我的第一印象是从 jpeg 文件读取后存储在 matlab 矩阵中的值是经过伽马校正的。因此,我应该编写以下代码:
im = (double((imread('Myimage.jpg')))/255).^2.2;
为了得到一个具有线性空间值的矩阵。但是,我尝试了以下方法:生成线性渐变:
for x=1:256
gradient(:,x) = ones(128,1) * (x-1)/255;
end
然后我将其写入 jpeg 文件并再次读取:
imwrite(gradient, 'gradient.jpg', 'Quality', 100);
gradient_jpg = double(imread('gradient.jpg'))/255;
现在我希望 gradient 和 gradient_jpeg 会有所不同,因为后者在编写为 jpg 文件时进行了伽马校正,而另一个则没有。事实证明这两个矩阵是相同的。而我这是我不明白的地方。在之前的测试中,我尝试从 matlab 和 HDRShop 打开相同的 jpg 图像。两个图像在屏幕上看起来相同,但是当我查找图像中的值时,它们不是一样。matlab中的值恰好是我在HDRShop中以2.2的幂得到的值(大约)。所以我的问题是......当matlab读取jpeg文件时是否将值存储在线性空间中,或者我有专门应用伽马项 (.^2.2) 以获得线性值?
提前致谢