GDAL का उपयोग करके रेखापुंज बैंड के लिए रंग व्याख्या कैसे जोड़ें?


9

मेरे पास 3 अलग-अलग 1-बैंड GeoTIFF फाइलें हैं। बैंड के लिए रंग की व्याख्या ग्रे है। मुझे 3-बैंड RGB फ़ाइल चाहिए। मैंने gdal_merge.py का उपयोग किया है

gdal_merge.py -separate file1.tif file2.tif file3.tif -o output_file.tif

लेकिन परिणामी output_file.tif के 3 बैंड के लिए रंग की व्याख्या ग्रे, अपरिभाषित, अपरिभाषित है। इसके अलावा, सभी पिक्सेल 0 हैं

यदि मैं pct2rgb.py निष्पादित करता हूं, तो मुझे एक RGB फ़ाइल मिलती है:

pct2rgb.py output_file.tif output_file_rgb.tif

लेकिन निश्चित रूप से, पिक्सल 0 भी हैं। तो, मेरे 3 प्रश्न हैं:

  • क्या gdal_merge.py एक 3-बैंड RGB फ़ाइल में 3 1-बैंड फ़ाइलों को संयोजित करने का सही उपकरण है?
  • मुझे बैंड के लिए अपरिभाषित रंग व्याख्या क्यों मिल रही है?
  • क्या pct2rgb इस रंग व्याख्या के साथ 3-बैंड फ़ाइलों को RGB फ़ाइलों में बदलने का सही उपकरण है?

अद्यतन : आपदाओं में रंग तालिका नहीं होती है। बस रंग व्याख्या: ग्रे।

दूसरी ओर, पिक्सेल मान 0 से 1023 तक जाता है (यह जानबूझकर है)

अधिक डेटा: वे रोटेटर्स (नो उत्तर अप) हैं, लेकिन उन सभी में समान जियोट्रांसफॉर्म हैं।

अद्यतन 2 : मैं चित्रों को उन्हें उत्तर दिशा में बनाने के लिए, वीआरटी का निर्माण कर सकता हूं और प्रत्येक बैंड के लिए ColorInterp जोड़ सकता हूं, लेकिन मुझे अभी भी आउटपुट परिणाम में ग्रे, अपरिभाषित, अपरिभाषित के रूप में रंग व्याख्या मिलती है।

समस्या यह है कि मुझे कम से कम, पहले बैंड में एक रंग तालिका बनाने की आवश्यकता है। मुझे उन्हें बनाने का तरीका पता है , लेकिन मुझे नहीं पता कि मेरी तालिका में कितनी प्रविष्टियाँ होनी चाहिए। GDAL Raster FAQ के उदाहरण में 13 प्रविष्टियाँ क्यों हैं? यदि मदद मिलती है, तो सभी पिक्सेल में 0 और 1023 के बीच मान होते हैं।

अद्यतन 3 : जाहिर है, TIFF प्रारूप में वास्तव में प्रत्येक बैंड की रंग व्याख्या को निर्दिष्ट करने का कोई तरीका नहीं है। GDAL ने TIFF फ़ाइल को पढ़ते समय जिस तरह से रंग व्याख्या का निर्माण किया है, वह PHOTOMETRIC और EXTRASAMPLES टैग के मूल्य का एक संयोजन है

इन टैग के बारे में पढ़ना:

  • PHOTOMETRIC छवि डेटा के रंग स्थान का प्रतिनिधित्व करता है। 2 के मान का अर्थ है कि पिक्सेल मान के घटक RGB हैं, लेकिन यह बाइट पिक्सेल को मानता है, और मेरे पास UInt16 पिक्सेल हैं (मैंने कोशिश की -co "PHOTOMETRIC=rgb", और एक त्रुटि मिली)। इसलिए, मैं आउटपुट फ़ाइल के लिए PHOTOMETRIC टैग निर्दिष्ट नहीं कर सकता।

  • EXTRASAMPLES निर्दिष्ट करता है कि प्रत्येक पिक्सेल में N अतिरिक्त घटक हैं। मुझे इस बारे में निश्चित नहीं है कि अपनी मर्ज की गई फ़ाइल बनाने के लिए इस टैग का उपयोग कैसे करें। या अगर मुझे इसकी आवश्यकता है।

तो, अद्यतन 2 में मैं एक ColorTable के निर्माण का सुझाव देता हूं, लेकिन कैसे? मेरी 3 इनपुट फ़ाइलों में, पिक्सेल मान 0 से 1023 तक जाते हैं। क्या मुझे उन्हें रंगों से मेल खाना है? क्या मुझे 1024 इनपुट के साथ एक ColorTable बनाना है? कैसे?

अपडेट 3 में, ऐसा लगता है कि मर्ज की गई फ़ाइल बनाते समय मैं कुछ GeoTIFF टैग का उपयोग कर सकता हूं, लेकिन मुझे यकीन नहीं है कि मैं वास्तव में उनका उपयोग कर सकता हूं, या कैसे।


1
इसे आज़माएँ: जैसा आपने किया था, वैसे ही gdal_merge का उपयोग करें, फिर gdal_translate -co PHOTOMETRIC = RGB, जो भी कारण से gdal_merge -co का सम्मान नहीं करता है। यह दिखाई दिया मेरे लिए काम करने के लिए। हालांकि मैं आपके लक्ष्य को गलत समझ सकता हूं।

अपनी टिप के लिए धन्यवाद! मैं एक 3-बैंड जियोटीफ़ में 3 सिंगल बैंड जियोटीफ़ को मर्ज करना चाहता हूं। मेरी समस्या यह है कि gdal_merge का उत्पादन वास्तव में खाली है (पिक्सल = 0)। मैं किसी भी चीज़ के लिए उस आउटपुट का उपयोग नहीं कर सकता।
जॉर्ज एरवेलो

क्या डेटा को कहीं पोस्ट करना संभव है, कुछ एमिस लगता है।

मैंने अपने बॉस से पूछा है, और मैं डेटा प्रकाशित नहीं कर सकता :-(। मैं वास्तव में एक स्टैंडअलोन कोड के साथ फ़ाइलों को मिला सकता हूं, जो आउटपुट में इनपुट फ़ाइलों को बैंड द्वारा कॉपी करता है। मैं इसे gdal_merge के साथ करना चाहूंगा। । मेरी कविता यह है कि मैं ggb_merge के साथ आउटपुट फ़ाइल के लिए RGB रंग व्याख्या सेट नहीं कर सकता।
जॉर्ज Arévalo

हो सकता है, मुझे भी ऐसी ही समस्या थी। यह rgb2pct.py के साथ काम कर रहा है। क्यों?, मैं दुन्नो। कमांड का विवरण: यह उपयोगिता एक डाउनग्रेड आरजीबी हिस्टोग्राम पर माध्य कट एल्गोरिथ्म का उपयोग करके किसी दिए गए RGB छवि के लिए एक इष्टतम छद्म रंग तालिका की गणना करेगी। तब मैं ggb_translate को आरजीबी के विस्तार के साथ चलाता हूं।

जवाबों:


6

gdal_merge.py आपकी इनपुट छवियों को 'स्टैक' करने का सही उपकरण है।

यह मानते हुए कि आपके पहले बैंड में एक वैध रंग तालिका है जिसका आप उपयोग कर सकते हैं:

gdal_merge.py -separate -pct -o output_file.tif file1.tif file2.tif file3.tif

नोट: -o output_file.tifइनपुट की सूची से पहले कमांड को सुधार दिया गया है।

डॉक्स से:

-पक्ट: पहले इनपुट छवि से एक pseudocolor टेबल को पकड़ो, और आउटपुट के लिए इसका उपयोग करें। इस तरह से pseudocolored छवियों को मर्ज करना यह मानता है कि सभी इनपुट फ़ाइलें एक ही रंग तालिका का उपयोग करती हैं।

मैं आपके आउटपुट का परीक्षण gdalinfo -statsयह सुनिश्चित करने के लिए करूंगा कि यह ठीक से स्टैक किया जा रहा है।

ओपी के लिए अपडेट किया गया

से osgeo सूची , ऐसा लगता है कि आप परिणामों की जांच के लिए एक अलग प्रारूप का प्रयास हो सकता है:

TIFF प्रारूप में वास्तव में प्रत्येक बैंड की रंग व्याख्या को निर्दिष्ट करने का कोई तरीका नहीं है। GDAL ने TIFF फ़ाइल को पढ़ते समय जिस तरह से रंग व्याख्या का निर्माण किया है, वह PHOTOMETRIC और EXTRASAMPLES टैग के मूल्य का एक संयोजन है।

-इवन (पोस्टर) जीडीएएल को अंदर और बाहर जानता है।


मैंने वास्तव में ऐसा किया था, लेकिन मुझे "ERROR 6: SetColorTable () बहु-नमूना TIFF फ़ाइलों के लिए समर्थित नहीं है।" और मुझे सभी पिक्सेल के लिए 0 मिलता है। मैं इस त्रुटि के अर्थ के बारे में निश्चित नहीं हूं।
जॉर्ज अरवालो

ठीक है, अद्यतन प्रश्न। मुझे पहले बैंड के लिए एक रंग तालिका चाहिए।
जॉर्ज अरवालो

मम्म ... प्रतिक्रिया के लिए धन्यवाद। मैं उन विकल्पों की कोशिश कर रहा हूं। लगता है कि मैं फोटोमेट = आरजीबी का उपयोग नहीं कर सकता क्योंकि मेरा डेटाटाइप इंट नहीं है। लेकिन मैं इस पर हूँ ...
जॉर्ज एरवेलो

3

पहला तरीका मैं सोच सकता हूं कि एक vrt का निर्माण, संपादन और अनुवाद करना है:

gdalbuildvrt -separate output.vrt file1.tif file2.tif file3.tif

जहां आवश्यक हो वहां कलर इंटरप टैग लगाएं:

...
<VRTRasterBand dataType="Byte" band="1">
<ColorInterp>Red</ColorInterp>
<NoDataValue>255</NoDataValue>
<ComplexSource>
  <SourceFilename relativeToVRT="1">test.tif</SourceFilename>
  <SourceBand>1</SourceBand>
  <SourceProperties RasterXSize="42" RasterYSize="22" DataType="Byte" BlockXSize="42" BlockYSize="22" />
  <SrcRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <DstRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <NODATA>-32768</NODATA>
</ComplexSource>

और फिर:

gdal_translate output.vrt output.tif

मैंने कोशिश की, लेकिन मेरी रेखापुंज फ़ाइलों को घुमाया जाता है ...
जॉर्ज अरवालो

मतलब कि उनके पास एक ही SRS / जियोट्रांसफॉर्म नहीं हैं?

नहीं, उन सभी के पास समान जियोट्रांसफॉर्म हैं, लेकिन वे कोई उत्तर-अप रस्टर्स नहीं हैं (रोटेशन पैरामीटर 0 नहीं हैं)। और gdalbuildvrt घुमाए गए भू परिवर्तनों का समर्थन नहीं करता है। मैं उन्हें ताना नहीं देना चाहता।
जोर्ज अर्वालो

मम्म, ठीक है। अगर मैं उन्हें उत्तर-अप आपदाओं के लिए ताना देता हूं, तो मैं वीआरटी का निर्माण कर सकता हूं, और जहां आवश्यक हो वहां ColorInterp जोड़ सकता हूं, खरीद सकता हूं, फिर भी मैं ग्रे, अपरिभाषित, अपरिभाषित हो सकता हूं। मुझे पहले बैंड के लिए एक रंग तालिका बनाने की आवश्यकता है, लेकिन मुझे नहीं पता कि कैसे। मैं सवाल को अपडेट करूंगा।
जॉर्ज अराइवलो

1

आपके इनपुट ग्रेस्केल बैंड में 0 से 1024 तक मान हैं, लेकिन RGB केवल प्रत्येक बैंड के लिए मानों को 0 से 255 तक की अनुमति देता है।

आप gdal_translate -scale [src_min src_max [dst_min dst_max]]अपने स्रोत फ़ाइल को पुनर्विक्रय करने के लिए उपयोग कर सकते हैं ।

एक दूसरे रन में, आप अपने तीन बैंड्स को gdal_merge.py के साथ ढेर कर सकते हैं और आवेदन कर सकते हैं -co "PHOTOMETRIC=rgb"

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