对图像应用扩散时,如何像 Photoshop 一样控制抖动 "percentage,"?
When applying diffusion to an image, how to control the dither "percentage," like Photoshop does?
要对图像应用扩散,可以使用像 Floyd Steinberg (FS) 这样的算法,但是如何像 Photoshop 一样控制 "percentage" 的抖动在遗留 "Save for Web" 中有一个选项特征?在 Python 中,使用 PIL,可以使用 im.convert('1') 将图像转换为黑白图像并自动应用 FS 抖动。但抖动似乎是 100%。我希望它更接近 88% 的 Photoshop 效果。如何实现? (使用库或修改FS算法)
抖动百分比对图像的影响示例(通过 Photoshop 生成):
抖动 25%:
抖动 50%:
抖动 75%:
抖动 100%:
我不确定 Photoshop 中到底发生了什么,但是根据我的搜索以及我在对该问题的评论中的描述,我有一个似乎有效的想法。所以这可能不是正确的答案,但可能是类似的答案。
我将在灰度到单色(将区间 [0,1]
映射到集合 {0,1}
)的情况下描述这个想法,这当然可以外推到彩色情况。
让 p
成为所需的百分比(这样 p
在 [0,1]
中)。该算法将执行 Floyd-Steinberg,但仅将错误推送到区间 [(1-p)/2, (1-p)/2 + p]
中的邻居。因此,如果我所有的邻居都在该范围之外,我的错误就会被丢弃。否则,我的错误会被推到该范围内的任何一个(Floyd-Steinberg 通常指定相同的比例)。
我正在犹豫这是否会产生预期的结果(我不是 100% 确定),但它看起来至少是相似的。让我知道你的调查进展如何!
要对图像应用扩散,可以使用像 Floyd Steinberg (FS) 这样的算法,但是如何像 Photoshop 一样控制 "percentage" 的抖动在遗留 "Save for Web" 中有一个选项特征?在 Python 中,使用 PIL,可以使用 im.convert('1') 将图像转换为黑白图像并自动应用 FS 抖动。但抖动似乎是 100%。我希望它更接近 88% 的 Photoshop 效果。如何实现? (使用库或修改FS算法)
抖动百分比对图像的影响示例(通过 Photoshop 生成):
抖动 25%:
抖动 50%:
抖动 75%:
抖动 100%:
我不确定 Photoshop 中到底发生了什么,但是根据我的搜索以及我在对该问题的评论中的描述,我有一个似乎有效的想法。所以这可能不是正确的答案,但可能是类似的答案。
我将在灰度到单色(将区间 [0,1]
映射到集合 {0,1}
)的情况下描述这个想法,这当然可以外推到彩色情况。
让 p
成为所需的百分比(这样 p
在 [0,1]
中)。该算法将执行 Floyd-Steinberg,但仅将错误推送到区间 [(1-p)/2, (1-p)/2 + p]
中的邻居。因此,如果我所有的邻居都在该范围之外,我的错误就会被丢弃。否则,我的错误会被推到该范围内的任何一个(Floyd-Steinberg 通常指定相同的比例)。
我正在犹豫这是否会产生预期的结果(我不是 100% 确定),但它看起来至少是相似的。让我知道你的调查进展如何!