Hugin软件脚本概述

全景脚本概述
这是一个简短的文档,描述了在非gui环境中处理全景图的各种开源工具和技术。这些例子都是基于Linux的经验,但大多数应该在OS X或Windows上工作,最多只需要做一点修改。
这篇文档对于理解hugin本身“底层”发生了什么也很有用,建议任何想要使用hugin源代码的人阅读。

目录

1 你为什么要那样做?
2 panotools“脚本”
3 简单的命令行拼接
4 在命令行上创建hugin项目
4.1生成项目文件
4.2控制点生成
4.3修剪控制点
4.4优化位置和几何形状
4.5光度参数优化
4.6设置输出选项
4.7类似于Hugin GUI助手的示例工作流程
5 在命令行上拼接hugin项目
5.1重新映射(渲染)图像
5.2混合
6 .用panostart把它们连在一起
7 用于操作项目文件的脚本
8 命令行工具的完整列表
8.1控制点生成
8.2工程文件修改
8.3控制点修剪
8.4优化
8.5渲染
8.6混合
8.7 misc
8.8色差
8.9查询
8.10 tiff文件
8.11输出格式
8.12旧工具
9 有用的图像处理工具

1 你为什么要那样做?

创建和操作全景图显然应该在图形工具中完成。这是真的,但也许你发现你花在操作电脑上的时间比做摄影师的时间还多。这表明出了问题——计算机的存在就是为了完成无聊的工作,而脚本编写是实现这一目标的一种方式。

2 panotools“脚本”

首先在Helmut Dersch的全景工具中使用的文件格式通常被称为“脚本”,但“PanoTools”脚本实际上是描述“全景拼接项目”的数据文件。

虽然这些原始的PanoTools今天很少使用,但文件格式仍然存在,并且有几个变体被PTGui, PTAssembler, hugin和相关工具用作项目文件。这些文件都是简单的纯文本文件,有时用文本编辑器直接修改它们是很有用的——接下来我们将介绍通过“编程”类脚本来操作它们的各种方法。

3 简单的命令行拼接

让我们从一个基本但常见的用例开始:拥有高质量全景三脚架头的摄影师每次都可以复制相同的照片集,在这种情况下,没有必要为每个全景创建一个新的拼接项目,使用单个项目作为模板就足够了。

本例采用一个预先存在的项目template.pto,由三张照片创建。它使用nona进行重新映射,并使用enblend将重新映射的照片混合成完成的TIFF图像:

nona -o out -m TIFF_m template.pto DSC_1234.JPG DSC_1235.JPG DSC_1236.JPG
Enblend -o finished.tif out0000.tif out0001.tif out0002.tif
第一个nona命令创建三个重新映射的TIFF图像,分别为out0000.tif、out0001.tif等。输入图像列表可以替换为任何一组相同大小的照片。第二个enblend命令使用这些TIFF文件作为输入,并将它们合并到一个名为finished.tif的文件中。template.pto

如果使用内部融合器,则命令简化为

nona -o out -m TIFF template.pto DSC_1234.JPG DSC_1235.JPG DSC_1236.JPG

4 在命令行上创建hugin项目

整个全景创建过程可以在命令行上执行,因此可以编写脚本,这样做涉及一系列类似于GUI工具中的工作流的步骤。

4.1生成项目文件

大多数hugin工具都将pto文件作为输入和输出。第一步是创建这个pto文件。为此,请使用pto_gen。
pto_gen *.jpg
将当前目录下的所有JPG文件放入一个具有默认名称的项目文件中。您还可以指定单个图像和您自己的项目名称。
pto_gen -o project.pto image1.jpg image2.jpg image3.jpg
您可以为项目指定更多选项(参见https://wiki.panotools.org/Pto_gen了解详细信息)。

4.2控制点生成

有很多工具可以从照片组中生成控制点,比如cpfind。以下是一个使用cpfind的示例:

cpfind --multirow -o project.pto project.pto
提示:其他控制点生成器,如autopano-sift、autopano-sift-c、panomatic和match-n-shift,采用图像列表而不是项目。在这种情况下,pto生成和控制点生成是一步完成的。以下是autopano-sift-c的示例:

autopano-sift-c --projection 0,50 project.pto DSC_1234.JPG DSC_1235.JPG DSC_1236.JPG
这将创建一个带有控制点(如果有)的.pto项目,将这三张照片链接起来,请注意,必须指定输入照片的投影格式(f0,直线)和大致的水平视角(v50,50度)。

4.3 修剪控制点

这仍然不是一幅完整的全景图,至少还需要优化相机位置并呈现输出结果。

您可以直接优化此项目文件,但这可能会有点碰运气。首先,最好清理控制点。目前有两个用于清理控制点的有用工具:celeste从天空区域中删除点,而cpclean删除错误距离较大的点,首先是celeste_standalone:

celeste_standalone -i project.pto -o project.pto
然后是cpclean:

cpclean -o project.pto project.pto
请注意,在这两种情况下,我们都会用清理过的输出覆盖输入的project.pto文件。如果需要,您可以创建中间临时文件并保留每个步骤,以便在需要时回溯。

其他控制点清理程序包括ptscluster和ptoclean。cpclean在很大程度上已经取代了ptoclean,但你仍然可以这样运行它:

ptoclean -v --output project.pto project.pto

4.4 优化位置和几何形状

到目前为止,项目文件仅包含图像列表和控制点,图像尚未对齐,您可以使用autooptimiser工具通过优化几何参数来完成此操作:

autooptimiser -a -l -s -o project.pto project.pto
现在,如果不需要光度优化,您可以直接跳过并呈现输出。

通过添加-m开关也可以完成光度优化。因此,输出项目在一次运行中针对位置、几何和光度参数进行了优化:

autooptimiser -a -l -s -m -o project.pto project.pto
如果您需要对优化进行更精细的控制,请使用pto_var设置要优化的参数,然后使用-n开关运行autooptimiser:

pto_var --opt y,p,r -o project.pto project.pto
autooptimiser -n -o project.pto project.pto
(PToptimizer是另一种几何优化器)

4.5光度参数优化

照片具有光度曝光变量,这些变量可以以与对齐位置非常相似的方式进行优化。这样做可以消除照片之间的亮度、白平衡和渐晕差异,从而实现更好的融合或允许创建HDR图像。

要像Hugin的助手一样进行自动光度优化,请使用带-m开关的autooptimiser运行:

autooptimiser -m -o project.pto project.pto
为了完全手动控制光度参数,请使用vig_optimize。该程序对光度参数的作用与autooptimiser对几何参数的作用相当。您需要在.pto项目中指示哪些参数是“变量”。对于此任务,您可以编辑.pto文件或使用诸如pto_var或ptovariable之类的工具:

ptovariable --vignetting --response --exposure project.pto
vig_optimize -o project.pto project.pto
pto_var --opt Vb,Vx,Ra,EeV -o project.pto project.pto
vig_optimize -o project.pto project.pto

4.6设置输出选项

为了设置输出选项(如在拼接选项卡上),请使用 pano_modify:

pano_modify -o project.pto --center --straighten --canvas=AUTO --crop=AUTO project.pto
此命令将拉直全景图,使其在画布上居中,计算最佳大小,并计算最佳输出区域。

4.7类似于Hugin GUI助手的示例工作流程

Hugins助手也可以从命令行使用

hugin_executor --assistant project.pto
或者,您也可以将任务放入PTBatcherGUI队列中

PTBatcherGUI --assistant project.pto
下面描述了助手的各个步骤。我们将对所有单个步骤使用相同的项目文件。我们总是覆盖相同的项目文件。您也可以为每个步骤使用另一个文件名。

1)生成 pto 文件

pto_gen -o project.pto *.jpg
2)使用 cpfind 查找控制点,使用 celeste 忽略云彩

cpfind -o project.pto --multirow --celeste project.pto
3)控制点清理

cpclean -o project.pto project.pto
4)查找垂直线

linefind -o project.pto project.pto
5)优化位置,进行光度优化,拉直全景图并选择合适的输出投影

autooptimiser -a -m -l -s -o project.pto project.pto
6)计算最佳裁剪和最佳大小

pano_modify --canvas=AUTO --crop=AUTO -o project.pto project.pto
7)现在创建输出

hugin_executor --stitching --prefix=prefix project.pto

5 在命令行上拼接hugin项目

hugin_executor的拼接选项可以拆分为单独的命令行。

最简单的例子是重新映射和混合。

5.1重新映射(渲染)图像

用于重新映射和扭曲照片到最终全景帧的hugin工具是nona,它使用。pto项目文件作为一组说明:
nona -m TIFF_m -o project project.pto
这个nona命令为每个输入照片创建一个重新映射的TIFF图像,这些将被命名为project00000 .tif, project0001.tif, project0002.tif等…

(PTblender是nona的替代渲染器)

5.2混合

Nona可以对重新映射的图像进行基本的组装,但是一个更好的工具是enblend,输入图像,它会选择缝线并混合重叠区域:
enblend -o project.tif project0000.tif project0001.tif project0002.tif …
最后,这将生成拼接全景图:project.tif

6 .用panostart把它们连在一起

.pto.mk Makefile 有助于在流程结束时进行拼接,但无法在开始阶段提供帮助,例如:确定哪些照片属于哪个全景图、生成控制点、修剪和优化。

panostart 是一个能够完成所有操作的原型工具。给定文件夹中的照片列表,它会通过比较EXIF时间戳来识别可能的全景图,并写入一个元Makefile,其中包含:使用match-n-shift生成.pto项目的规则、使用pto2mk生成相应的.pto.mk Makefile的规则、使用make拼接项目的规则,以及一些创建有用的可分发输出的其他规则。

处理由自动曝光模式下的便携式点射式相机拍摄的照片的文件夹的典型panostart命令可能如下所示:

panostart --output Makefile --projection 0 --fov 50 --nostacks --loquacious *.JPG

处理此Makefile很简单:

make

一些生成的全景图将存在位置、裁剪和拼接错误。通过在hugin或其他工具中编辑相关的.pto项目来修复这些错误,当您在命令行上再次键入make时,只有那些已更改的项目才会被重新拼接。

这种方式的另一个优点是可重复性:删除所有(巨大的)TIFF输出全景图,您需要永久保留的只是照片、元Makefile和相关的.pto项目。如果您将来需要重新创建TIFF全景图,只需键入make。如果您知道所需的TIFF文件的名称,只需键入’make project.tif’,系统将只处理一个全景图

7用于操作项目文件的脚本

这个名字是一个历史性的错误,Panotools::Script是一个用于处理hugin .pto项目的perl库,尽管它可以在将来扩展以涵盖任何相关的文件格式。本文档中描述的许多命令行工具都是使用此库编写的。

这是一个微不足道的脚本,它所做的就是打开一个.pto项目然后保存,它还将输出的(“p”全景行)视角重置为360度(v360),投影格式设置为等距矩形(f2),输出像素大小设置为4096x2048像素(w4096 h2048):

#!/usr/bin/perl
use Panotools::Script;
my pto=newPanotools::Script;pto->Read (ARGV[0]);pto->Panorama->Set (v => 360, f => 2, w => 4096, h => 2048);
pto−>Write(ARGV[0]);

这是一个稍微复杂一点的脚本,它遍历输入图像并增加白平衡,使全景图略微“变暖”:

#!/usr/bin/perl
use Panotools::Script;
my pto=newPanotools::Script;pto->Read (ARGV[0]);formyimage (@{pto->Image}) { my Er_new = image->{Er} * 100 / 95; # 红色值 my Eb_new = image->{Eb} * 95 / 100; # 蓝色值 image->Set (Er => Er
n

ew,Eb=>Eb_new);
}
pto−>Write(ARGV[0]);

8命令行工具的完整列表

8.1控制点生成

cpfind - Hugin自带的控制点检测器
autopano-sift-c - 一体化的关键点生成器和匹配器
match-n-shift - align_image_stack和autopano-sift-c的一体化包装器
panomatic - autopano-sift-c的一体化替代工具
align_image_stack - 为堆叠的照片生成控制点
ptoanchor - 向Hugin项目中添加控制点
ptochain - 在连续的照片之间向Hugin项目中添加控制点
ptobind - 在Hugin项目中连接相关联照片的两端
ptofill - 在可能重叠的照片之间向Hugin项目中添加控制点
generatekeys - 关键点生成器
autopano - 关键点匹配器,autopano-sift-c的一部分,请不要与autopano混淆

8.2工程文件修改

pto_gen - 从图像文件生成新的pto项目
match-n-shift - (见上文)默认用法是从EXIF数据初始化新的.pto项目
ptoset - 更改全局参数和项目选项
ptovariable - 设置典型的优化变量
pto_var - 操作图像变量,也可以设置优化变量
pto_lensstack - 操作镜头和堆栈
pto_mask - 向项目文件添加蒙版
pto_template - 将模板应用于项目文件
ptsed - 设置任何项目参数,将.pto转换为PanoTools格式
ptosort - 对控制点或图像进行排序,删除重复的控制点
ptopath - 移除项目文件中的文件路径
transform-pano - 对.pto项目进行滚动、俯仰和偏航旋转
ptocentre - 旋转项目,将图像置于全景中心
pano_modify - 更改项目文件的输出参数
ptomerge - 合并两个或更多项目
pto_merge - 合并两个或更多的Hugin项目文件(这与上面的ptomerge是不同的工具)
ptosplit - 从项目中提取图像子集到新的项目中

8.3控制点修剪

ptscluster - 根据距离和位置清理“不良”控制点
celeste_standalone - 清理天空控制点
ptoclean - 根据标准偏差错误清理“不良”控制点
cpclean - ptoclean的改进版本,是hugin项目的一部分

8.4优化

autooptimiser - 优化.pto项目的几何结构
PToptimizer - 优化PanoTools格式项目的几何结构
vig_optimize - 优化.pto项目的光度参数

8.5渲染

nona - Hugin默认的渲染引擎
nona-mask - 使用外部位图蒙版的nona包装器
PTmender - 渲染PanoTools格式的项目
PTAInterpolate - 从PanoTools项目中创建中间图像

8.6混合

enblend - 使用多分辨率样条曲线合并部分重叠的图像
verdandi - 使用分水岭算法合并部分重叠的图像
enfuse - 使用曝光融合合并重叠的图像
PTroller - 无缝合并部分重叠的图像
PTmasker - 为PTroller输入计算拼接蒙版
enblend-mask - 使用外部位图蒙版的enblend包装器
enfuse-mask - 使用外部位图蒙版的enfuse包装器
deghosting_mask - 创建用于去除图像中重影的蒙版
hugin_hdrmerge - 合并括号内的图像以生成HDR
enblend-svg - 通过SVG文件指定输入图像的enblend包装器
process-masks - 允许在enblend的外部蒙版中使用“正向”蒙版
tif2svg - 将多个TIFF图像组合成SVG文件,供enblend-svg使用
PTblender - 校正重叠图像的颜色和亮度

8.7 misc

panostart - 通过Makefile实现全景图制作一体化工作流程
gigastart - 多行全景图组装一体化
hugin_executor - 从命令行拼接项目或运行助手
gigatile - 创建一个Makefile,用于将项目拼接成多分辨率瓦片
ptodummy - 生成缺失的输入照片以调试.pto项目
calibrate_lens - 使用直线检测自动校准镜头
pafextract - 使用panoglview作为zenith和nadir 编辑器的工具

8.8色差

fulla - 校正镜头失真和色差
tca_correct - 计算照片中的色差

8.9查询

ptograph - 绘制项目的无向图
ptoget - 查询任何项目参数
ptoinfo - 生成项目文件报告
PTinfo - 显示panotools生成的TIFF文件的信息
panoinfo - 显示已安装的libpano13库的信息
pano_trafo - 在图像和全景坐标之间进行转换(反之亦然

8.10 tiff文件

PTtiff2psd - 将多个TIFF图像合并到多层PSD文件中
PTtiffdump - 比较两个TIFF文件
PTcrop - 移除TIFF文件中不需要的空白区域,并用偏移量替换
PTuncrop - 用空白像素替换TIFF文件中的偏移量

8.11输出格式

qtvr2img - 从立方QTVR中提取六个立方体面
cubic2erect - 将六个立方体面渲染为单个等距矩形图像
qtvr2erect - 将立方QTVR渲染为单个等距矩形图像
jpeg2qtvr - 将六个JPEG立方体面组装成立方QTVR
erect2qtvr - 将单个等距矩形图像渲染为立方QTVR
erect2cubic - 创建一个.pto项目,用于从等距矩形图像中提取立方体面
erect2planet - 创建一个.pto项目,用于从等距矩形图像中提取’little planet’
erect2mercator - 创建一个.pto项目,用于从等距矩形图像中提取墨卡托视图

8.12旧工具

Helmut Dersch的PTOptimizer和PTStitcher是最初的命令行工具。 这些工具现在已经不再推荐使用,因为它们需要较旧、错误较多的libpano12库版本,它们是闭源的,因此无法在现代系统(如OS X或64位Linux)上运行,并且与现代替代品(如autooptimiser和nona)相比功能不足。

9 有用的图像处理工具

ImageMagick - 用于转换、处理和调整图像大小的许多实用程序
GraphicsMagick - ImageMagick的一个分支,具有许多改进
libtiff - 附带有用的工具,例如用于连接和重新压缩的tiffcp,以及用于添加ICC颜色配置的tifficc
exiftool - 用于读取、设置和复制EXIF数据的全功能工具
exiv2 - EXIF操作,对于根据EXIF日期设置文件修改日期非常有用
jpegtran - JPEG图像的无损旋转
ufraw-batch - 命令行RAW处理
dcraw - 命令行RAW处理

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值