如何使用抖动显示只有黑白像素的灰色图像?
How to use dithering to display an gray image with only black and white pixels?
我有一个 256 级灰度的图像,我想绘制它,这要归功于只有 #000(黑色)和 #FFF(白色)像素(没有别的)。
一种方法是使用抖动:https://upload.wikimedia.org/wikipedia/commons/6/6d/Dithering_example_red_blue.png
在这样的算法中,通过增加一个区域中的像素数(对我来说是白色和黑色)来产生一种模糊效果。
但是我不知道如何实现它:如何确定表示所需灰度级的像素数?
能否请您编写这样的算法(例如使用伪代码,或 Java、Scala、C、C++)?
有许多不同的算法可以创建抖动,我最喜欢的是随机算法,它易于实现,没有重复模式,如果你 re-dither 你的图像每一帧,那么它就会平均时间.
首先,一个重要且经常被忽视的部分是将 256 灰度级从 sRGB(伽马压缩)值转换为线性(伽马未压缩)值,否则就像维基百科的抖动文章中的示例一样,您的抖动图像将是太亮了。要进行转换,请使用 256 个条目查找 table,并使线性值从 0 到 4095。
然后只需使用 linear_value < (rand()&4095) ? 0 : 255
设置抖动,其工作原理是将 0 到 4095 之间的随机值与线性值进行比较,从而为您提供黑色或白色像素。所以如果你 linear_value 比方说 3072(非常浅的灰色),那么 4 次中有 3 次你会得到一个白色像素,而值为 41(深灰色),你会得到黑色 99 次满分 100。
我有一个 256 级灰度的图像,我想绘制它,这要归功于只有 #000(黑色)和 #FFF(白色)像素(没有别的)。
一种方法是使用抖动:https://upload.wikimedia.org/wikipedia/commons/6/6d/Dithering_example_red_blue.png
在这样的算法中,通过增加一个区域中的像素数(对我来说是白色和黑色)来产生一种模糊效果。
但是我不知道如何实现它:如何确定表示所需灰度级的像素数? 能否请您编写这样的算法(例如使用伪代码,或 Java、Scala、C、C++)?
有许多不同的算法可以创建抖动,我最喜欢的是随机算法,它易于实现,没有重复模式,如果你 re-dither 你的图像每一帧,那么它就会平均时间.
首先,一个重要且经常被忽视的部分是将 256 灰度级从 sRGB(伽马压缩)值转换为线性(伽马未压缩)值,否则就像维基百科的抖动文章中的示例一样,您的抖动图像将是太亮了。要进行转换,请使用 256 个条目查找 table,并使线性值从 0 到 4095。
然后只需使用 linear_value < (rand()&4095) ? 0 : 255
设置抖动,其工作原理是将 0 到 4095 之间的随机值与线性值进行比较,从而为您提供黑色或白色像素。所以如果你 linear_value 比方说 3072(非常浅的灰色),那么 4 次中有 3 次你会得到一个白色像素,而值为 41(深灰色),你会得到黑色 99 次满分 100。