一些常见的焦点叠加算法有哪些?

9
我希望编写自己的焦点叠加软件,但一直没有找到提取堆栈中每个图像中聚焦部分的任何算法的合适解释。
对于那些不熟悉焦点叠加的人,这篇维基百科文章很好地解释了这个概念。
有人能指点我找算法的方向吗?甚至一些关键词搜索也会有所帮助。

1
看起来有几个开源解决方案。我会从那里开始。 - ElKamina
1
提供这些开源解决方案的命名和链接会很有帮助。 - orangepips
1个回答

17

我知道这篇文章已经发布一年了,但对于任何感兴趣的人...

我在机器视觉方面有相当多的经验,以下是我的做法:

  1. 将每个图像加载到内存中
  2. 在其中一个通道(可能是绿色)上对每个图像执行高斯模糊:

    最简单的高斯核为:

    1 2 1

    2 4 2

    1 2 1

    想法是循环遍历每个像素并查看相邻的像素。正在遍历的像素乘以4,相邻像素乘以与上面的核相对应的任何值。

    您可以使用以下方程式制作更大的高斯核:

    exp(-(((x*x)/2/c/c+(y*y)/2/c/c)))

    其中c是模糊强度

  3. 对每个高斯模糊图像执行拉普拉斯边缘检测核,但不要应用阈值

    最简单的拉普拉斯算子为:

    -1 -1 -1

    -1 8 -1

    -1 -1 -1

    与高斯一样,将核滑动到整个图像上并生成结果。

    这里有一个计算更大核的方程式:

    (-1/pi/c/c/c/c)*(1-(x*x+y*y)/2/c/c)*exp(-(x*x+y*y)/2/c/c)

  4. 取Laplacian of Gaussian结果的绝对值。这将量化边缘相对于内核的大小和强度的强度。

  5. 现在创建一个空白图像,循环遍历每个像素,并查找LoG中最强的边缘(即图像堆栈中的最高值),并从相应的图像中获取该像素的RGB值。

这里是我创建的MATLAB示例:

http://www.magiclantern.fm/forum/index.php?topic=11886.0

你可以自由地将其用于任何你想要的目的。它将创建一个名为Outsharp.bmp的文件,这就是你想要的。
为了更好地输出图像,你可以: - 补偿图像之间亮度级别的差异(即直方图匹配或简单级别调整) - 创建一个自定义算法来拒绝图像噪声 - 生成堆栈后手动调整它 - 对焦点图应用高斯模糊(一定要将结果除以16),以便更好地合并各个图像
祝好运!

1
这个算法的Python OpenCV工作实现是由Charles McGuinness编写的,并放在github上:https://github.com/cmcguinness/focusstack - orangepips
这个方法被认为是频域还是空间域? - john
空间的,因为我没有看到任何FFT或DFT。 - mLstudent33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接