4个版本
0.2.0 | 2021年3月30日 |
---|---|
0.1.2 | 2021年2月20日 |
0.1.1 | 2020年11月16日 |
0.1.0 | 2020年10月23日 |
#480 在 图像
99KB
2K SLoC
rscolorq
rscolorq是Derrick Coetzee的scolorq
的Rust端口,基于Jan Puzicha、Markus Held、Jens Ketterer、Joachim M. Buhmann和Dieter Fellner于1998年发表的论文"On spatial quantization of color images"。空间量化是指在图像中同时执行半色调(抖动)和颜色量化(限制图像中的颜色)。更多信息请访问原始实现网站。
该算法非常适合保留图像细节并最小化图像在4、8或16种颜色邻域内的视觉失真。它将限制调色板和图像抖动合并为一个同时过程,而不是先顺序限制颜色然后抖动。颜色根据其在图像中的上下文选择,因此具有“空间”这一特性。与点彩画类似,颜色根据其邻居混合,在人类眼中形成平均的错觉颜色。
要作为库使用,请将以下内容添加到您的Cargo.toml
中;添加palette_color
功能以启用Lab颜色量化。可执行版本可在https://github.com/okaneco/rscolorq/releases找到。
[dependencies.rscolorq]
version = "0.2"
default-features = false
示例
图像在100%放大时最佳查看。
1) 马达加斯加猫
顶部行:原始图像,RGB 2种颜色
底部行:RGB 4种颜色,RGB 8种颜色
rscolorq -i mandrill.jpg -o mandrill-rgb2.png -n 2 --auto -s 0 --iters 5
rscolorq -i mandrill.jpg -o mandrill-rgb4.png -n 4 --auto -s 0 --repeats 3
rscolorq -i mandrill.jpg -o mandrill-rgb8.png -n 8 --auto -s 0 --iters 5
可以使用--iters
和--repeats
选项来增加它们的值以改善输出质量。使用--auto
根据图像大小和所需的调色板大小设置抖动级别。使用--seed
或-s
选项设置随机数生成器的种子;否则,它将以随机方式设置种子。
2) 调色板样本和固定调色板
可以通过传递 --op
和一个文件名来生成调色板样本。可以使用 --width
和 --height
来指定生成调色板图像的宽度和高度。下面的样本是构成前一个图像底部行 4 和 8 种颜色抖动图像的颜色。
rscolorq -i mandrill-resize.jpg --op mandrill-rgb4-pal.png -n 4 --auto -s 0 --repeats 3
rscolorq -i mandrill-resize.jpg --op mandrill-rgb8-pal.png -n 8 --auto -s 0 --iters 5 -p
通过传递 --print
或 -p
标志,将十六进制颜色打印到终端,如上面第二个示例所示。如果没有传递 --output
或 -o
,则抖动图像不会被保存到文件中。
b5c970,191821,b7cbe7,6d7f7b,5db7f0,4e5936,f05131,939bcc
自定义颜色调色板
可以通过传递 --colors
或 -c
后跟一个十六进制颜色列表来提供自己的调色板,如下例所示。
左侧为原始图像,右侧为固定的调色板。
rscolorq -i scenic.jpg -o mountain-pal.png -c FFBF82,09717E --auto -s 0 --iters 5`
3) 渐变
顶部行:原始图像,RGB 4 种颜色,RGB 8 种颜色。
底部行:Lab 4 种颜色,Lab 8 种颜色。
rscolorq -i rainbow.png -o rainbow-rgb4.png -n 4
rscolorq -i rainbow.png -o rainbow-rgb8.png -n 8 --iters 8 --repeats 2
rscolorq -i rainbow.png -o rainbow-lab4.png -n 4 --lab
rscolorq -i rainbow.png -o rainbow-lab8.png -n 8 --lab --iters 8 --repeats 2
从左到右:原始图像,2 种颜色,过滤器大小 3,2 种颜色,过滤器大小 5。
功能
- 使用 RGB 或 Lab 颜色空间进行计算
- 根据用户提供的固定颜色调色板进行抖动选项
- 可重复结果的随机数生成器
- 将调色板颜色以十六进制形式打印到命令行
- 从抖动颜色创建调色板样本图像
限制
它“慢”
- 较大的图像或具有平滑过渡/渐变的图像将花费更长的时间。更大的调色板大小将花费更长的时间。
- 该算法适合使用较小的颜色调色板保留细节。您仍然可以在较大图像上使用它,但请注意,除非图像很小,否则它不会接近实时。
过滤器大小 1x1
- 不产生与输入图像相似或与原始图像相似的图像。
过滤器大小 5x5
- 并不总是收敛。
- 我不确定这是此实现的错误还是随机数生成器的问题。原始实现可能需要一段时间,但最终会使用过滤器大小 5 完成。
- 对此有任何帮助都将受到欢迎。
故障排除
如果您在使用命令行工具时遇到无效颜色错误或十六进制颜色长度错误,请尝试将颜色字符串用引号括起来。
例如,不要使用 -c 000000,ffffff
,而应使用 '000000,ffffff'
。
许可协议
本库的许可协议为
任选其一。
除非您明确说明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何旨在包含在本作品中的贡献,应按上述方式双重许可,而不附加任何额外条款或条件。
原始图像的版权归各自所有者所有。
依赖关系
~0.4–2MB
~36K SLoC