처음부터 다중 스펙트럼 이미지 만들기


10

cero에서 다중 스펙트럼 이미지를 만들어서 테스트하고 싶습니다. 소금과 후추 소리가 나는 5 개의 완전히 균일 한 밴드 또는 중앙에 다른 값의 제곱과 같은 정말 간단한 것. 분명히 이것은 다차원 배열 인 행렬의 스택 일 것입니다. 나는 파이썬과 gdal을 사용하여 이것을 달성하고 싶지만 gdal은 꽤 밀폐되어 있으며, 나는 그것을 전혀 얻지 못한다. 이상적으로 geotiff 파일을 만들고 싶습니다. 아무도 나를 도울 수 있습니까? 매우 부드러운 포인터 또는 gdal 튜토리얼? 모두 감사합니다.

답변:


15

gdal.band.WriteArray 메소드가 필요합니다. 의 예를 들어 있습니다 GDAL의 API 튜토리얼 (아래 복제) :

format = "GTiff"
driver = gdal.GetDriverByName( format )
dst_ds = driver.Create( dst_filename, 512, 512, 1, gdal.GDT_Byte )
dst_ds.SetGeoTransform( [ 444720, 30, 0, 3751320, 0, -30 ] )

srs = osr.SpatialReference()
srs.SetUTM( 11, 1 )
srs.SetWellKnownGeogCS( 'NAD27' )
dst_ds.SetProjection( srs.ExportToWkt() )

raster = numpy.zeros( (512, 512), dtype=numpy.uint8 )    
dst_ds.GetRasterBand(1).WriteArray( raster )

# Once we're done, close properly the dataset
dst_ds = None

랜덤 데이터를 생성하려면 numpy.random 모듈을 확인하십시오.

보다 완전한 작업 예는 다음과 같습니다.

from osgeo import gdal, osr
import numpy

dst_filename = '/tmp/test.tif'
#output to special GDAL "in memory" (/vsimem) path just for testing
#dst_filename = '/vsimem/test.tif'

#Raster size
nrows=1024
ncols=512
nbands=7

#min & max random values of the output raster
zmin=0
zmax=12345

## See http://gdal.org/python/osgeo.gdal_array-module.html#codes
## for mapping between gdal and numpy data types
gdal_datatype = gdal.GDT_UInt16
np_datatype = numpy.uint16

driver = gdal.GetDriverByName( "GTiff" )
dst_ds = driver.Create( dst_filename, ncols, nrows, nbands, gdal_datatype )

## These are only required if you wish to georeference (http://en.wikipedia.org/wiki/Georeference)
## your output geotiff, you need to know what values to input, don't just use the ones below
#Coordinates of the upper left corner of the image
#in same units as spatial reference
#xmin=147.2  
#ymax=-34.54

#Cellsize in same units as spatial reference
#cellsize=0.01

#dst_ds.SetGeoTransform( [ xmin, cellsize, 0, ymax, 0, -cellsize ] )
#srs = osr.SpatialReference()
#srs.SetWellKnownGeogCS("WGS84")
#dst_ds.SetProjection( srs.ExportToWkt() )

raster = numpy.random.randint(zmin,zmax, (nbands, nrows, ncols)).astype(np_datatype )  
for band in range(nbands):
    dst_ds.GetRasterBand(band+1).WriteArray( raster[band, :, :] )

# Once we're done, close properly the dataset
dst_ds = None

고마워요,이 일들을 어디서 읽을 수 있습니까? SetUTM (OK가하는 것을 알고 있습니다) SetWellKnown GeogCS, se projection, set geo transform 등 ...하지만 정확히 필요한 것 같습니다. 고마워요!
JEquihua

코드의 지리 참조 부분에 대한 자세한 내용은 프로젝션 자습서 -gdal.org/ogr/osr_tutorial.html
user2856

2

나는 그것이 당신이 요구 한 것이 아니라는 것을 알고 있지만, 원하는 모든 것이 다중 스펙트럼 또는 초 분광 샘플 데이터라면 Opticks 프로젝트에 대한 이 테스트 데이터 가 작동 할 수 있습니다. 또는 Earth Explorer 에서 직접 LANDSAT 데이터를 얻을 수 있습니다 .

이 사이트 에는 2D numpy 배열을 단일 대역 geoTIFF로 변환하고 다중 대역 geoTIFF를 3D numpy 배열로 변환하는 예제 코드가 있습니다.

편집하다:

추가 연구는 '결측 예'인 3D numpy array-> multi-band geoTIFF 가있는 예제 코드 페이지를 찾습니다 .


아니요, 나 자신의 이미지를 만들어야합니다. 페이지는 흥미 롭습니다. 감사합니다. 실제로 필요한 것은 누락 된 예입니다 .3d numpy 배열을 다중 대역 geoTIFF로 저장하는 방법입니다. 하지만 고마워요!
JEquihua

더 많은 정보로 수정
MappingTomorrow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.