1

我有一个 256 灰度级的图像,我想绘制这要归功于只有 #000(黑色)和 #FFF(白色)像素(仅此而已)。

一种方法是使用抖动:https ://upload.wikimedia.org/wikipedia/commons/6/6d/Dithering_example_red_blue.png

在这样的算法中,一种模糊是通过增加一个区域中的像素数量(对我来说是白色和黑色)来实现的。

但是我不知道如何实现它:如何确定代表所需灰度级别的像素数?您能否编写这样一个算法(例如使用伪代码,或 Java、Scala、C、C++)?

4

1 回答 1

3

有许多不同的算法可以创建抖动,我最喜欢的是随机的,它很容易实现,它没有重复的模式,如果你每帧都重新抖动你的图像,那么随着时间的推移它会变得平均。

首先,一个重要且经常被忽视的部分是将您的 256 个灰度级从 sRGB(伽马压缩)值转换为线性(伽马未压缩)值,否则就像维基百科的抖动文章中的示例一样,您的抖动图像会太亮。要进行转换,请使用 256 条目查找表,并使线性值从 0 变为 4095。

然后只需使用 设置您的抖动linear_value < (rand()&4095) ? 0 : 255,这是通过将 0 到 4095 之间的随机值与您的线性值进行比较来实现的,从而为您提供黑色或白色像素。因此,如果您的 linear_value 是 3072(非常浅灰色),那么 4 次中有 3 次会得到白色像素,而值为 41(深灰色)时,100 次中有 99 次会得到黑色。

于 2017-02-04T11:12:36.137 回答