【问题标题】:why different commands result in different indexed color figure为什么不同的命令会导致不同的索引颜色图
【发布时间】:2013-10-20 07:36:03
【问题描述】:

我使用[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 的结果很奇怪。看到这个

【问题讨论】:

  • 提示:颜色图有什么用?
  • 我已经在问题正文中解释过了。当我们读取索引的彩色图像时,我们会得到两个结果:index_map 和 colormap。这是索引彩色图像的基本定义
  • 我问的是你的缘故,不是我的......颜色图是像素值和颜色之间的映射,如果你用相同的颜色图映射两个不同的值,你应该期望两种不同的颜色显示。那么uint8(index_map)double(index_map) 中的值有什么区别?你比较过它们吗?
  • @tqjustc 如果您可以将这两个数字添加到您的问题中会有所帮助。
  • @Shai 我已经添加了图。我的系统是 Ubuntu 13.04 64 位。谢谢

标签: matlab matlab-figure indexed-image


【解决方案1】:

我花了几个小时研究文档,但我终于弄清楚了其中的区别。这来自image 函数的documentation,最终在调用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 恰好不同,这就是您看到奇怪行为的原因。

【讨论】:

  • 另外,很抱歉这么快就假设您的问题只是对颜色图功能的误解。事实证明它比这更微妙! :)
猜你喜欢
  • 2019-12-02
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多