原始图片序列:
景深堆叠图:

focus-stack 库已经重新编译和安装在本 ubuntu 环境中,只需要在 bash 命令行中执行如下指令即可进行景深堆叠:
/focus-stack/examples/depthmap$ focus-stack pcb_*.JPG会在当前路径下生成 output.jpg 文件,即为合成图。
重新编译和安装
- make
- sudo make install
focus-stack$ git clone https://github.com/PetteriAimonen/focus-stack.git
focus-stack$ cd focus-stack/
focus-stack/focus-stack$ ls
debian Dockerfile docs examples LICENSE.md Makefile Makefile.windows packaging README.md src
/focus-stack$ make
g++ -O2 -g3 -ggdb -Wall -Wextra -Wno-sign-compare -I/usr/local/include/opencv4 --std=c++14 -DGIT_VERSION=\"1.3-25-gc62438e\"
....
which ronn && make update_docs || true
/focus-stack$sudo make install概要(SYNOPSIS )
focus-stack [options ...] file1.jpg file2.jpg ...
描述(DESCRIPTION)
focus-stack 拍摄一组在不同对焦设置下拍摄的照片,并将它们组合成一张,为每个像素位置选择最清晰的源图像。
这通常称为扩展景深,或焦点堆叠。典型的用途是显微镜摄影,其中很难获得足够大的景深来覆盖整个主体。
通常使用默认设置可以获得良好的结果,但可以使用以下选项:
输出文件选项(Output file options)
--output=output.jpg:
设置输出文件名。如果文件已存在,它将被覆盖。格式由文件扩展名决定。OpenCV 目前支持的格式是 .bmp, .jpg, .jp2, .png, .webp, .ppm, .pfm, .sr, .tif,
.exr and .hdr.--depthmap=depthmap.png:生成深度图图像,显示从图像堆栈确定的深度图层。亮度将从 0 缩放到 255,其中 0 是命令行上给出的第一个图像,255 是最后一张图片。
--3dview=3dview.png:
基于深度图,生成三维预览图像。--save-steps:保存处理步骤中的中间图像。这包括对齐图像和颜色重新分配前的最终灰度图像。
--jpgquality=95:设置 JPEG 文件的质量级别(如果要求写入,则为最终文件和中间文件)。该值可以从 0 到 100,默认值为 95。
--nocrop:保留输入图像的全尺寸。默认情况下,图像被裁剪为对输入堆栈中所有图像有效的区域,以避免边缘附近的失真。
图像对齐选项(Image alignment options)
--reference=index:
选取图像索引(从 0 开始)作为对齐参考。堆栈中的图像通常在比例和位置上会有所不同。所有其他图像都会调整大小和旋转以与此图像匹配。这也决定了输出图像的比例,这对于执行测量很重要。默认情况下,堆栈的中间图像用作参考。--global-align:
默认情况下,每个图像都与其相邻图像对齐。这改善了深度堆叠的结果,因为在极端焦点级别下出现模糊会使直接对齐参考不准确。但是,如果作为参数给出的图像顺序不正确,或者其中一些图像的质量较差,则可以指定此选项以对齐直接对着参考图像。--full-resolution-align:
默认情况下,对齐步骤中使用的图像的分辨率限制为 2048x2048 像素。这提高了性能,并且由于在计算梯度时使用了亚像素精度,因此更高的分辨率很少会改善结果。指定此选项将强制使用对齐的全分辨率图像。--no-whitebalance:
该应用程序会尝试自动补偿照片之间的任何白平衡差异。如果相机白平衡手动设置,可以指定此选项以跳过不必要的白平衡调整。--no-contrast:
如果相机曝光是手动控制的,则此选项可用于跳过不必要的曝光补偿。--align-only:
仅对齐映像堆栈并退出。可用于进一步加工使用外部工具对齐的图像。--align-keep-size:
通过不裁剪对齐边框来保持原始图像大小。小波处理边界仍然会被裁剪,这与 --nocrop 不同。
图像合并选项(Image merge options)
--consistency=level:
在 0 到 2 的范围内设置应用于深度图的一致性过滤器级别。更高的级别可以减少输出图像中的伪影和噪点,但也可能导致删除出现在纹理背景上的小对象。默认情况下,使用最高过滤器级别 2。--denoise=level:
设置应用于结果图像的基于小波的降噪滤波器的级别。因为焦点堆叠选择的最大差异来自源图像,它有增加噪点的趋势。去噪步骤将所有小波值减少此量,该量直接对应于像素值。默认值 1.0 可去除 +- 1 像素值的噪声。
深度图生成选项(Depth map generation options)
--depthmap-threshold=level:输入图像中的最小对比度,用于接受作为深度图构建的数据点。范围 0-255,默认值 10。
--depthmap-smooth-xy=level:
在图像平面中对深度图进行平滑处理。值是半径(以像素为单位)。--depthmap-smooth-z=level:
深度图在深度方向上的平滑处理。值以 0-255 个单位为单位。--remove-bg=threshold:
将 Alpha 通道添加到深度图并删除恒定的彩色背景。黑色背景的阈值为正,白色背景的阈值为负。--halo-radius=level:
在深度贴图中减少锐利对比度边缘附近的光晕效果。值是半径(以像素为单位)。--3dviewpoint=x:y:z:zscale:
用于 3D 预览的视点。指定相机的 x、y 和 z 坐标以及深度图值的 z 缩放比例。
性能选项(Performance options)
--threads=count:
设置正在使用的并行线程数。默认情况下,使用检测到的 CPU 内核数加 1 来馈送可能的 GPU 加速器。线程数越少,占用的内存也就越少。--batchsize=count:
设置图像合并的批处理大小。在内存量较大的计算机上,较大的值可能会提供稍好的性能,而较小的值会减少内存使用量。当前默认值为 8,最大值为 32。--no-opencl:
默认情况下,使用基于 OpenCL 的 GPU 加速(如果可用)。可以指定此选项来禁用它。--wait-images=seconds:
如果缺少任何图像文件,请等待给定时间。指定此选项允许在从相机捕获所有图像文件之前开始处理。
信息选项(Information options)
--verbose:
报告每个步骤的开始和结束,以及对齐参数和其他详细信息。--version:
显示应用程序版本号。--opencv-version:
显示 OpenCV 库构建信息。
案例(EXAMPLES)
focus-stack IMG*.JPG:
合并当前目录下的所有图片,并将输出写入output.jpgfocus-stack --verbose --output=stacked.png IMG*.JPG:
合并所有图像,提供详细的步骤打印输出并写入输出stacked.pngfocus-stack --jpgquality=100 IMG*.JPG:
生成具有最高质量级别的 JPEG。
GPU 加速(GPU ACCELERATION)
此应用程序使用 OpenCV 库及其 OpenCL 加速接口。用于加速的 GPU 可以通过环境变量 OPENCV_OPENCL_DEVICE 它采用一个值,例如
Intel:GPU:0 有关详细信息,请参阅 OpenCV 文档。
引用(REFERENCES)
用于组合图像的算法在“复杂”中进行了描述扩展景深的小波:一种融合多通道显微镜图像**,作者:B. Forster、D. Van De Ville、J. Berent、D. Sage 和 M. Unser。