- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在研究图像处理,并决定阅读颜色量化的工作原理,经过一番阅读后,我找到了 Modified Median Cut Quantization算法。
我一直在阅读 C implementation in Leptonica library 的代码并遇到了一些我认为有点奇怪的事情。
现在我想强调的是,我远不是这个领域的专家,我也不是数学头脑,所以我预测这一切都归结为我没有完全理解,而不是算法完全错误。
该算法说明 vbox 应沿最长轴拆分,并且应使用以下逻辑拆分
The largest axis is divided by locating the bin with the median pixel (by population), selecting the longer side, and dividing in the center of that side. We could have simply put the bin with the median pixel in the shorter side, but in the early stages of subdivision, this tends to put low density clusters (that are not considered in the subdivision) in the same vbox as part of a high density cluster that will outvote it in median vbox color, even with future median-based subdivisions. The algorithm used here is particularly important in early subdivisions, and 3is useful for giving visible but low population color clusters their own vbox. This has little effect on the subdivision of high density clusters, which ultimately will have roughly equal population in their vboxes.
为了论证,让我们假设我们有一个正在 split 的 vbox,并且红轴是最大的。在 Leptonica 算法中,第 01297 行的代码似乎执行以下操作
注意:当我说“红色”时,我指的是迭代覆盖的轴上的每个点,实际颜色可能不是红色,但包含一定量的红色
因此,为了便于说明,假设我们在红轴上有 9 个“箱子”,并且它们具有以下人口
4 8 20 16 1 9 12 8 8
在所有红色 bin 的迭代之后,partialsum 数组将包含上述 bin 的以下计数
4 12 32 48 49 58 70 78 86
total 的值为 86
一旦完成,就可以执行实际的中值切割,对于红轴,这是在第 01346 行执行的
它遍历 bin 并检查它们的累计总和。这是从算法描述中抛出我的部分。它会查找第一个值大于 total/2
的 bintotal/2 是否意味着它正在寻找一个值大于平均值而不是中值 ?上述 bin 的中位数为 49
43 或 49 的使用可能会对框的拆分方式产生巨大影响,即使算法随后通过移动到较大框的中心继续进行匹配值所在的一侧..
另一件让我有点困惑的事情是论文指定了应该定位具有中值的 bin,但是没有提到如果有偶数个 bin 如何进行。中位数将是结果(a+b)/2 并且不能保证任何 bin 都包含该人口计数。因此,这就是让我觉得有一些近似值可以忽略不计的原因,因为拆分实际上是如何在所选 bin 的较大侧的中心进行的。
对不起,如果它有点长,但我想尽可能彻底,因为它已经让我发疯了几天;)
最佳答案
在 9-bin 示例中,49 是前 5 个 bin 中的像素数。 49 是 9 个部分和的集合中的中位数,但我们想要 86 个像素的集合中的中位数像素,即 43(或 44),并且它位于第 4 个箱子中。
检查 leptonica 的 colorquant2.c 中修改后的中值切割算法表明,3d 框的实际切割位置不一定与包含中值像素的 bin 相邻。其原因在函数 medianCutApply() 中进行了解释。这是对 Paul Heckbert 原始方法的“修改”之一。另一个重要的修改是根据人口和产品(人口 * 体积)的组合来决定接下来要切割哪个 3d 框,从而允许分割大而稀疏的颜色空间区域。
关于c - 'Modified Median Cut' 的 Leptonica 实现是否根本不使用中位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092341/
我遇到了一个似乎很独特的问题。我的 NSUbiquitousKeyValueStore 在模拟器中的启动之间根本不起作用。也就是说,我什至不是在谈论 iCloud 同步或类似的东西,我无法让它通过下面
首先,我使用的是 WiX 版本 3.5.2519.0,但我也在最新的 3.6 版本上测试了它,结果相同。 我很难确定 PatchFamily 究竟能过滤掉 torch 生成的差异的某些部分。按照手册中
我可以获取要呈现的“帮助主题”标题,但无法获取我定义的任何FIXTURES。 {{#each model}} 中的任何内容都不会渲染。这是我第一次使用 Ember,所以任何东西(字面意义上的任何东
我一直在尝试设置custom ajaxTransports for jQuery在我们的产品的某些场景下缩短某些工作流程。然而,我在让这些传输受到尊重方面取得了零成功(而我有很多工作 custom a
为什么纯无类型 lambda 演算经常被描述为无法使用? 有了合适的函数库,它会不会与任何其他函数式语言大致相同? 最佳答案 速度不是大问题。例如,您可以决定使用教堂数字但优化实现,以便像往常一样表示
我是一名优秀的程序员,十分优秀!