如何在栅格数据集上添加新的颜色图?

How to add a new colormap on a raster dataset?

我正在尝试在 Matlab 中复制一些 ArcGIS 功能,特别是 Add Colormap 功能。 ArcGIS 中的“添加颜色图”功能将 .clr 文件与 TIFF 图像相关联,以便图像在查看时具有与 TIFF 相关联的自定义配色方案。

我的 TIFF 图像最多有 6 个无符号 8 位整数格式的值 (1 - 6)。您可以从屏幕截图中看到,一些图像只有 1、2 或 3 个值,而其他图像有 6 个值——导致屏幕颜色渲染可变。

我看到 Matlab 具有 colormap 功能,但是,它似乎是专为图形设计的,而不是为 TIFF 文件设计的。我如何在 Matlab 中将颜色图与这些 TIFF 图像相关联,以便当我查看它们时(例如在 ArcGIS 中),它们具有自定义颜色方案?

正如一些评论者所指出的,colormap 功能实际上并不仅限于数字。颜色图概念实际上只是一个查找 table,它将特定值(索引)映射到特定颜色(通常为 RGB)。

如果您查看 imwrite 的文档,您会发现实际上可以将颜色图指定为函数的第二个输入。

load mri
im = squeeze(D(:,:,12));

% This is an indexed image (M x N)

% Save without specifying a colormap
imwrite(im, 'nocolormap.tif')

现在用颜色图保存

imwrite(im, heat, 'colormap.tif')

另一种方法是在 MATLAB 中创建一个 RGB 图像并保存该图像而不向 imwrite 提供颜色图。您可以手动创建此图像

% Normalize a little bit for display
im = double(im) ./ max(im(:));
output = repmat(im, [1 1 3]);   % Make the image (M x N x 3)

imwrite(output, 'rgb_grayscale.tif')

或者您可以使用 built-in 函数 gray2rgb or ind2rgb 使用特定颜色图将索引图像转换为 RGB 图像。

 rgb_image = gray2rgb(im, jet);
 imwrite(rgb_image, 'rgb_jet.tif')

在所有这些中要记住的一件非常重要的事情是,默认情况下,任何 MATLAB 颜色图只有 64 种颜色。所以如果你需要比这更多的颜色,你可以在构造颜色图时指定它

size(gray)

    64   3

size(gray(1000))

    1000   3

如果您要显示高保真数据,这一点尤为重要。