1

私は 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 の値は、たまたま 2.2 のべき乗で HDRShop で取得した値です (大まかに) だから私の質問は... matlab は jpeg ファイルを読み取るときに値を線形空間に格納しますか?線形値を取得するためにガンマ項 (.^2.2) を具体的に適用するには?

前もって感謝します

4

2 に答える 2