我想过编写一个Alpha Compositing
的软件。我不想从互联网上准备好代码,所以我试图找到研究论文和其他来源来理解数学算法,并开始实施。
但是,我很快就迷路了。所以我的问题是,
我应如何处理这些文件以从中提取必要的细节,以便根据它编写算法。任何特定的步骤都能很好地运作?
期望的答案:
注意:此问题不仅限于Alpha Compositing,因此更通用的方法会有所帮助。我已标记Java
和C++
,因为这是我实现图像处理所需的语言。
到目前为止我做了什么?
这不是一个家庭作业问题,但当然更好地说出我所知道的。我已经阅读了Alpha合成的维基,以及几乎没有密切相关的图像合成研究论文。但是,我坚持下一步,从理解到实施。
答案 0 :(得分:4)
我建议用铅笔和纸阅读复杂公式的文章。完成数学工作,直到你掌握好它。然后,您将准备好编码。
首先确定在某些图像数据上执行算法所需的步骤。包括将图像本身加载到内存中的所有步骤,直到您可能需要执行的复杂计算。然后将列表结构化为伪代码。一旦你有了它,它应该很容易编码。
答案 1 :(得分:4)
写伪代码。理想情况下,研究论文的作者会这样做,但往往他们没有。为一些简单的语言(如Matlab或Python)编写伪代码,并且根据伪代码编写一个有效的实现。
如果您理解算法的某些部分而不理解其他部分,那么将您的伪代码实现为您理解的部分的真实代码,并为您不理解的部分留下评论。
The Pragmatic Programmer关于“Tracer Bullets”的部分基本上描述了这个想法。您希望快速破解将数据转换为某种形式的输出的内容,然后迭代代码的主体,使其慢慢类似于您尝试生成的算法。
我的回答有点含糊不清。对于像这样的东西,没有灵丹妙药。
答案 2 :(得分:3)
您是否实施过任何图像处理算法?也许从一些稍微简单的东西开始,比如去饱和/颜色增强,反转(从一边到另一边),旋转,缩放和通过面具合成图像。
一旦你想到这些,你将处于一个很好的位置来做一个alpha复合。
我同意学术论文似乎不遗余力地使实施细节变得模糊不清。我发现开始执行实际实现需要对所写内容进行大量简化。作为一般的匆忙,作家过度参数化每个方面。要构建有用,可靠的软件,有必要从实际工作的简单开始,以便它可以成为添加功能的框架。要做到这一点,有必要抛弃80-90%的学术普遍性。通常可以使用大量的符号常量来完成很多工作,但放弃普遍性(例如四维和五维图像)并不会在实践中失去任何东西。
答案 3 :(得分:1)
我的建议是首先使用Matlab编写算法,以确保您了解所有步骤,然后尝试使用C ++或java实现。
答案 4 :(得分:1)
为了添加上面的好建议,尝试用简单的模块(面向对象的样式)编写伪代码,因此必须深入了解代码的每个部分,同时不要失去大局。以程序的方式编写所有内容都是一个良好的开端,但随着代码的增长,可能会变得很难跟上你想要做的所有事情。
答案 5 :(得分:1)
此example引用了有关该主题的开创性作品之一:Compositing Digital Images作者:Porter&达夫。类java.awt.AlphaComposite
实现了相同的规则。