image-processing - 如何在有序抖动的 CIE-L*a*b* 色彩空间中辨别哪种颜色是 "lower"和/或 "higher"?

标签 image-processing colors dithering cielab

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

现在,我想用它来进行抖动,但我不确定如何准确辨别哪种颜色是“较低”颜色,哪种颜色是“较高”颜色。

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

使用 ordered dither 抖动时矩阵,事情变得更加复杂。有序抖动矩阵定义了一个阈值。为此,我需要知道托盘的“较低”像素值和“较高”像素值,与我即将抖动的当前像素有关。现在,我计算到两个像素的距离,抖动矩阵的阈值决定了相邻像素之间的值之后,像素要么抖动到较低的像素,要么抖动到较高的像素。
(通过使用为我的托盘中灰度颜色值的数量明智选择的矩阵,实际的实现当然比计算更优化。此外,诸如选择具有均匀间隔颜色值的托盘等。)
这再次 - 在一维色彩空间中非常容易。但是在 CIE-L*a*b* 中,没有“更高”或“更低”的值。

仅使用亮度来应用阈值矩阵,似乎很不正确,我的托盘中可能有两种亮度相同的颜色,然后呢?

最佳答案

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

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

希望这会有所帮助。

关于image-processing - 如何在有序抖动的 CIE-L*a*b* 色彩空间中辨别哪种颜色是 "lower"和/或 "higher"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795800/

相关文章:

matrix - 如何从 Octave 音阶的文件中加载矩阵?

android - 位图外观不好看,抖动不起作用,在 Android 中

image - 到对象网络摄像头 C920HD 的距离或使用 OpenCV calibrate.py

c++ - sobel 算子 - 假边自然图像

iphone - 可以同时使用AVCaptureVideoDataOutput和AVCaptureMovieFileOutput吗?

android - 无法在 colors.xml 文件中创建新颜色项

c# - 获取所有具有相同颜色的像素坐标

javascript - 在纯 Javascript 中每次单击都会更改背景颜色

ruby-on-rails - 从单一颜色生成配色方案

image-processing - 像素着色器的 Floyd-Steinberg 抖动替代方案