使用 OpenCV / Emgu CV 进行焦点堆叠

Sim*_*mon 5 .net c# opencv focus emgucv

我有一个 C# (Emgu CV) 应用程序,可以在其中以不同焦距捕获同一场景的多个图像。现在我想创建一个类似于本文中描述的多焦点图像http://blog.patdavid.net/2013/01/focus-stacking-macro-photos-enfuse.html

\n\n

我找不到任何使用 OpenCV 执行此操作的方法。\n我能够使用此代码为我的图像创建清晰度图

\n\n
private Image<Gray, float> GetFocusMask(string imgfile)\n    {\n        var img = new Image<Bgra,byte>(imgfile);\n\n        Image<Gray, byte> imgGray = img.Convert<Gray, byte>();\n        Image<Gray, float> roughSharpness = imgGray.Laplace(5);\n        roughSharpness = roughSharpness.Dilate(2);\n        roughSharpness._SmoothGaussian(3);\n\n        return roughSharpness;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,我现在陷入困境,不知道如何使用此蒙版来计算原始焦点图像集合的单个景深图像。

\n

geo*_*kal 0

我做了类似的事情,使用与拉普拉斯不同的度量,但想法是相同的:

  1. 使用拉普拉斯或类似方法计算每个深度的清晰度分数。

  2. 创建深度图。地图与图像大小相同。每个像素包含该点具有最大清晰度分数的深度索引。

  3. 使用中值滤波器(例如5x5)过滤深度索引。这将减少错误深度值的数量。

  4. 创建合并图像。在每个点,从深度图像中选择与该点的索引相对应的像素。