# 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。