GDAL与位移向量一起翘曲

时间:2019-04-03 12:20:34

标签: python gdal

是否有一种方法可以通过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。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您可以为文件分配gpc,其中gdal_translate -gcp x1 y1 x2 x2用于指定班次。将输出写入VRT文件可以使您看到格式,因此,如果您有gcp的数量,那么从某些模板生成VRT可能会更容易,而不是使用命令行。

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