我想编写自己的焦点堆叠软件,但未能找到任何算法的合适解释来提取堆栈中每个图像的对焦部分。
对于那些不熟悉焦点堆叠的人,this Wikipedia article很好地解释了这个想法。
谁能指出我寻找算法的正确方向?即使搜索一些关键字也会有所帮助。
最佳答案
我知道这已经有一年多了,但对于任何有兴趣的人......
我在机器视觉方面有相当多的经验,这就是我的做法:
- 将每张图片加载到内存中
对其中一个 channel (可能是绿色)上的每个图像执行高斯模糊:
最简单的高斯核是:
1 2 1
2 4 2
1 2 1
想法是遍历每个像素并查看紧邻的像素。您正在循环的像素乘以 4,相邻像素乘以与上面的内核对应的任何值。
您可以使用以下等式制作更大的高斯核:
exp(-(((x*x)/2/c/c+(y*y)/2/c/c)))
其中 c 是模糊的强度
对每个高斯模糊图像执行拉普拉斯边缘检测核,但不应用阈值
最简单的拉普拉斯算子是:
-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)
取高斯结果的拉普拉斯算子的绝对值。这将根据内核的大小和强度量化边的强度。
现在创建一个空白图像,遍历每个像素并找到 LoG 中最强的边缘(即图像堆栈中的最高值)并从相应图像中获取该像素的 RGB 值。
这是我在 MATLAB 中创建的示例:
http://www.magiclantern.fm/forum/index.php?topic=11886.0
您可以随意使用它来做任何您喜欢的事情。它将创建一个名为 Outsharp.bmp 的文件,这就是您想要的。
为了改善您的输出图像,您可以: - 补偿图像之间亮度级别的差异(即直方图匹配或简单级别调整) - 创建自定义算法以拒绝图像噪声 - 生成后手动调整堆栈 - 在焦点图上应用高斯模糊(一定要将结果除以 16),以便更好地合并单个图像
祝你好运!
关于algorithm - 有哪些常见的焦点堆叠算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911783/