इस समस्या से निपटने का मेरे लिए सबसे आसान तरीका GDAL वर्चुअल फॉर्मेट का उपयोग करना था । इस प्रारूप ने मुझे छवियों के पूरे सेट को एक एकल छवि वस्तु के रूप में व्यवहार करने की अनुमति दी, और इसे तीन अपेक्षाकृत सरल चरणों में बदल दिया।
वर्चुअल डेटासेट बनाना
GDAL ( Tamas Szekeres के GISInternals विंडोज बायनेरिज़ और OSGeo4W के हाल के संस्करणों सहित ) में एक उपयोगिता शामिल है जिसे gdalbuildvrt कहा जाता है जिसका उपयोग एक प्रारंभिक आभासी डेटासेट बनाने के लिए किया जा सकता है।
इसका उपयोग करने का एक सरल तरीका यह है कि अपनी सभी छवियों को एक टेक्स्ट फ़ाइल में जोड़ा जाए, और फिर उस टेक्स्ट फ़ाइल को gdalbuildrt के इनपुट के रूप में उपयोग करें। यहां एक उदाहरण दिया गया है (आपको दूसरी कमांड को एक पंक्ति में रखना होगा):
dir /b *.tif > my_images.txt
gdalbuildvrt
-hidenodata
-vrtnodata "255 255 255"
-resolution highest
-input_file_list my_images.txt
my_image.vrt
यह आपको एक XML फ़ाइल के साथ छोड़ देगा जिसे आप सभी GDAL संचालन के लिए एकल छवि के रूप में मान सकते हैं। यह आंतरिक रूप से सफेद के रूप में नोडता का भी प्रतिनिधित्व करता है, लेकिन इससे पढ़ने वाले उपकरणों से नोडटा की परिभाषा को छुपाता है।
Resampled अवलोकन बनाना
इसके बाद, आप अवलोकन छवि का पुन: नमूनाकरण और आउटपुट करेंगे। आप इसे gdal_translate या gdalwarp के साथ कर सकते हैं । इनमें से किसी के लिए, याद रखें कि परिणामी आकार width * height * 3(8 बिट बैंड की संख्या) बाइट्स होगा। यदि यह 4GB से बड़ा होगा, तो आप BigTIFF को अपने आउटपुट (-co "BIGTIFF = YES") के रूप में निर्दिष्ट करने के लिए सिंटैक्स के लिए GeoTIFF विकल्पों को देखना चाहेंगे ।
Gdal_translate के लिए, आपको आसान gdalinfo कमांड का उपयोग करके आभासी छवि के आयामों को निर्धारित करना होगा । इन आयामों को लें और पिक्सेल में आपकी फ़ाइल की आउटपुट चौड़ाई और ऊँचाई निर्धारित करने के लिए प्रत्येक को कुछ सुसंगत कारक से विभाजित करें।
कमांड कुछ इस तरह दिखाई देगी (एक लाइन पर):
gdal_translate
-outsize 53120 14000
-co "TILED=YES"
-co "PROFILE=GEOTIFF"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
गालवडप के लिए, आपको परिणामी पिक्सेलाइज़ को जानना होगा; इस मामले में मैं .5 मीटर का उपयोग कर रहा हूं। आप चाहें तो रेज़मैप्लिंग विधि पर कॉल भी कर सकते हैं। मैं रूढ़िवादी साक्षात्कार के लिए क्यूबिक्सप्लिन पसंद करता हूं। यह नरम है, लेकिन आप पूर्ण संकल्प के लिए इन का उपयोग नहीं करने जा रहे हैं और मेरे अनुभव में यह अधिक संकुचित छवि बनाता है यदि आप JPEG या ECW जैसी किसी चीज़ का उपयोग कर रहे हैं।
gdalwarp
-r cubicspline
-of GTiff
-dstnodata "255 255 255"
-tr 0.5 0.5
-co "PROFILE=GEOTIFF"
-co "BIGTIFF=YES"
-co "TILED=YES"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
आप भी इन resampled GeoTIFF साक्षात्कार के लिए JPEG संपीड़न विकल्पों का उपयोग करने पर विचार कर सकते हैं; यह आउटपुट फ़ाइल को काफी हद तक ( फ्रैंक के अनुसार ) केवल एक मामूली प्रदर्शन दंड के साथ सिकुड़ता है ।
-co "COMPRESS=JPEG"
-co "JPEG_QUALITY=80"
-co "PHOTOMETRIC=YCBCR"
overviews
आप आंतरिक "पिरामिड" के निर्माण के लिए परिणामी छवि पर काम करने वाले गदलदादो कमांड को भी चलाना चाहेंगे , ताकि पूर्ण छवि आयामों की तुलना में कम प्रस्तावों के लिए अनुरोध डेटा के सबसेट के साथ मिल सकें। प्रदर्शन में वृद्धि ज्यादातर मामलों में डिस्क स्थान के लायक है। आप अपने द्वारा उपयोग किए जाने वाले स्तरों के साथ खेलना चाहते हैं; बहुत बड़ी छवियों के लिए आप कुछ ड्रॉप करने में सक्षम हो सकते हैं। गदलदादो कमान कुछ इस तरह दिखती है:
gdaladdo
-r average
my_image.tif
2 4 8 16 32 64 128 256
मैं इन स्तरों के साथ इष्टतम प्रदर्शन के लिए प्रयोग करने का सुझाव दूंगा। आप पा सकते हैं कि आपकी छवि के आकार के आधार पर, आपके ऐप्लिकेशन के लिए एक अलग रेज़मैप्लिंग अंतराल बेहतर है या, आप कुछ उच्चतर संख्याएँ गिरा सकते हैं (या कि और अधिक आवश्यक हैं)
इसके अलावा, यदि आप एक बाहरी अवलोकन (-ro विकल्प का उपयोग करके) JPEG संपीड़न कॉन्फ़िगरेशन लाइनों को जोड़ने पर विचार कर रहे हैं:
--config COMPRESS_OVERVIEW JPEG
--config PHOTOMETRIC_OVERVIEW YCBCR
--config INTERLEAVE_OVERVIEW BAND
(मेरा मानना है कि ये माता-पिता GeoTIFF से अंतर्निहित ओवरव्यू के लिए विरासत में मिले हैं)
टिप्पणियाँ
जब इस समस्या का सामना करना पड़ा, तो मैंने freenode.irc.net पर #gdal चैनल पर पूछा। यह एक अद्भुत संसाधन है, और मैं हॉवर्ड बटलर, फ्रैंक वार्मर्डम और यहां तक कि मेरी मदद करने के लिए राउल्ट का भी ऋणी हूं।