我正在使用matlab對圖像進行一些計算,我的第一印象是從jpeg文件讀取後存儲在matlab矩陣中的值經過gamma校正。因此,我應該寫下面的代碼:打開和寫入文件時的gamma校正
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_jpeg是不同的,因爲後者在作爲jpg文件編寫時是經過伽馬校正的,而另一個則不是。原來這兩個矩陣是相同的。在我之前的測試中,我試圖從matlab和HDRShop中打開相同的jpg圖像,兩幅圖像在屏幕上看起來都是一樣的,但是當我查找圖像中的值時,它們不是在matlab中的值正好是我在2.2版本(大致)的HDRShop中得到的值。 所以myquestion是... matlab在讀取jpeg文件時將值存儲在線性空間中,還是我必須專門申請伽馬項(^ 2.2),以獲得線性值?提前
我已經結束了與所有圖像假設伽瑪2.2並打開它們(雙(imread('im.whatever'))/ 255)^ 2.2 –