कई टाइलों में विभाजन .tif छवि? [बन्द है]


13

मेरे पास 1GB (.tif) आकार की एक छवि है, जिसकी चौड़ाई और ऊंचाई 94000x71680 है। मैं इस छवि को 20000X20000 टाइलों में बदलना चाहूंगा ताकि मैं उन्हें संसाधित कर सकूं।

मैं यह कैसे कर सकता हूँ?


अनूप, github.com/mapbox/rasterio आपको अपने इनपुट डेटा का संख्यात्मक आंसर प्रदान करेगा। आप विभाजित कर सकते हैं कि numpy o scipy विधियों का उपयोग करके और प्रत्येक भाग को एक नई फ़ाइल में आसानी से सहेजें। क्या ऐसा समाधान योग्य होगा? यदि ऐसा है, तो आपको यह कहने की आवश्यकता है कि "असमान बिट्स" (71680 20000 से साफ-सुथरे विभाज्य नहीं हैं) का इलाज कैसे किया जाना चाहिए।
Bugmenot123

जवाबों:


23

मैं दो समाधान प्रस्तावित करता हूं: पहला QGIS का उपयोग करने वाला, दूसरा पायथन (GDAL) का उपयोग करने वाला।


QGIS का उपयोग कर समाधान

QGIS में आप एक VRT मोज़ेक बना सकते हैं।

कृपया इस प्रक्रिया का पालन करें (नीचे दी गई छवि देखें):

  1. परतें पैनल में रेखापुंज लोड करें ;
  2. उस पर राइट-क्लिक करें और चुनें Save As...;
  3. Create VRTविकल्प की जांच करें ;
  4. उस फ़ोल्डर को चुनें जहां आपके आउटपुट सहेजे जाएंगे;
  5. सीमा निर्धारित करें (यदि आप पूरे रेखापुंज पर काम करना चाहते हैं, तो कुछ भी संशोधित न करें);
  6. वर्तमान रिज़ॉल्यूशन का उपयोग करते समय चुनें (मैं इसे डिफ़ॉल्ट के रूप में छोड़ने का सुझाव देता हूं);
  7. कॉलम और पंक्तियों की अधिकतम संख्या निर्धारित करें (आपके मामले में, यह 20000 कॉलम और 2000 पंक्तियाँ होनी चाहिए);
  8. प्रेस OKबटन।

यहाँ छवि विवरण दर्ज करें

उदाहरण के लिए, इस नमूना रेखापुंज पर उपरोक्त संवाद में मापदंडों का उपयोग (मेरे द्वारा निर्धारित पैरामीटर यादृच्छिक रूप से चुने गए हैं):

यहाँ छवि विवरण दर्ज करें

चरण 4 में निर्दिष्ट पथ में 100 टाइलें उत्पन्न करेगा:

यहाँ छवि विवरण दर्ज करें

उन्हें QGIS में लोड कर रहे हैं, वे इस तरह दिखते हैं:

यहाँ छवि विवरण दर्ज करें

जैसा कि @ Bugmenot123 ने टिप्पणियों में सही कहा है, परिणाम अजीब लगता है, क्योंकि प्रत्येक छवि की शैली प्रति छवि मूल्यों के वितरण के लिए खुद को फिट करती है (लेकिन डेटा पूरी तरह से ठीक है)।


पायथन का उपयोग कर समाधान (GDAL)

समान परिणाम प्राप्त करने का दूसरा तरीका GDAL ( gdal_translate ) का उपयोग करना है ।

ऊपर वर्णित समान उदाहरण के संदर्भ में, आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

import os, gdal

in_path = 'C:/Users/Marco/Desktop/'
input_filename = 'dtm_5.tif'

out_path = 'C:/Users/Marco/Desktop/output_folder/'
output_filename = 'tile_'

tile_size_x = 50
tile_size_y = 70

ds = gdal.Open(in_path + input_filename)
band = ds.GetRasterBand(1)
xsize = band.XSize
ysize = band.YSize

for i in range(0, xsize, tile_size_x):
    for j in range(0, ysize, tile_size_y):
        com_string = "gdal_translate -of GTIFF -srcwin " + str(i)+ ", " + str(j) + ", " + str(tile_size_x) + ", " + str(tile_size_y) + " " + str(in_path) + str(input_filename) + " " + str(out_path) + str(output_filename) + str(i) + "_" + str(j) + ".tif"
        os.system(com_string)

आपको स्पष्ट रूप से अपने विशिष्ट मामले में मूल्यों को अनुकूलित करने की आवश्यकता है।


2
बस एक त्वरित टिप्पणी कि क्यूजीआईएस उन्हें कैसे पेश करता है इसका उदाहरण सिर्फ इसलिए अजीब लगता है क्योंकि शैली प्रति छवि मूल्यों के वितरण के लिए खुद को फिट करती है । डेटा पूरी तरह से ठीक है :)
Bugmenot123 10

धन्यवाद, आपके उत्तर के लिए सबसे पहले वास्तव में उपयोगी है, लेकिन मैं अजगर का उपयोग करके एक ही परिणाम प्राप्त करना चाहता हूं? क्या आप मेरी उस पर भी मदद कर सकते हैं क्योंकि यह अधिक मैनुअल है, बल्कि प्रोग्रामेटिक है।
अनूप पंवार

@ Bugmenot123 धन्यवाद, मैं आपकी उपयोगी टिप्पणी के साथ उत्तर को संपादित करता हूं।
11

@ अनूप पंवार, अगर मुझे PyQGIS के साथ कोई हल मिल जाए, तो मैं अपना जवाब संपादित करूँगा! =)
mgri

@HowToInQGIS धन्यवाद, अगर आप अजगर में एक रास्ता चाहते हैं, तो वह भी मदद करेगा :)
अनूप पंवार

5

विभाजित मत करो

आप gdalbuildvrt , आप वर्चुअल टाइल बना सकते हैं जो केवल आपकी डिस्क पर कुछ बाइट्स का उपयोग करेगी। तब आप अधिकांश सॉफ्टवेयर्स का उपयोग कर सकते हैं जो आपके प्रसंस्करण को निष्पादित करने के लिए आपके vrt के इनपुट के रूप में लेंगे।

वैकल्पिक रूप से, मैं एक ऐसे उपकरण की तलाश करूँगा जो 1Gb छवि के साथ विभाजन और छवि को मिलाने के साथ काम कर सके। उदाहरण के लिए, OTB में बड़ी छवियों के साथ मानक (और कभी-कभी उन्नत) छवि प्रसंस्करण के लिए अधिकांश क्षमताएं हैं। आप पायथन के लिए ओटीबी को लपेट सकते हैं या इसे क्यूजीआईएस से या कमांड लाइनों से चला सकते हैं।


2

स्प्लिट रेस्टर टूल का उपयोग करके , आप विभाजन के कुछ तरीकों के आधार पर एक टाइल में एक रेखापुंज को विभाजित कर सकते हैं जिसमें प्रत्येक टाइल का आकार या टाइलों की संख्या शामिल है

आर्कगिस में स्प्लिटिंग रैस्टर भी देखें


2

GDAL का उपयोग करने वाला एक अन्य उपाय है gdal_retile.py टूल:

mkdir image_tiles
gdal_retile.py -v -r bilinear -levels 1 -ps 20000 20000 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir image_tiles big_input_image.tif

अधिक जानकारी के लिए देखें: http://www.gdal.org/gdal_retile.html

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