【发布时间】:2015-08-28 00:49:48
【问题描述】:
我已经实现了几个函数来将 sRGB 转换为 CIE-L*a*b* 色彩空间。
现在,我想将其用于抖动,但我不确定如何准确辨别哪种颜色是“较低”颜色,哪种颜色是“较高”颜色。
在一维色彩空间(灰度)中进行抖动时,事情很容易。当使用误差扩散抖动时,我会从我的调色板中计算最接近的灰度值,并将误差添加到周围的像素中,具体取决于我使用的抖动矩阵类型(例如 Floyd-Steinberg)。因为这是一维的,所以很简单,只有这一个值。但是现在我有了这个 3D 色彩空间,我是否应该将误差单独添加到每个坐标?
(在这一点上,这是唯一对我有意义的方法。) p>
当使用ordered dither 矩阵进行抖动时,事情变得更加更加复杂。有序抖动矩阵定义了一个阈值。为此,关于我即将抖动的当前像素,我需要知道托盘的“较低”像素值和“较高”像素值。现在,我计算到两个像素的距离,抖动矩阵的阈值决定在相邻像素之间的哪个值之后,像素要么抖动到较低的像素,要么抖动到较高的像素。
(通过使用为我的托盘中的灰度颜色值数量合理选择的矩阵,实际实现当然比计算更优化。此外,选择具有均匀间隔颜色值的托盘等)
这 - 再次 - 在一维色彩空间中非常容易。但在 CIE-L*a*b* 中,没有“更高”或“更低”的值。
仅使用亮度来应用阈值矩阵,似乎很不正确,我的托盘中可能有两种亮度相同的颜色,然后呢?
【问题讨论】:
-
在 LAB 颜色空间中应用 color difference 可能会帮助您根据颜色之间的比较设置阈值。降低
delta e值,使两种颜色的相关性更密切。 -
@SarthakSinghal 嗯,是的,我已经在使用 ΔE 来计算颜色距离。但这无济于事。单独,因为我需要区分“更高”和“更低”。如果我只是从最接近的颜色抖动到第二接近的颜色,我可能会“向下”抖动到较低的亮度等,这是不正确的。
标签: image-processing colors dithering cielab