Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 这种颜色量化算法的复杂性是什么?_Algorithm_Language Agnostic_Complexity Theory - Fatal编程技术网

Algorithm 这种颜色量化算法的复杂性是什么?

Algorithm 这种颜色量化算法的复杂性是什么?,algorithm,language-agnostic,complexity-theory,Algorithm,Language Agnostic,Complexity Theory,几年前,当我写大学论文时,我开始玩弄这个想法。想法是这样的,完美的颜色量化算法将拍摄任意真彩色图片,并尽可能减少颜色数量,同时保持新图像与原始图像完全无法用肉眼区分 基本上,设置很简单-在RGB立方体中有一组点(每个轴上的整数值从0到255)。必须用另一个点替换这些点中的每一个点,以便: 操作后的总点数尽可能少 从原始点到替换点的距离不大于红色、绿色和蓝色轴上的某些预定义常数R、G和B(这些常数取自人眼的灵敏度,通常由用户配置) 我知道有很多颜色量化算法,它们的工作效率不同,但它们的主要目标

几年前,当我写大学论文时,我开始玩弄这个想法。想法是这样的,完美的颜色量化算法将拍摄任意真彩色图片,并尽可能减少颜色数量,同时保持新图像与原始图像完全无法用肉眼区分

基本上,设置很简单-在RGB立方体中有一组点(每个轴上的整数值从0到255)。必须用另一个点替换这些点中的每一个点,以便:

  • 操作后的总点数尽可能少
  • 从原始点到替换点的距离不大于红色、绿色和蓝色轴上的某些预定义常数R、G和B(这些常数取自人眼的灵敏度,通常由用户配置)
我知道有很多颜色量化算法,它们的工作效率不同,但它们的主要目标是将颜色减少到一定的数量,而不是“在不违反这些约束的情况下尽可能减少”

此外,我希望该算法能够产生真正的绝对最小值,而不仅仅是“非常接近最小值”的值

这是否可能,而无需花费大量时间对所有组合进行全面搜索(对于任何真实图片都不可行)?我的直觉告诉我这是一个NP完全问题或更糟的问题,但我无法证明它


额外设置:将限制从常数R、G、B更改为函数F(Rsource、Gsource、Bsource、Rtarget、Gtarget、Btarget),如果映射正常,则返回TRUE;如果映射超出范围,则返回FALSE。

根据您的定义,图片的结构(即像素的组织方式)根本不重要,唯一重要的是RGB三元组的子集,它们在图片中作为像素值至少出现一次。让该子集为S。你想找到RGB三元组E的另一个子集(编码),这样S中的每一个S都存在一个对应的E,这样diff(S,E)这里有一个想法,我可以这样做-不幸的是,这可能需要大量内存,速度非常慢:

创建一个256x256x256立方数据结构,其中包含一个计数器和一个颜色的“邻居”列表。对于你在图像中发现的每一种独特的颜色,你都会增加每个单元格的计数器,该单元格位于该颜色周围的球体半径范围内。球体的半径是您最初定义的最大可接受距离。还可以将颜色添加到每个单元格的邻居列表中

一旦添加了所有独特的颜色,就可以在立方体中循环,找到具有最大计数器值的单元格。将此颜色添加到结果列表中。现在再次在立方体中循环,从所有单元格中删除此颜色以及该颜色的邻居列表中的所有颜色,并在删除颜色时减少每个单元格的计数器。然后重复搜索最大计数器并移除,直到立方体中不再有颜色


或者,如果同一颜色在图像中出现的频率更高,还可以多次添加该颜色。不确定这是否会改善视觉效果。

最佳量化是一个NP难问题(Son H.Nguyen,Andrzej Skowron-实值属性量化,1995)

预定义的最大距离不会使事情变得更容易,当您有比球体大的点簇时,但点之间的距离小于球体半径-然后您有很多组合(因为球体的每个放置选择可能会置换所有其他球体)。不幸的是,这种情况经常发生在带有梯度的真实图像上(整个直方图成为一个巨大的簇并不罕见)


您可以修改许多量化算法来选择簇的数量,直到满足一定的质量要求,例如,在中值切割和Linde–Buzo–Gray中,当达到质量限制时,您可以简单地停止细分空间。不能保证它是全局最小值(这是NP难的),但在LBG中,你至少知道你是局部最小值。

抖动也会减少你使用的颜色点的数量,但像素变换需要依赖于像素的邻域,而不仅仅是像素本身。嗯。。。由于颜色感知依赖于相邻的细胞,可能涉及到小波导数?我的目标是“无法区分”的数学精度。抖动和依赖相邻像素可以改善从远处观看时的外观,但在特写中,这种差异将是明显的。可用的抖动量取决于物理像素大小。对我来说有点太不可靠了。不可区分的数学定义没有。在适当的观察条件下,即使是标准的24位颜色精度也不足以避免可分辨的带状伪影。另一方面,如果你考虑到人类的心理-视觉系统,你可以做相当大的转换。好吧,我在文章中给出了“不可分辨性”的定义。当且仅当两种颜色的单个分量的差异不超过一些预定义的R/G/B常量时,这两种颜色是“不可区分的”。为了使其无限大,我们不能只允许RGB值为实数而不是整数吗?即使不这样做,似乎“预计算一切”的答案还是有些无用,即使它在理论上是正确的。我们可以对整数进行同样的排序计算,因为实际上我们只对低于某个阈值的整数进行排序。但我们没有。我们学习快速排序、气泡排序和timsort。一般来说,使用这些排序比预先计算排序问题的所有可能的解决方案要快得多。