1

我使用获取索引图和颜色图,[index_map,colormap] = imread('indexed_color_image.tif'); 然后使用两个不同的命令显示结果。他们的结果看起来非常不同。

Case 1: figure;imshow(uint8(index_map), colormap);

case 2: figure; imshow(double(index_map), colormap);

你能解释一下吗?谢谢 !这是原始图像。(索引图像)。

在此处输入图像描述

案例1的结果与原始图像一样。但是案例 2 的结果很奇怪。看到这个

在此处输入图像描述

4

1 回答 1

3

花了几个小时挖掘文档,但我终于弄清楚了其中的区别。这来自函数的文档image最终在调用后调用imshow

双精度数据(双阵列):

图像存储为 [1, length(colormap)] 范围内的二维 (m×n) 整数数组;colormap 是 [0, 1] 范围内的 m×3 浮点值数组。

8 位数据(uint8 数组) 16 位数据(uint16 数组):

图像存储为 [0, 255] (uint8) 或 [0, 65535] (uint16) 范围内的二维 (m×n) 整数数组;colormap 是 [0, 1] 范围内的 m×3 浮点值数组。

所以答案是 uint8 数据预计在 [0, 255] 范围内,而 double 数据预计在 [1, 256] 范围内。我可以通过尝试来确认这一点:

[imdata, immap] = imread('ostrich.png');
imhandle = imshow(1+double(imdata),immap);

Matlab 从数据类型推断它应该如何索引颜色图。uint8 与 double 恰好不同,这就是您看到奇怪行为的原因。

于 2013-10-20T10:37:27.787 回答