- 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/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!