原始图片序列

景深堆叠图

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.jpg
  • focus-stack --verbose --output=stacked.png IMG*.JPG:
    合并所有图像,提供详细的步骤打印输出并写入输出 stacked.png
  • focus-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。

Last modification:January 19, 2026
如果觉得我的文章对你有用,请随意赞赏