8

我想编写自己的焦点堆叠软件,但无法找到任何算法的合适解释来提取堆栈中每个图像的焦点部分。

对于那些不熟悉焦点堆叠的人,这篇维基百科文章很好地解释了这个想法。

谁能指出我寻找算法的正确方向?甚至一些要搜索的关键词也会有所帮助。

4

1 回答 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. 取高斯结果的拉普拉斯算子的绝对值。这将根据内核的大小和强度来量化边缘的强度。

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

这是我在 MATLAB 中创建的一个示例:

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

您可以随意使用它。它将创建一个名为 Outsharp.bmp 的文件,这就是您所追求的。

为了更好地输出图像,您可以: - 补偿图像之间亮度级别的差异(即直方图匹配或简单的级别调整) - 创建自定义算法以拒绝图像噪声 - 在生成堆栈后手动调整堆栈 - 应用高斯模糊(确保将结果除以 16)在焦点图上,以便更好地合并单个图像

祝你好运!

于 2014-05-16T04:56:04.513 回答