การสร้างภาพแบบหลายส่วนตั้งแต่เริ่มต้น


10

ฉันต้องการสร้างภาพ multispectral จาก cero เพื่อทำการทดสอบบางอย่างกับมัน บางสิ่งที่ง่ายจริงๆเช่น 5 วงที่มีลักษณะเหมือนกันอย่างสมบูรณ์ด้วยเสียงเกลือและพริกไทยบนพวกเขาหรือค่าที่แตกต่างกันที่จุดศูนย์กลาง เห็นได้ชัดว่านี่จะเป็นสแต็กของเมทริกซ์ซึ่งเป็นอาร์เรย์หลายมิติซึ่งค่อนข้างตรงไปตรงมาเพื่อสร้าง ฉันต้องการประสบความสำเร็จในการใช้ python และ gdal แต่ gdal นั้นค่อนข้างลึกลับฉันไม่เข้าใจเลย ฉันต้องการสร้างไฟล์พิกัด มีใครช่วยฉันได้บ้าง พอยน์เตอร์หรือแบบฝึกหัด 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 (ตกลงฉันรู้ว่ามันทำอะไร) SetWellKnown GeogCS, การฉายภาพ, ตั้งค่าการแปลงภูมิศาสตร์ ฯลฯ ... แต่ดูเหมือนว่าสิ่งที่ฉันต้องการ ขอบคุณมาก!
JEquihua

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับชิ้นส่วนอ้างอิงทางภูมิศาสตร์ของรหัสดูที่การประมาณการ Tutorial - gdal.org/ogr/osr_tutorial.html
user2856

2

ฉันรู้ว่าไม่ใช่สิ่งที่คุณต้องการ แต่ถ้าทั้งหมดที่คุณต้องการคือข้อมูลตัวอย่าง multispectral หรือ hyperspectral - ข้อมูลการทดสอบนี้สำหรับโครงการ Opticks อาจทำงานได้ อีกวิธีหนึ่งคือคุณจะได้รับข้อมูลดาวเทียม LANDSAT โดยตรงจากโลก Explorer ที่

ไซต์นี้มีรหัสตัวอย่างเพื่อแปลงอาร์เรย์แบบสองมิติให้เป็น geoTIFF แบบแบนด์เดียวและ GeoTIFF แบบหลายแบนด์เป็นแบบอาร์เรย์แบบสามมิติ

แก้ไข:

การวิจัยเพิ่มเติมพบหน้าของโค้ดตัวอย่างด้วย 'ตัวอย่างที่ขาดหายไป', อาร์เรย์แบบสามมิติ -> geoTIFF หลายวง


ไม่ฉันต้องการสร้างภาพของตัวเองจริงๆ หน้าเป็นสิ่งที่น่าสนใจขอบคุณสิ่งที่ฉันต้องการจริงๆคือตัวอย่างที่ขาดหายไปวิธีบันทึกอาร์เรย์แบบสามมิติเป็น geoTIFF แบบหลายวง แต่ขอบคุณมาก!
JEquihua

แก้ไขด้วยข้อมูลเพิ่มเติม
MappingTomorrow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.