Есть ли способ деформировать изображение, используя векторы смещения с помощью GDAL (с Python API)?
Под векторами сдвига я имею в виду, например. Файл CSV (или пустой) со следующими столбцами: starting_x,starting_y,target_x,target_y
. Изображение, например. файл Tiff (или GeoTiff).
Я не нашел ничего похожего на поддержку нескольких векторов сдвига в документации (https://www.gdal.org/gdalwarp.html, https://gdal.org/gdal_translate.html), но, возможно, кто-то знает, как это сделать.
EDIT
Я сгенерировал файл 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 МБ, а размер результирующего изображения - 140 МБ. Что я делаю не так?