如何从复杂的研究论文中处理写作算法
Posted
技术标签:
【中文标题】如何从复杂的研究论文中处理写作算法【英文标题】:How to approach writing algorithm from a complex research paper 【发布时间】:2012-08-21 00:00:12 【问题描述】:我想写一个软件来做Alpha Compositing
。我不想从互联网上获取现成的代码,所以我试图找到研究论文和其他资源来理解数学算法,并开始实施。
但是,我很快就迷路了。所以我的问题是,
我应该如何处理这些论文以从中提取必要的细节,以便编写基于它的算法。有哪些具体的步骤效果很好?
想要的答案:
-
阅读...
提取...
了解...
实施 ...
注意:这个问题不仅限于 Alpha 合成,因此更通用的方法会有所帮助。我标记了Java
和C++
,因为那是我实现图像处理所需的语言。
到目前为止我做了什么?
这不是一个家庭作业问题,但当然最好说出我所知道的。我已经阅读了 Alpha compositing 的 wiki,以及一些密切相关的 Image compositing 研究论文。但是,为了从理解到实施,我坚持下一步要采取的措施。
-
Wikipedia
Technical Memo, Image compositing
【问题讨论】:
scholar.google.com
也可能对您有所帮助
我会与发表论文的研究小组核实。通常,关于算法的论文会得到实验实现的支持。他们很可能已经实现了该算法,并将向您提供源代码。
学术作者notoriously bad 表示不提供数据或代码,即使在类似领域的同事礼貌地询问时也是如此。
【参考方案1】:
我建议使用铅笔和纸阅读包含复杂公式的文章。完成所涉及的数学,直到你很好地掌握它。然后,您将准备好编写代码。
首先确定对某些图像数据执行算法所需的步骤。包括从将图像本身加载到内存一直到您可能需要执行的复杂计算的所有步骤。然后将该列表构造成伪代码。一旦你有了它,它应该很容易编码。
【讨论】:
【参考方案2】:编写伪代码。理想情况下,研究论文的作者会这样做,但他们通常不会这样做。为一些简单的语言(如 Matlab 或可能的 Python)编写伪代码,然后根据伪代码编写一个有效的实现。
如果您了解算法的某些部分而不了解其他部分,那么将您的伪代码实现为您了解的部分的真实代码,并为您不了解的地方留下 cmets。
The Pragmatic Programmer 关于“Tracer Bullets”的部分基本上描述了这个想法。您想快速组合一些东西,将您的数据转换为某种形式的输出,然后迭代代码主体以使其慢慢类似于您尝试生成的算法。
我的回答必然有些含糊。这样的事情没有灵丹妙药。
【讨论】:
【参考方案3】:您是否实现了任何图像处理算法?也许从一些更简单的事情开始,比如去饱和度/颜色增强、反转(左右颠倒)、旋转、缩放和通过蒙版合成图像。
一旦你弄清楚了这些,你就可以很好地进行 alpha 合成。
我同意学术论文似乎不遗余力地使实施细节变得混乱和不确定。我发现需要对所写内容进行大量简化才能开始执行实际实现。作者匆忙笼统地概括了各个方面。要构建有用、可靠的软件,有必要从实际工作的简单的东西开始,这样它就可以成为添加功能的框架。要做到这一点,有必要抛弃 80-90% 的学术普遍性。大量的符号常数通常可以做很多事情,但放弃一般性(比如四维和五维图像)在实践中并没有真正失去任何东西。
【讨论】:
【参考方案4】:我的建议是先用 Matlab 编写算法,确保你理解所有步骤,然后尝试用 C++ 或 java 来实现。
【讨论】:
【参考方案5】:要补充上面的好建议,请尝试以简单的模块(面向对象的风格)编写伪代码,因此必须深入了解代码的每个部分,同时不失大局。以程序方式编写所有内容是一个好的开始,但随着代码的增长,您可能会变得难以跟上您正在尝试做的所有事情。
【讨论】:
【参考方案6】:example 引用了关于该主题的开创性作品之一:Compositing Digital Images,作者为 Porter & Duff。 java.awt.AlphaComposite
类实现了相同的规则。
【讨论】:
以上是关于如何从复杂的研究论文中处理写作算法的主要内容,如果未能解决你的问题,请参考以下文章