Требуется нарезать GTiff/Python

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Kotop103
Новоприбывший
Сообщения: 2
Зарегистрирован: 25 мар 2019, 10:38
Репутация: 0
Откуда: Москва

Требуется нарезать GTiff/Python

Сообщение Kotop103 » 25 мар 2019, 10:54

Всем доброго времени суток.
Есть такая задача - для обучения нейронной сети требуется нарезать 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
честно - до этого ни разу не работал с таким форматом и изображениями. Совершенно не представляю, как с ними работать. Очень требуется помощь или хотя бы идеи где проблема может быть.

Аватара пользователя
Prince660
Активный участник
Сообщения: 164
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 15
Ваше звание: Питоновод
Откуда: г. Симферорполь
Контактная информация:

Re: Требуется нарезать GTiff/Python

Сообщение Prince660 » 25 мар 2019, 11:21

Сдвиг может быть если ваши тифы в разных проекциях или системах координат.
А цвет, насколько я знаю, не имеет значения. Поскольку в тифе хранится не "цвет" а числовое значение какого-то показателя. И этим значениям можно задавать любые цвета для отображения.

Kotop103
Новоприбывший
Сообщения: 2
Зарегистрирован: 25 мар 2019, 10:38
Репутация: 0
Откуда: Москва

Re: Требуется нарезать GTiff/Python

Сообщение Kotop103 » 25 мар 2019, 12:08

А возможно их Python-ом перенести в одну систему координат или задать требуемые проекции?

trir
Гуру
Сообщения: 5287
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Требуется нарезать GTiff/Python

Сообщение trir » 25 мар 2019, 12:23

возможно

Аватара пользователя
Prince660
Активный участник
Сообщения: 164
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 15
Ваше звание: Питоновод
Откуда: г. Симферорполь
Контактная информация:

Re: Требуется нарезать GTiff/Python

Сообщение Prince660 » 25 мар 2019, 12:26

Вполне возможно. По моему это делается библиотекой GDAL.

Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Re: Требуется нарезать GTiff/Python

Сообщение oldbay » 26 мар 2019, 22:56

Kotop103 писал(а):
25 мар 2019, 12:08
А возможно их Python-ом перенести в одну систему координат или задать требуемые проекции?
Можно при поморщи gdal.AutoCreateWarpedVRT
Обычно использую при работе с растрами свою обёртку вокруг python-gdal : https://github.com/oldbay/raster_tools

sergsh
Активный участник
Сообщения: 205
Зарегистрирован: 20 фев 2013, 21:48
Репутация: 30

Re: Требуется нарезать GTiff/Python

Сообщение sergsh » 28 мар 2019, 23:42

Используйте библиотеку VIPS, есть просто из терминала, есть для Python.
https://jcupitt.github.io/libvips/
Я ей вырезал куски из файла Tiff размером 8 Гб, работает очень быстро.

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей