聚焦堆栈图像的工具。
focus-stack的Python项目详细描述
聚焦叠加
Python中的焦点堆叠
我写了focusstack
,一个简单的图像聚焦叠加工具,用我的显微镜创建有趣的图像。在
逐Wikipedia:聚焦叠加是一种数字图像处理技术,它将在不同焦距下拍摄的多幅图像组合起来,得到的图像具有比任何单个源图像更大的景深(DOF)。在
请参阅below以获取对算法的详细解释。在
《思维时间》有一个很好的解释视频on Youtube。在
安装
focusstack
可以通过运行pip install focusstack
来安装。它需要python3.6.0+、OpenCV<;3.4.2和numpy。在
您可以使用opencv4.X+,但是由于SIFT算法是专有的,所以必须在源代码中将use_sift
设置为False。在
或者,您可以从源安装:
git clone https://github.com/momonala/focus-stack
cd focus-stack
pip install -e .
使用
^{pr2}$选项:
$focusstack --help usage: Tool to focus stack a list of images. [-h] -i INPUT -o OUTPUT [-d DEBUG][-g GAUSSIAN][-l LAPLACIAN] optional arguments: -h, --help show this help message and exit -i INPUT, --input INPUT directory of images to focus stack -o OUTPUT, --output OUTPUT Name of output image. -d DEBUG, --debug DEBUG Debug mode. -g GAUSSIAN, --gaussian GAUSSIAN Size of gaussian blur kernel. -l LAPLACIAN, --laplacian LAPLACIAN Size of laplacian gradient kernel.
focusstack
是一个性能良好的Unix风格的命令行工具:
- 在
如果没有消息来源传给它,它什么也不做
在 - 在
它将从指定的输入目录中读取图像,并写入相对于当前工作目录的输出图像。在
在 除非发生内部错误,否则退出,代码为0。在
在
工作原理:
聚焦叠加算法的工作原理是从一组图像中优先选择焦点最集中的区域,并将它们组合成输出图像。在
用户必须首先创建一组具有不同聚焦平面的图像,所有这些图像都是从固定的有利位置拍摄的。软件将读取所有的图像,并将它们对齐,因为改变焦距会给图像添加一些扭曲或perspective distortion。该工具使用OpenCV中的SIFT算法来查找所有图像中相对于集合中第一个图像的关键点。计算一个单应矩阵并用于扭曲图像并对齐这些关键点(理论上是整个图像)。在
下一步,我们必须找出每幅图像的哪个部分最为集中。这是用拉普拉斯梯度来完成的。拉普拉斯梯度可以看作是图像的二阶导数(其中Sobel梯度是一阶)。它是对像素变化程度的度量。您可以查看Khan Academy's视频,或PyImageSearch's blog来获取此概念的插管。在
所有的图像都是模糊的,使用高斯模糊滤波器,使一些估计更容易。计算了拉普拉斯梯度。取梯度绝对值的最大值,并将其用作聚焦区域的代理。在
所有的图像都是堆叠的,对于图像中的每个x,y位置,堆栈的最大值被发送到输出图像。我们有了它,一个聚焦叠加图像!在
许可证
麻省理工学院
此代码和算法的灵感来自以下来源:
- 项目
标签: