# cmunique


消除颜色图中的重复颜色;将灰度或真彩色图像转换为索引图像

函数库: TyImages

# 语法

Y,newmap = cmunique(X,map)
Y,newmap = cmunique(RGB)
Y,newmap = cmunique(I)

# 说明

Y,newmap = cmunique(X,map) 从颜色图 map 中删除重复的行以生成新颜色图 newmap。该函数还会调整强度图像 X 中的索引以保持索引与颜色图之间的对应,并在 Y 中返回结果。图像 Y 和关联的颜色图 newmap 生成与 X 和 map 相同但包含尽可能小的颜色图的图像。示例


Y,newmap = cmunique(RGB) 将真彩色图像 RGB 转换为索引图像 Y 及其关联的颜色图 newmap。返回的颜色图是图像的可能的最小颜色图,包含 RGB 中每种唯一颜色对应的一项。

提示

newmap 可能非常大,因为项数可能与 RGB 中的像素数一样多。


Y,newmap = cmunique(I) 将灰度图像 I 转换为索引图像 Y 及其关联的颜色图 newmap。返回的颜色图是图像的可能的最小颜色图,包含 I 中每种唯一强度级别对应的一项。

# 示例

消除颜色图中的重复项

使用 magic 函数将 X 定义为一个 4×4 的数组,该数组使用范围 1 至 16 之间的每个值。

using TyImages
using TyMath
using TyPlot
X = Float64.(magic(4))

使用 gray 函数创建一个包含八项的颜色图。然后,串联这两个包含八项的颜色图,以创建一个包含 16 项的颜色图 map。在 map 中,第 9 至第 16 项是第 1 至第 8 项的重复项。

cmap = [gray(8); gray(8)];
size(cmap)
(16, 3)

使用 cmunique 消除颜色图中的重复项。

Y, newmap = cmunique(X, cmap);
size(newmap)
(8, 3)  

cmunique 调整原始图像 X 中的值,以便 Y 和 newmap 生成与 X 和 map 相同的图像。

figure()
rgb1 = ind2rgb(X, cmap)
image(rgb1)
title("X and map")
figure()
rgb2 = ind2rgb(Y, newmap)
image(rgb2)
title("Y and newmap")

# 输入参数

X - 具有重复颜色的索引图像
m×n 整数矩阵

具有重复颜色的索引图像,指定为 m×n 整数矩阵。

数据类型: Float64 | UInt8 | UInt16

map - 具有重复颜色的颜色图
c1×3 矩阵

与索引图像 X 相关联的具有重复颜色的颜色图,指定为由范围 [0, 1] 内的值组成的 c1×3 矩阵。map 的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。

数据类型: Float64

RGB - RGB 图像
由非负数组成的 m×n×3 数组

RGB 图像,指定为由非负数组成的 m×n×3 数组。

数据类型: Float64 | UInt8 | UInt16

I - 灰度图片
m×n 数值矩阵

灰度图像,指定为 m×n 数值矩阵。

数据类型: Float64 | UInt8 | UInt16

# 输出参数

Y - 具有唯一颜色的索引图像
m×n 整数矩阵

具有唯一颜色的索引图像,以 m×n 整数矩阵形式返回。如果 newmap 的长度小于或等于 256,则输出图像可以属于 uint8 类。否则,输出图像属于 Float64 类。

数据类型: Float64 | UInt8

newmap - 具有唯一颜色的颜色图
c2×3 矩阵

与输出索引图像 Y 相关联的具有唯一颜色的颜色图,返回为由范围 [0, 1] 内的值组成的 c2×3 矩阵。newmap 的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。

数据类型: Float64

# 另请参阅

rgb2ind