【问题标题】:GDAL warping with shift vectorsGDAL 变形与移位向量
【发布时间】:2019-04-05 15:35:39
【问题描述】:

有没有办法使用带有 GDAL(使用 Python API)的移位向量来扭曲图像?

我的意思是移位向量,例如。具有以下列的 CSV(或 numpy)文件:starting_x,starting_y,target_x,target_y。图像是例如。 Tiff(或 GeoTiff)文件。

我在文档(https://www.gdal.org/gdalwarp.htmlhttps://gdal.org/gdal_translate.html)中没有找到类似支持多个移位向量的东西,但也许有人知道该怎么做。

编辑

我生成了带有一些样本坐标的 VRT 文件。这是我使用的命令:

gdal_translate -gcp 100 100 200 200 -gcp 200 200 300 300 -gcp 500 500 600 600 -of VRT original.tif original.vrt

这是输出文件:

<VRTDataset rasterXSize="16285" rasterYSize="8251">
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">1 (unitless)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">1</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">1</MDI>
  </Metadata>
  <Metadata domain="IMAGE_STRUCTURE">
    <MDI key="INTERLEAVE">BAND</MDI>
  </Metadata>
  <GCPList>
    <GCP Id="" Pixel="100.0000" Line="100.0000" X="2.000000000000E+02" Y="2.000000000000E+02" />
    <GCP Id="" Pixel="200.0000" Line="200.0000" X="3.000000000000E+02" Y="3.000000000000E+02" />
    <GCP Id="" Pixel="500.0000" Line="500.0000" X="6.000000000000E+02" Y="6.000000000000E+02" />
  </GCPList>
  <VRTRasterBand dataType="Byte" band="1">
    <Metadata domain="IMAGE_STRUCTURE">
      <MDI key="NBITS">1</MDI>
    </Metadata>
    <Metadata>
      <MDI key="STATISTICS_MAXIMUM">1</MDI>
      <MDI key="STATISTICS_MEAN">0.074397271632616</MDI>
      <MDI key="STATISTICS_MINIMUM">0</MDI>
      <MDI key="STATISTICS_STDDEV">0.26241630590769</MDI>
    </Metadata>
    <ColorInterp>Palette</ColorInterp>
    <ColorTable>
      <Entry c1="255" c2="255" c3="255" c4="255" />
      <Entry c1="0" c2="0" c3="0" c4="255" />
    </ColorTable>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">original.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="16285" RasterYSize="8251" DataType="Byte" BlockXSize="16285" BlockYSize="4" />
      <SrcRect xOff="0" yOff="0" xSize="16285" ySize="8251" />
      <DstRect xOff="0" yOff="0" xSize="16285" ySize="8251" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

现在,我尝试将其用作变形的输入:

import gdal

InputImage = 'original.vrt'
OutTileName = 'warped.tif'
OutTile = gdal.Warp(OutTileName, InputImage, options=gdal.WarpOptions(tps=True))
OutTile = None

它没有损坏,但结果我得到了完全相同的图像 - 就像它根本没有变形一样。另一件事是输入图像的大小为 16 MB,结果图像的大小为 140 MB。我做错了什么?

【问题讨论】:

    标签: python gdal


    【解决方案1】:

    您可以将gpc 指定与gdal_translate -gcp x1 y1 x2 x2 的班次分配给您的文件。将输出写入 VRT 文件可让您查看格式,因此,如果您有大量的 gcp,则从某个模板生成 VRT 可能比使用命令行更容易。

    一旦分配了gcp,您就可以使用 gdalwarp 来“应用”转换。如果输入文件已经指定了投影,您可能需要添加-tps 标志以强制使用gcp 而不是投影。我不确定最后一部分。

    【讨论】:

    • 我添加了一个示例代码,用于生成 VRT 文件并使用此文件扭曲图像,但它没有按预期工作。
    • 您为 x,y 指定了 +100 的恒定偏移。这不会改变图像(像素),只会改变坐标(位置)。如果您有不断变化,最好简单地更改图像的地理变换并保留实际数据。
    • 这些只是简单的数据,我使用了更复杂的移位向量(其中 562 个),结果是一样的。我只是想知道,我正在处理地图图块,但我尝试执行的操作与 GIS 并没有真正的关系。我只是想使用给定的移位向量来扭曲图像,我需要根据像素而不是真实世界的单位来做。 GDAL 是进行此类转换的好工具吗?我试图找到使用 opencv 或枕头的方法,但我没有。
    • 取决于文件的投影(或缺少),它可能是 gcp 坐标的格式?应该是-gcp pixel line easting northing elevation。对于[0,1,0,0,0,1] 的地理变换,它基本上是从像素到像素,否则您可能需要将输入或输出坐标从地图转换为像素,反之亦然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2021-12-30
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多