2

我想写一个软件Alpha Compositing。我不想从互联网上拿现成的代码,所以我试图找到研究论文和其他资源来理解数学算法,并开始实施。

但是,我很快就迷路了。所以我的问题是,

我应该如何处理这些论文以从中提取必要的细节以便编写基于它的算法。有什么具体的步骤行得通吗?

期望的答案:

  1. 读 ...
  2. 提炼 ...
  3. 理解 ...
  4. 实施 ...

注意:这个问题不仅限于 Alpha Compositing,因此更通用的方法会有所帮助。我标记了Javaand C++,因为那是我实现图像处理所需的语言。

到目前为止我做了什么?

这不是一个家庭作业问题,但当然最好说出我所知道的。我已经阅读了 Alpha compositing 的 wiki,以及一些密切相关的 Image compositing 研究论文。但是,为了从理解到实施,我坚持下一步要采取的措施。

  1. 维基百科
  2. 技术备忘录,图像合成
4

6 回答 6

4

编写伪代码。理想情况下,研究论文的作者会这样做,但他们通常不会这样做。为一些简单的语言(如 Matlab 或可能的 Python)编写伪代码,然后根据伪代码编写一个有效的实现。

如果您了解算法的某些部分但不了解其他部分,则将您的伪代码实现为您了解的部分的真实代码,并为您不了解的地方留下注释。

The Pragmatic Programmer关于“Tracer Bullets”的部分基本上描述了这个想法。您想快速将一些东西组合在一起,将您的数据转换为某种形式的输出,然后迭代代码主体以使其慢慢类似于您尝试生成的算法。

我的回答必然有些含糊。这样的事情没有灵丹妙药。

于 2012-08-21T00:09:16.157 回答
4

我建议使用铅笔和纸阅读包含复杂公式的文章。完成所涉及的数学,直到你很好地掌握它。然后,您将准备好编写代码。

首先确定对某些图像数据执行算法所需的步骤。包括从将图像本身加载到内存一直到您可能需要执行的复杂计算的所有步骤。然后将该列表构造成伪代码。一旦你有了它,它应该很容易编码。

于 2012-08-21T00:05:37.737 回答
3

您是否实现了任何图像处理算法?也许从一些更简单的东西开始,比如去饱和度/颜色增强、反转(左右颠倒)、旋转、缩放和通过蒙版合成图像。

一旦你弄清楚了这些,你就可以很好地进行 alpha 合成。

我同意学术论文似乎不遗余力地使实施细节变得混乱和不确定。我发现需要对所写内容进行大量简化才能开始执行实际实现。作者匆忙笼统地概括了各个方面。要构建有用、可靠的软件,有必要从实际可行的简单的东西开始,这样它就可以成为添加功能的框架。要做到这一点,有必要抛弃 80-90% 的学术普遍性。通常可以用大量的符号常数做很多事情,但是放弃一般性(比如四维和五维图像)在实践中并没有真正失去任何东西。

于 2012-08-21T00:15:01.693 回答
1

我的建议是首先使用 Matlab 编写算法,以确保您了解所有步骤,然后尝试使用 C++ 或 java 来实现。

于 2012-08-21T00:08:57.157 回答
1

为了补充上面的好建议,试着用简单的模块(面向对象的风格)编写你的伪代码,所以必须对代码的每个部分都有深刻的理解,同时又不失大局。以程序方式编写所有内容是一个好的开始,但随着代码的增长,您可能会变得难以跟上您正在尝试做的所有事情。

于 2012-08-21T00:14:07.140 回答
1

示例引用了有关该主题的开创性作品之一: Porter & Duff 的合成数字图像。该类java.awt.AlphaComposite实现相同的规则。

于 2012-08-21T00:14:12.473 回答