Я использую matlab для выполнения некоторых вычислений на изображениях, и первым впечатлением было то, что значения, сохраненные в матрице 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_jpeg быть разными, поскольку последний был гамма-исправлен, когда был записан как файл jpg, а другой - нет. Оказывается, обе матрицы одинаковы. И в этом я не понимаю. В предыдущем тесте я попытался открыть одно и то же изображение jpg из Matlab и HDRShop. Оба изображения выглядят одинаково на экране, но когда я просматриваю значения в изображениях, они не То же самое. Значения в matlab - это значения, которые я получаю в HDRShop при мощности 2,2 (примерно). Итак, myquestion ... ... Matlab сохраняет значения в линейном пространстве, когда он читает файл jpeg, или я должны конкретно применять термин гамма (.^2.2) для того, чтобы получить линейные значения?
заранее спасибо
В итоге я решил использовать гамма 2.2 для всех изображений и открывать их как (double (imread ('im.whatever "))/255)^2.2 –