MATLAB: написать с отрицательными значениями и пользовательской картой цветов
У меня есть собственная цветовая карта cmap
что я использую для отображения матрицы X
который содержит отрицательные значения. Я отображаю это с помощью
image(X, 'CDataMapping', 'scaled');
colormap(cmap);
axis normal;
Это прекрасно работает, но теперь я хотел бы сохранить матрицу как изображение с той же цветовой картой.
Когда я попробую следующее:
imwrite(X, cmap, 'test.tif');
Я получаю полностью черное изображение. Я понимаю, что TIFF хочет отобразить их в пространстве от 0 до 1 или от 0 до 2^16, поэтому я попытался сделать
X = X - min(X(:));
X = (X/max(X(:)))*(2^16);
X = uint16(X);
Но потом, когда я попытался сохранить X
с cmap
, файл был поврежден и не открывается. Я попытался восстановить пользовательскую карту цветов, используя новый масштаб от 0 до 2^16-1, но изображение, созданное из этого, также было нечитаемым.
Любые идеи о том, как это может быть достигнуто?
2 ответа
Вот как я наконец решил это:
В дополнение к изменению матрицы мне пришлось нормализовать цветовую карту в пространстве от 0 до 1. Мне также пришлось умножить на длину цветовой карты вместо 2^16.
Вот как это выглядело в итоге:
cmap = cmap - min(cmap(:));
cmap = cmap/max(cmap(:));
N = size(cmap, 1);
X = X - min(X(:));
X = (X/max(X(:)))*N;
X = uint16(X);
imwrite(X, cmap, 'test.tif');
Я надеюсь, что это спасет некоторых из вас от неприятностей, которые я причинил!
Похоже, что нет формата файла изображения, который поддерживает 16-битное индексированное сохранение цветного изображения:
TIFF не поддерживает индексированные цвета, а PNG не поддерживает 16-битный индекс.
Попробуйте конвертировать в полный RGB и сохраните его как TIFF:
rgb = ind2rgb( uint16(X), cmp ); % with X scaled as in your question
imwrite( rgb, 'myTiffImage.tif' ); % write the RGB image