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
Другие вопросы по тегам