2014-04-21 15 views
1

我正在使用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),以獲得線性值?提前

回答

0

由於這是一個很好的問題,我在這裏出於同樣的原因。

在imread的文檔,我看不到選擇離子進行伽馬校正,並且在整個問題上保持沉默。

我在矩陣中得到相同的值,從屏幕上讀取(使用顏色檢查工具從imshow中讀取)。我在屏幕上看到的值與我在其他圖像查看應用程序中看到的值非常接近(但不完全相同)。

所以我不確定這是一個答案,但還有一些更多的信息。

+0

我已經結束了與所有圖像假設伽瑪2.2並打開它們(雙(imread('im.whatever'))/ 255)^ 2.2 –