我有一个名为imrgb的RGB图像,其大小为320*512*3 double。和我也有color_map = 64*3 double。我使用以下代码:
[X, map] = rgb2ind(imrgb, 256)
结果X= 320*512 uint8,结果map = 65*3 double。生成的"map"与给定的"color_map"完全不同。如何解决这个问题?
"map"的前几行是这样的:
0 0 0
0 0.125 1
0.56 1 0.439
1 0.125 0
0.188 1 0.812
1 0.749 0
0 0.7490 1
0.5019 0 0
0.7490 1 0.25098
给定的"color_map"的前几行看起来像这样:
0 0 0.5625
0 0 0.6250
0 0 0.6875
0 0 0.7500
0 0 0.8125
0 0 0.8750
0 0 0.9375
0 0 1
0 0.0625 1
使用rgb2ind
执行颜色量化(默认是直接在RGB空间中均匀量化,我们也对图像应用抖动)的图像到一定数量的颜色(在你的情况下,256),如果你没有指定输入颜色映射。map
输出提供了一个颜色映射,使用该量化为您的图像imrgb
最好的分割颜色。变量X
为您提供了索引,其中每个像素映射到来自map
变量的颜色映射中的位置。这实际上是一个颜色查找表。
这个map
变量告诉我们应该将像素显示为查找表中的哪种颜色。例如,上面的调用将生成一个索引图像X
,其索引从1到256,map
将包含256行,其中每列是红色(第一列),绿色(第二列)和蓝色(第三列)的比例。比例在[0-1]
。而且,每一行都是唯一的颜色。因此,如果在图像中找到的索引为5,我们将查找该颜色映射的第五行,这是代表该像素的颜色。
rgb2ind
并不与您提供的自定义颜色地图相对应,除非您将此颜色地图作为输入提供给rgb2ind
。因此,如果您希望使用您提供的自定义颜色映射获得索引图像,请使用此颜色映射作为rgb2ind
的输入,以便索引图像相对于此新的颜色映射。
在这种情况下,您只需执行:
[X, map] = rgb2ind(imrgb, colour_map);