需要对用于迭代颜色量化的调色板数据结构的建议;特别是KD堆的任何经验?
Posted
技术标签:
【中文标题】需要对用于迭代颜色量化的调色板数据结构的建议;特别是KD堆的任何经验?【英文标题】:Need a suggestion for a color palette data structure for iterative color quantization; in particular, any experiences with KD heaps? 【发布时间】:2019-08-18 05:57:17 【问题描述】:我正在实现在迭代中起作用的颜色量化。在每次迭代过程中,都会建立一个新的调色板,然后多次搜索该调色板以寻找最匹配给定 RGB 三元组的调色板条目。
另外,我需要能够以类似数组的方式访问调色板,以便稍后构建最终图像。我的直接想法是只包含对数组条目的引用的 KD 树。但是,重建这样一个稀疏的数据结构听起来并不理想,至少以幼稚的方式,因为它意味着一直(重新)为 KD 节点分配空间。
我想更好的方法是永远不要真正释放节点,而只是将它们标记为未使用。这将允许更快的重建,因为只有在需要更多节点时才会发生重新分配。
不过,本质上在类数组结构中工作的东西会更好,因为它对 CPU 缓存更友好。所以我偶然发现了KD堆。 Here is a brief Wikipedia article 和 here is the paper about it。基本思想似乎是堆属性的扩展,这将使它在数组中工作。所以,这听起来很理想,因为堆通常是用数组实现的。但是我从来没有使用过 KD 堆,所以我不确定是否有问题。
那么,您会使用 KD 堆来找到调色板中最接近的匹配颜色吗?如果不是,您会推荐哪些其他可以快速高效构建的数据结构?
(“构造”在这里意味着整个调色板数据结构是用所有颜色值一次构造的;它们不会被一一添加。)
【问题讨论】:
你到底需要这个做什么?增量调色板描述听起来像 XY 问题。看看这个:Effective gif/image color quantization? 它也像迭代一样,但不需要奇怪的结构来存储以前的调色板...... 如果我必须按照你说的那样做,我会使用一个 K-D 树打包到一个数组中,这样我就不必存储任何指针......但是你确定有新旧版本调色板之间的关系不会让您更有效地重新分配颜色吗? 【参考方案1】:原来我想的太复杂了。此外,其他地方存在一个严重影响性能的错误。封装在数组中的 K-D 树工作正常,并且修复了其他错误,一切正常。
【讨论】:
以上是关于需要对用于迭代颜色量化的调色板数据结构的建议;特别是KD堆的任何经验?的主要内容,如果未能解决你的问题,请参考以下文章