खरोंच से एक मल्टीस्पेक्ट्रल छवि बनाना


10

मैं इस पर कुछ परीक्षण करने के लिए सेरो से एक मल्टीस्पेक्ट्रल छवि बनाना चाहता हूं। कुछ वास्तव में सरल है जैसे 5 पूरी तरह से एक समान बैंड नमक और काली मिर्च के शोर के साथ या केंद्र में विभिन्न मूल्यों का एक वर्ग। स्पष्ट रूप से यह सिर्फ मैट्रिसेस का ढेर होगा, एक बहुआयामी सरणी, जो उत्पन्न करने के लिए बहुत सीधे है। मैं अजगर और गदल का इस्तेमाल करके इसे हासिल करना चाहता हूं, लेकिन गदगद होना बहुत सुरीला है, मुझे इसके बारे में कुछ भी पता नहीं है। मैं आदर्श रूप से एक जियोटीफ़ फ़ाइल बनाना चाहता हूँ। क्या कोई इस पर मेरी मदद कर सकता है? कुछ संकेत या कुछ गदल ट्यूटोरियल जो बहुत कोमल है? आप सभी को धन्यवाद।

जवाबों:


15

आप gdal.band.riteArray विधि चाहते हैं। 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, se प्रोजेक्शन, सेट जियो ट्रांसफॉर्म, आदि ... लेकिन बिल्कुल वैसा ही दिखता है जैसा मुझे चाहिए। आपका बहुत बहुत धन्यवाद!
जेकिहुआ


2

मुझे पता है कि यह वह नहीं है जो आपने मांगा था, लेकिन यदि आप चाहते हैं कि यह मल्टीस्पेक्ट्रल या हाइपरस्पेक्ट्रल नमूना डेटा है - तो ऑप्टिक्स प्रोजेक्ट के लिए यह परीक्षण डेटा काम कर सकता है। वैकल्पिक रूप से, आप सीधे धरती एक्सप्लोरर से डेटा प्राप्त कर सकते हैं ।

इस साइट का उदाहरण कोड है जो एक 2D संकरी सरणी को एकल-बैंड geoTIFF में परिवर्तित करता है, और एक बहु-बैंड geoTIFF को 3 डी संख्यात्मक सरणी में परिवर्तित करता है।

संपादित करें:

आगे के शोध में 'मिसिंग मिसाल', 3 डी संख्यात्मक सारणी -> मल्टी-बैंड जियोफाई के साथ उदाहरण कोड का एक पेज मिलता है ।


नहीं, मुझे वास्तव में अपनी छवि बनाने की आवश्यकता है। यह पृष्ठ दिलचस्प है, धन्यवाद, मुझे वास्तव में क्या चाहिए मिसिंग उदाहरण, मल्टी-बैंड जियो टीआईएफ के रूप में 3 डी संख्यात्मक सरणी को कैसे बचाया जाए। लेकिन बहुत बहुत धन्यवाद!
जेकिहुआ

अधिक जानकारी के साथ संपादित
MappingTomorrow
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.