Есть такая задача - для обучения нейронной сети требуется нарезать 12 канальный .tif.
Так как я пишу всё на Python - решил, что скачаю osgeo4w и сделаю всё через неё.
Есть 12 канальный tif и 1 канальный tif. Требуется нарезать эти два тифа одинаково, у меня они режутся со сдвигом.
Не знаю, по каким причинам, но кроме сдвига меняется при нарезке и цвет 12 канального tif-a.
код ниже. Картинки приложить не могу.
Спойлер
import numpy as np
import osgeo
import matplotlib
import gdal
image_old = "1.tif"
label_old = "2.tif"
rastr_image = gdal.Open(image_old)
rastr_label = gdal.Open(label_old)
copy_rstr = np.zeros((4282, 7080), dtype= np.uint16)
copy_label = np.zeros((4282, 7080), dtype= np.float16)
a128 = 128
a256 = 256
copy_rstr = rastr_image.ReadAsArray() # наша картинка
print(type(copy_rstr))
format = "GTiff"
driver = gdal.GetDriverByName( format )
metadata = driver.GetMetadata()
print(copy_rstr.shape)
k = 0
for j in range(int(ysize/a128)+1):
for i in range(int(xsize/a128)+1):
dt = gdal.GDT_UInt16
outData = driver.Create( "cut/train/image/"+str(k)+".tif", a128, a128, 12, dt )
outData.SetProjection(rastr_image.GetProjection())
outData.SetGeoTransform(rastr_image.GetGeoTransform())
for ik in range(12):
outData.GetRasterBand( ik+1 ).WriteArray( copy_rstr[ik, a128*i : a128*i + a128, a128*j : a128*j + a128] )
outData = None
k+=1
copy_label = rastr_label.ReadAsArray() # наша картинка
format = "GTiff"
driver = gdal.GetDriverByName( format )
metadata = driver.GetMetadata()
print(copy_label.shape)
k = 0
for j in range(int(ysize/a128)+1):
for i in range(int(xsize/a128)+1):
dt = gdal.GDT_Float32
outData = driver.Create( "cut/train/label/"+str(k)+".tif", a128, a128, 1, dt )
outData.SetProjection(rastr_image.GetProjection())
outData.SetGeoTransform(rastr_image.GetGeoTransform())
outData.GetRasterBand( 1 ).WriteArray( copy_label[ a128*i : a128*i + a128, a128*j : a128*j + a128] )
outData = None
k+=1