# imapprox


通过减少颜色数量来近似处理索引图像

函数库: TyImages

# 语法

Y,newmap = imapprox(X,map,Q)
Y = imapprox(X,map,inmap)
___ = imapprox(___,dithering)

# 说明

Y,newmap = imapprox(X,map,Q) 使用具有 Q 种量化颜色的最小方差量化法来近似表示索引图像 X 和关联颜色图 map 中的颜色。imapprox 返回索引图像 Y 和颜色图 newmap。示例


Y = imapprox(X,map,inmap) 使用基于颜色图 inmap 的逆颜色图映射法来近似表示索引图像 X 和关联颜色图 map 中的颜色。逆颜色图算法会在 inmap 中查找与 map 中的颜色最匹配的颜色。


___ = imapprox(___,dithering) 启用或禁用抖动。

# 示例

减少索引图像中的颜色数量

加载狒狒面部的索引图像。使用关联的颜色图 map(包含 220 种颜色)显示图像 X。

using TyImages
using TyPlot
pkg_dir = pkgdir(TyImages)
source_path = pkg_dir * "/examples/imapprox/0-data.jl"
include(source_path)

figure()
rgb = ind2rgb(Y1, newmap1)
image(rgb)
axis("off")

通过生成新图像 Y 及其关联的颜色图 newmap,将索引图像中的颜色数量从 220 种减少到仅有 16 种颜色。

figure()
Y, newmap = imapprox(Y1, newmap1, 255);
newrgb = ind2rgb(Y, newmap)
image(newrgb)
axis("off")

# 输入参数

X - 具有多种颜色的索引图像
由非负整数组成的 m×n 矩阵

具有多种颜色的索引图像,指定为由非负整数组成的 m×n 矩阵。

数据类型: Single | Float64 | UInt8 | UInt16

map - 具有多种颜色的颜色图
d×3 的矩阵

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

数据类型: Float64

Q - 量化颜色的数量
正整数

最小方差量化法所用的量化颜色的数量,指定为小于或等于 65536 的正整数。返回的颜色图 newmap 包含的颜色不超过 Q 种。

inmap - 具有较少颜色的颜色图
c×3 的矩阵

逆颜色图映射法所用的具有较少颜色的颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 矩阵。inmap 的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。该颜色图最多有 65536 种颜色。

数据类型: Float64

dithering - 执行抖动
'dither' (默认) | 'nodither'

执行抖动,指定为 'dither' 或 'nodither'。抖动以损失空间分辨率为代价来提高颜色分辨率。有关详细信息,请参见 dither

如果选择 'nodither',则 imapprox 不执行抖动。在这种情况下,函数将原始图像中的每种颜色映射到新颜色图中最接近的颜色。

# 输出参数

Y - 具有较少颜色的索引图像
由非负整数组成的 m×n 矩阵

具有较少颜色的索引图像,返回为由正整数组成的 m×n 矩阵。如果 newmap(或 immap,如有指定)的长度小于或等于 256,则输出图像属于 uint8 类。否则,输出图像属于 Float64 类。

数据类型: Float64 | UInt8

newmap - 具有较少颜色的颜色图
c×3 的矩阵

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

数据类型: Float64

# 算法

imapprox 使用 rgb2ind 创建一个使用较少颜色的新颜色图。有关量化法和逆颜色图映射法的详细信息,请参见 rgb2ind

# 另请参阅

cmunique | dither | rgb2ind