图像处理

没有数据值的图像

图像文件的元数据中可以包含无数据值。它代表一个特殊的像素值,应该被视为“该像素没有可用的数据”。例如,SRTM瓷砖使用特定的无数据值-32768(通常在海域中找到)。

在多波段图像上,每个波段的无数据值都是单独处理的。支持只为其波段的子集定义没有数据值的图像的情况。

此元数据现在由OTB图像读取器和写入器处理(使用GDAL驱动程序)。可以从图像文件中读取无数据值并将其存储在图像元数据词典中。它也可以由图像编写器输出。生成无数据值的OTB筛选器能够导出此值,以便输出文件存储该值。

已创建应用程序来管理无数据值。该应用程序具有以下功能:

  • 构建与输入图像中的无数据像素相对应的蒙版:它为您提供输入图像中无数据像素的二进制图像。
  • 更改输入图像的无数据值:它会将携带旧无数据值的所有像素更改为新像素,并更新元数据
  • 将外部蒙版作为无数据应用于输入图像:对应的所有具有空掩码值的像素在输出图像中被标记为无数据。

例如,以下命令将输入图像的无数据值转换为DEM的默认值(-32768):

otbcli_ManageNoData -in input_image.tif
                    -out output_image.tif
                    -mode changevalue
                    -mode.changevalue.newv -32768

如果将公式应用于整个图像,则第三种模式“Apply”会很有用。这可能会更改标记为无数据的像素值,但图像元数据中的无数据值不会更改。如果要将所有无数据像素固定为其原始值,可以提取原始图像的蒙版并将其应用于输出图像。例如:

otbcli_ManageNoData -in input_image.tif
                    -out mask.tif
                    -mode buildmask

otbcli_BandMath -il input_image.tif
                -out filtered_image.tif
                -exp "2*im1b1-4"

otbcli_ManageNoData -in filtered_image.tif
                    -out output_image.tif
                    -mode apply
                    -mode.apply.mask mask.tif

您还可以使用带有附加参数“mode.apply.ndval”的“Apply”模式。此参数设置输入掩码的输出nodata值。

分割

在非常高分辨率的场景中以受控的质量分割对象是一项困难的任务,没有任何方法达到足够的性能水平来被认为是可操作的。

即使我们抛开分割质量的问题,考虑到我们有一种方法在我们的数据和感兴趣的对象上执行得相当好,将分割扩大到真正的非常高分辨率的数据本身的任务也是具有挑战性的。首先,我们不能将整个数据加载到内存中,并且需要对流进行处理,这不能很好地应对传统的分割算法。其次,分割过程本身的结果很难有效地表示和操作。

分割大型遥感图像的经验被打包到一个 Segmentation 在……里面 OTB Applications

您可以找到有关此应用程序的更多信息 here

大规模均值漂移(LSM)分割

LSMS是一种分割工作流程,它允许对非常大的图像执行平铺分割,理论上保证获得与不平铺的结果相同的结果。

它是由David Youssefi和Julien Michel在David在CNES实习期间开发的。

有关LSM方法的更完整描述,请参阅以下出版物: J. Michel, D. Youssefi and M. Grizonnet, “Stable Mean-Shift Algorithm and Its Application to the Segmentation of Arbitrarily Large Remote Sensing Images,” in IEEE Transactions on Geoscience and Remote Sensing, vol. 53, no. 2, pp. 952-964, Feb. 2015. 该工作流程包括链接3个或4个专用应用程序,并产生具有对应于分割图像的无伪影的多边形的GIS矢量文件,以及每个多边形的每个波段的辐射测量的均值和方差。

步骤1:均值漂移平滑

该工作流的第一步是使用 MeanShiftSmoothing 应用程序:

otbcli_MeanShiftSmoothing -in input_image.tif
                          -fout filtered_range.tif
                          -foutpos filtered_spatial.tif
                          -ranger 30
                          -spatialr 5
                          -maxiter 10
                          -modesearch 0

请注意, modesearch 选项应被禁用,并且 foutpos 参数是可选的:如果要同时基于空间模式和范围模式执行分割,则可以激活该参数。

此应用程序将通过对大图像进行流式处理并停用 modesearch 将保证结果将不依赖于流方案。还请注意, maxiter 用于设置边距以确保这些相同的结果,因此增加 maxiter 可能会对处理时间产生额外影响。

第2步:细分

下一步是基于由 MeanShiftSmoothing 申请。要做到这一点, LSMSSegmentation 将通过切片来处理它们,切片的尺寸由 tilesizextilesizey 参数,并将中间映像写入磁盘,从而在整个过程中保持非常低的内存消耗。分割将把范围距离小于 ranger 参数和(可选)空间距离低于 spatialr 参数。

otbcli_LSMSSegmentation -in filtered_range.tif
                        -inpos filtered_spatial.tif
                        -out  segmentation.tif uint32
                        -ranger 30
                        -spatialr 5
                        -minsize 0
                        -tilesizex 256
                        -tilesizey 256

请注意,最终的分割图像可能包含非常多的片段,并且 uint32 因此,应使用图像类型来确保将有足够的标签来索引这些段。这个 minsize 参数将筛选以像素为单位的大小低于其值的段,并且其标签将设置为0(无数据)。

请注意,输出的分割图像可能看起来像是斑驳的,就像有平铺瑕疵:这是因为分段是根据处理平铺的顺序按顺序编号的。在矢量化步骤的结果之后,您将看到结果中没有任何瑕疵。

这个 LSMSSegmentation 应用程序将写入与处理过程中所需的分片一样多的中间文件。因此,它可能需要两倍于最终图像最终大小的可用磁盘空间。这个 cleanup 选项(默认情况下处于激活状态)将在处理过程中在不再需要中间文件时立即将其清除。默认情况下,文件将写入当前目录。这个 tmpdir 选项允许为这些中间文件指定不同的目录。

步骤3(可选):合并小区域

这个 LSMSSegmentation 应用程序允许过滤掉小片段。在输出的分割图像中,这些片段将被移除并替换为背景标签(0)。处理小区域的另一种解决方案是将它们与辐射测量方面最接近的足够大的相邻区域合并。这是由 LSMSSmallRegionsMerging 应用程序,它将输出一个分割的图像,其中小区域已合并。再说一次, uint32 建议对此输出图像使用图像类型。

otbcli_LSMSSmallRegionsMerging -in filtered_range.tif
                               -inseg segmentation.tif
                               -out segmentation_merged.tif uint32
                               -minsize 10
                               -tilesizex 256
                               -tilesizey 256

这个 minsize 参数允许指定要合并的区域大小的阈值。就像 LSMSSegmentation 应用程序,该应用程序将对输入图像进行平铺处理,以保持较低的资源使用率,并保证结果相同。可以使用设置平铺大小 tilesizextilesizey 参数。然而,与 LSMSSegmentation 应用程序,它不需要将任何临时文件写入磁盘。

第四步:矢量化

LSMS工作流程的最后一步是将分割的图像矢量化为GIS矢量文件。该向量文件将为每个线段包含一个多边形,每个多边形都将包含附加属性,这些属性表示原始线段的标签、线段的大小(以像素为单位)以及线段上每个波段的平均值和方差。输出的GIS矢量文件的投影将与输入图像的投影相同(如果输入图像没有投影,则输出的GIS文件也没有投影)。

otbcli_LSMSVectorization -in input_image.tif
                         -inseg segmentation_merged.tif
                         -out segmentation_merged.shp
                         -tilesizex 256
                         -tilesizey 256

这个应用程序将以平铺方式处理输入图像,以保持较低的资源使用率,并保证结果相同。可以使用设置平铺大小 tilesizextilesizey 参数。然而,与 LSMSSegmentation 应用程序,它不需要将任何临时文件写入磁盘。

一体机

这个 LargeScaleMeanShift 应用程序是一个复合应用程序,它链接了前面的所有步骤:

  • 均值漂移平滑
  • 分割
  • 小区域合并
  • 矢量化

以前应用程序中的大多数设置也在此复合应用程序中公开。用于分割步骤的范围和空间半径是用于Mean-Shift平滑的值的一半,后者是从LargeScaleMeanShift参数获得的。有两种输出模式:矢量(默认)和栅格。选择栅格输出后,将跳过最后一步(矢量化)。

otbcli_LargeScaleMeanShift -in input_image.tif
                           -spatialr 5
                           -ranger 30
                           -minsize 10
                           -mode.vector.out segmentation_merged.shp

有一个清理选项可以禁用,以便检查此复合应用程序的中间输出。