如何在CIE-L*a*b*颜色空间中辨别哪种颜色为"较低"和/或"较高"以进行有序抖动?

pol*_*mon 6 colors image-processing dithering cielab

我已经实现了几个函数来将sRGB转换为CIE-L*a*b*颜色空间.

现在,我想将它用于抖动,但我不确定如何准确地辨别哪种颜色是"较低"颜色,哪一种颜色是"较高"颜色.

当在一维色彩空间(灰度)中抖动时,事情很容易.当使用误差扩散抖动时,我从我的调色板计算最接近的灰度值,并将误差添加到周围的像素,这取决于我使用的抖动矩阵类型(例如Floyd-Steinberg).由于这是一维的,所以很简单,只有这一个值.但是现在我有了这个三维颜色空间,我应该单独将错误添加到每个坐标吗?
(在这一点上,这是对我有意义的唯一方法.)

当与有序抖动矩阵抖动时,事情变得更加复杂.有序抖动矩阵定义阈值.为此,我需要知道我的托盘的"较低"像素值和"较高"像素值,就我当前要抖动的像素而言.现在,我计算到两个像素的距离,来自抖动矩阵的阈值决定在那些与相邻像素之间的值之后,该像素被抖动到较低像素,或者抖动到较高像素.
(实际的实现当然会比计算,通过使用被明智地在我的托盘选择用于量灰度颜色值的矩阵更优化.此外,像具有均匀间隔的颜色值选择托盘等)
这再次 - 在一维色彩空间中非常容易.但在CIE-L*a*b*中,没有"更高"或"更低"的值.

仅使用亮度来应用阈值矩阵,看起来非常不正确,我的托盘中可能有两种颜色相同的亮度,那么呢?

ˆᵛˆ*_*ˆᵛˆ 3

本文描述的问题与您的问题非常接近,然后提供一种算法来解决它:

http://ira.lib.polyu.edu.hk/bitstream/10397/1494/1/A%20multiscale%20color%20error_05.pdf

希望这有帮助。