扩展文件名

扩展文件名是OTB的一个有趣功能。有了它们,就可以在OTB应用程序或我们自己的C++应用程序中控制OTB行为的几个方面。从历史上看,这一功能的设计目的是方便地理参考信息的处理。

事实上,有多种方式来定义地理参考信息。例如,可以使用地理变换、地图投影或具有RPC系数的传感器模型。一幅图像可能包含几个这样的元素,例如在“正射”产品中:这是一种仍在传感器几何结构中的产品(传感器模型随图像一起提供),但它也包含可用于快速估计图像本地化的近似地理变换。例如,您的产品可能包含图像的“.TIF”文件,以及包含传感器模型系数的“.RPB”文件和包含地图投影的“.IMD”文件。

这种情况导致了以下问题:在OTB中打开图像时,应该使用哪个地理参考元素。事实上,这取决于用户的要求。对于正射校正应用,必须使用传感器型号。为了指定应该跳过哪些信息,已经开发了用于读取和写入的扩展文件名的语法。

自开发这一功能以来,我们已经将该机制扩展到其他方面。这包括在读卡器部分选择波段或概览,或支持在写入器部分创建GDAL选项。读取器和写入器扩展文件名支持基于相同的语法,只是选项不同。要从扩展文件名机制中获益,应使用以下语法:

Path/Image.ext?&key1=<value1>&key2=<value2>

Note that you’ll probably need to “quote” the filename, especially if calling applications from the bash command line.

读卡器选项

&geom=<path/filename.geom>
  • 包含有效geom文件的文件名
  • 使用指定geom文件的内容,而不是嵌入图像的几何信息
  • 默认情况下为空,如果可用,则使用图像嵌入信息

&sdataidx=<(int)idx>
  • 选择要读取的子数据集
  • 默认情况下为0

&resol=<(int)resolution factor>
  • 选择要读取的JPEG2000亚分辨率图像
  • 默认情况下为0

&bands=r1,r2,...,rn
  • 从输入图像中选择波段子集
  • 该语法的灵感来自于使用BANDS=r1、r2、r3、...、rn的Python索引语法,其中每个ri是可以是:
    • 单个索引(从1开始):
      • 2 意思是第二个乐队
      • -1 意味着最后一支乐队
    • 或一系列乐队:
      • 3: 表示从第三个频段到最后一个频段
      • :-2 表示倒数第二个乐队之前的第一个乐队
      • 2:4 指级别2、3和4
  • 默认情况下为空(从输入图像读取所有波段)

&skipcarto=<(bool)true>
  • 跳过地图信息
  • 清除projectionref,将原点设置为 [0,0] 和间隔到 [1/max(1,r),1/max(1,r)] 哪里 r 是分辨率系数。
  • 保留关键字列表
  • 默认情况下为False

&skipgeom=<(bool)true>
  • 跳过几何信息
  • 清除关键字列表
  • 保留项目参考和原点/间距信息
  • 默认情况下为False。

&skiprpctag=<(bool)true>
  • 跳过读取内部RPC标记(请参见 [sec:TypesofSensorModels] (详情请参阅)
  • 默认情况下为False。

编写器选项

&writegeom=<(bool)false>
  • 激活外部geom文件的写入
  • 默认情况下为True

&writerpctags=<(bool)true>
  • 激活在TIFF文件中写入RPC标记的步骤
  • 默认情况下为False

&gdal:co:<GDALKEY>=<VALUE>
  • 指定GDAL创建选项的步骤
  • 有关GDAL创建选项的信息,请参阅每个驱动程序的专用GDAL文档。例如,您可以找到 here 有关GeoTiff创建选项的信息
  • 默认情况下无

&streaming:type=<VALUE>
  • 激活通过扩展文件名流的配置
  • 覆盖以前的任何流配置
  • 允许配置要执行的流类型
  • 可选值为:
    • 自动:根据从输入文件读取的TileHint自动选择平铺或剥离流模式
    • 平铺:平铺流模式
    • 剥离:剥离流模式
    • 无:显式停用流
  • 默认情况下不设置

&streaming:sizemode=<VALUE>
  • 提供用于选择如何计算流片段大小的选项
  • 可选值为:
    • AUTO:通过评估流水线内存打印从可用内存设置估计大小
    • 高度:通过设置条带或瓷砖的高度来设置大小
    • NbSplits:大小根据给定的拆分数量计算
  • 默认设置为AUTO

&streaming:sizevalue=<VALUE>
  • 计算流片大小的参数
  • 值为:
    • 如果sizemode=AUTO:可用内存(MB)
    • If sizemode=Height:条带或平铺的高度,以像素为单位
    • If sizemode=nbSplits:请求的流剥离数
  • 如果未提供,则将缺省值设置为0,并根据sizemode的不同产生不同的行为(如果设置为Height或nbplits,则停用流;如果设置为AUTO,则从配置或cmake配置文件中获取值)

&box=<startx>:<starty>:<sizex>:<sizey>
  • 输出图像区域的自定义参数
  • 区域必须设置为4个无符号整数(使用的分隔符是冒号‘:’)。值包括:
    • StartX:X上的第一个索引(从0开始)
    • Starty:Y上的第一个索引(从0开始)
    • 大小:沿X方向的大小
    • 大小:沿Y方向的大小
  • 区域的定义遵循与C++中的itk::Region定义相同的约定。区域由两个类定义:itk::Index和itk::Size类。图像中与之关联的区域的原点由索引定义

&bands=r1,r2,...,rn
  • 从输出图像中选择波段子集
  • 该语法的灵感来自于使用BANDS=r1、r2、r3、...、rn的Python索引语法,其中每个ri是一个可以是:
    • 单个索引(从1开始):
      • 2 表示第二个频段
      • -1 意味着最后一支乐队
    • 或一系列乐队:
      • 3: 表示第三个频段,直到最后一个频段
      • :-2 表示倒数第二个之前的第一个频段
      • 2:4 指级别2、3和4
  • 默认情况下为空(从输出图像写入所有频段)

布尔选项的可用语法为:

  • ON、TRUE、True、1可用于设置‘True’布尔值
  • OFF、FALSE、FALSE、0可用于设置‘False’布尔值

&nodata=(double) value / [int:double, int:double ...]
  • 此选项允许用户为所有或选定的频段设置特定的nodata值。Nodata值可以通过两种方式设置:使用简单的标量值或带、值对。OTB将根据指定的nodata值字符串类型选择其中之一。
  • 如果该值是标量(不带band index),则它将仅应用于图像的第一个带区。
  • 如果该值是由“:”分隔的“band index:Value”对,则nodata值仅应用于那些选定的频段。
  • 默认情况下,OTB不会更改任何现有的nodata值。
  • 下面的例子说明了上述几点:
  • 标量值语法:“IMAGE_FILENAME?&nodata=-999”->等于-999的nodata值将分配给所有波段
  • “波段/值对”语法:“IMAGE_FILENAME?&nodata=0:-999,1:255,2:254”->nodata值对应于有值的像素 [-999,255,254]
  • 需要注意的是,nodata编写器选项中的波段编号遵循GDAL约定,从1开始。

&epsg=<(int)value>
  • 设置输出图像的投影系统。
  • 提供 EPSG code 想要的投影图。

&multiwrite==<(bool)false>
  • 以停用多个写入。此选项仅用于支持多次写入的应用程序(具有多个输出图像的应用程序)。不是独立地计算和写入每个图像,而是以同步的方式为每个输出写入流图像块。在应用程序中,默认的流模式是逐条计算图像,并使用可用RAM自动计算条带大小。可以使用流选项修改流模式(请参见上文),但请注意,使用RAM的基于自动和平铺的流可能无法正常工作。
  • 默认情况下为True

OGR数据源选项

我们将此过程扩展到OGR数据源。有三种不同类型的选项:打开、创建和层创建,它们直接来自GDAL API。为了使用它们,用户只需指定选项来自哪个家族。

对于打开选项:

&gdal:oo:<GDALKEY>=<VALUE>

对于创建选项:

&gdal:co:<GDALKEY>=<VALUE>

对于层创建选项:

&gdal:lco:<GDALKEY>=<VALUE>

实例

下面提供了一些示例:

  • 写入数据块大小等于256且压缩程度较低的文件
$ otbcli_DynamicConvert -in OTB-Data/Examples/QB_1_ortho.tif -out "/tmp/example1.tif?&gdal:co:TILED=YES&gdal:co:COMPRESS=DEFLATE"
  • 仅处理文件中的第一个波段
$ otbcli_DynamicConvert -in "OTB-Data/Examples/QB_1_ortho.tif?&bands=1" -out /tmp/example2.tif