首页 / 知识
关于算法:跟进:通过独特性对颜色进行”排序”
2023-04-11 14:54:00

Followup: “Sorting” colors by distinctiveness原始问题 如果为您提供了N种最大距离的颜色(以及一些相关的距离度量标准),您是否可以提出一种将这些颜色按某种顺序进行排序的方法,以使前M个也可以合理地接近最大不同的颜色集?铅> 换句话说,给定一堆不同的颜色,提出一个顺序,这样我就可以从开始就使用任意数量的颜色,并可以有把握地保证它们都是不同的,并且附近的颜色也非常不同(例如,蓝红色不紧跟红蓝色)。 随机化是可以的,但肯定不是最佳选择。 说明:给定一些大的,视觉上不同的颜色(例如256或1024),我想对它们进行排序,这样当我使用第一个(例如16种)时,我会得到一个相对视觉上相对明显的颜色子集。大致上,这相当于说我要对1024个列表进行排序,以便视觉上各个颜色越接近,它们在列表中的距离就越远。 可以将N个最大距离的颜色视为3维(彩色)空间中一组分布良好的点。如果可以从Halton序列生成它们,则任何前缀(前M个颜色)也将包含分布良好的点。 感觉对您来说很重要,在这种情况下,您可能需要考虑使用诸如YUV,YCbCr或Lab之类的可感知色彩空间。每次使用它们时,它们给我的效果都比单独使用sRGB好得多。 与sRGB进行转换可能会很痛苦,但是在您的情况下,它实际上可以使算法更简单,而且,它还能在大多数情况下适用于色盲! 这个问题被称为色彩量化,并且有许多众所周知的算法:http://en.wikipedia.org/wiki/Color_quantization我知道人们实施了八叉树方法以取得良好的效果。 在我看来,这听起来像某种电阻图,您尝试在其中绘制出最小电阻的路径。如果您颠倒了要求,即最大电阻的路径,则可能会使用它来生成一组,从一开始就产生最大的差值,直到结束时才开始返回更接近其他值的值。 例如,这是一种也许可以做您想要的事情的方法。 这似乎会生成一个列表,该列表以与所有其他颜色相距最远的颜色开始,然后向下移动,列表末尾的颜色通常将更接近于其他颜色。 编辑:阅读您对我关于空间细分的第一篇文章的回复并不完全符合上面的描述,因为接近其他颜色的颜色将落在列表的底部,但是假设您有一个一簇颜色,至少该簇中的一种颜色将位于列表的开头,并且通常是与所有其他颜色相距最远的颜色。如果这样的话。 您可以根据与任何索引颜色之间的最小距离的最大距离对候选颜色进行排序。 使用欧几里得颜色距离:
尽管您可以将其替换为所需的任何东西。它只需要一个色距例程。
此贪婪算法应会给您带来良好的效果。 如果我正确理解了这个问题,那么您希望获得M种颜色的子集,并且在给定一些距离函数d的情况下,颜色之间的平均距离最高。 通过另一种方式,将最初的N种颜色视为一个连接所有颜色的大型无向图,您希望找到访问任何M个节点的最长路径。 恐怕我无法解决NP完全图的问题,但是您可以尝试运行简单的物理模拟: 它远非高效,但对于较小的M来说可能已经足够高效了,并且将提供接近最佳的结果。 如果您的色距函数很简单,则可能会有更多确定性的方式来生成最佳子集。 您可以将它们拆分为RGB HEX格式,以便可以将R与具有不同颜色的R \\(与G和B相同)进行比较。 与HTML 相同的格式
因此,您唯一需要决定的就是颜色要多近,以及将这些段视为不同的可接受差异。 您是说要从一组N种颜色中选择M种颜色,其中M 对此有一些量化算法,例如ImageMagic使用的"自适应空间细分"算法。 这些算法通常不仅从源空间中选择现有颜色,而且还会在目标空间中创建与源颜色最相似的新颜色。举一个简化的例子,如果原始图像中有3种颜色,其中两种颜色是红色(强度或蓝调等),而第三种颜色是蓝色,并且需要减少为两种颜色,则目标图像可能是红色。这是原始图像中红色和蓝色的平均值的某种平均值。 如果您还需要其他东西,那么我不明白您的问题:) |
最新内容
相关内容
python怎么调用类方法
python怎么调用类方法,培训,方法,实例,静态,定义,参数,属性,对象,关键字,以上,python中的类用来描述具有相同的属性和方法的对象的集合。它定python判断字符串是否为小数的方法
python判断字符串是否为小数的方法,培训,代码,合法,小数点,小数,整数,字符串,方法,右边,左边,python想判断一个字符串是不是一个合法的小数,但python可以继承父类方法吗
python可以继承父类方法吗,培训,代码,名字,方法,动物,属性,编译器,这样的话,定义,里面,python继承,调用父类属性方法在python里面,继承一个类python函数的高级使用方法
python函数的高级使用方法,代码,函数,灵活,数据,培训,时间,定义,程序,赋值,变量,Python的函数是“一等公民”,因此函数本身也是一个对象,函数既python私有方法是什么
python私有方法是什么,培训,公开,代码,方法,属性,变量,函数,前面,成员,法名,Python默认的成员函数和成员变量都是公开的,Python私有属性和方法python字符串连接的方法有哪些
python字符串连接的方法有哪些,培训,字符串,基础,方式,两个,变量,函数,空白,语言,功能,python中有很多字符串连接方式,下面总结一下:最原始的字python如何实现对Python中列表的排
python如何实现对Python中列表的排序?,培训,工作,实例,方法,关键字,对象,函数,以上,列表,表达式,对List进行排序,Python提供了两个方法方法1.python字符串拼接有哪些方法?
python字符串拼接有哪些方法?,培训,一致,字符串,位置,异常,结果,方式,方法,字符,参数,python拼接字符串一般有以下几种方法:①直接通过(+)操作python创建多线程的两种方法
python创建多线程的两种方法,培训,第一,代码,业务,方法,线程,函数,任务,演示,实例,当我们使用python编程的过程中需要多个输出的任务的话,为了python实例方法的使用注意
python实例方法的使用注意,培训,实例,方法,对象,定义,以上,参数,更多,内容,python实例方法的使用注意1、实例方法是从属于实例对象的方法,定python类方法的注意点
python类方法的注意点,培训,国际,方法,实例,对象,属性,参数,法名,性别,上面,python类方法的注意点1、@classmethod必须在方法上面。2、第一个pythonTKinter的绑定方法
pythonTKinter的绑定方法,培训,方法,全局,实例,参数,事件,快捷键,以上,操作,更多,python中TKinter的绑定方法1、bind_all全局绑定,默认是全局