रॉ सेंटिनल 2 जेपी 2 से आरजीबी जियोटीफ़


11

मैं प्रहरी 2 jp2 बैंड फ़ाइलों ( B02, B03, B04) को मर्ज करने और RGB रंगों को ठीक करने का एक तरीका ढूंढ रहा हूं । सभी को बैश या अजगर स्क्रिप्ट के साथ किया जाना चाहिए। अपने उदाहरण के लिए मैं इन चित्रों पर काम करता हूं । आदर्श रूप से समाधान इस ट्यूटोरियल के करीब होगा ।

मैं इस कमांड के साथ बैंड को मर्ज करने में सक्षम हूं

gdal_merge.py -separate -co PHOTOMETRIC=RGB -o merged.tif B04.jp2 B03.jp2 B02.jp2

लेकिन किसी कारण से मैं इमेजमा कमांड के साथ आरजीबी रंग ठीक नहीं कर सकता। आउटपुट ~ output०० एमबी ब्लैक इमेज है।

convert -channel B -gamma 1.05 -channel RGB -sigmoidal-contrast 20,20% -modulate 100,150 merged.tif merged-cc.tif

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

मैं एक एप्लिकेशन विकसित कर रहा हूं जो यह अनुमान लगाता है कि उपग्रह छवि का कौन सा हिस्सा कृषि भूमि है। एक दृश्य छवि को छोटे पैच (शायद 64x64) में काट दिया जाएगा और इसे सीएनएन ( फसल या गैर-फसल ) द्वारा वर्गीकृत किया जाएगा । मैं इस डेटासेट का उपयोग Inception-v3 मॉडल को प्रशिक्षित करने के लिए करता हूं । डेटासेट में 10m स्थानिक रिज़ॉल्यूशन के साथ 64x64 RGB चित्र हैं।


विलय के बारे में अधिक जानकारी

Band 1 Block=10980x1 Type=UInt16, ColorInterp=Red
  Metadata:
    STATISTICS_MAXIMUM=4818
    STATISTICS_MEAN=320.61101402206
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=536.76609312554
Band 2 Block=10980x1 Type=UInt16, ColorInterp=Green
  Metadata:
    STATISTICS_MAXIMUM=4206
    STATISTICS_MEAN=350.98505344194
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=534.43264268631
Band 3 Block=10980x1 Type=UInt16, ColorInterp=Blue
  Metadata:
    STATISTICS_MAXIMUM=3801
    STATISTICS_MEAN=364.44611471973
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=544.55509661709

यह @ ben के समाधान को लागू करने से पहले और बाद में विलय कर दिया गया है इससे पहले उपरांत


1
यह हिस्टोग्राम में मर्ज किए गए .if और न्यूनतम, औसत और अधिकतम की थोड़ी गहराई क्या है? साथ की जाँच करेंgdalinfo -hist merged.tif
user30184

@ user30184 मैंने अपने प्रश्न में अनुरोधित जानकारी को जोड़ा
gkiko

मैंने जेपी 2 को जियोटीफ़ में बदलने और फिर रंग सुधार को लागू करने की कोशिश की, लेकिन मुझे अभी भी एक काली छवि मिल रही है
gkiko

आप बस TCI.jp2 छवि का उपयोग क्यों नहीं करते हैं जो मूल रूप से समान है -scale 0 4096 0 255?
pLumo

1
फसल / गैर फसल के लिए, हो सकता है कि आप इस esa-sen2agri.org/resources/software का उपयोग कर सकते हैं इसके बजाय खरोंच से अपना खुद का एप्लिकेशन
बनाएं

जवाबों:


8

समस्या के 2 भाग हैं। पहला यह है कि आप 16 बिट्स से 8 बिट में कनवर्ट करना चाहते हैं, और gdal_translate का -scale विकल्प यह करता है, जैसा कि पिछले उत्तर में बताया गया है।

 -scale minOriginal maxOriginal minOutput maxOutput  

दूसरी समस्या एक विपरीत वृद्धि की समस्या है: जब आप पुनर्विक्रय करते हैं, तो आप उन पिक्सेल के लिए एक उच्च विपरीत होना चाहते हैं जो रुचि रखते हैं। चेतावनी: जब आप पुनर्विक्रय करते हैं , तो कोई "जादू" विपरीत नहीं होता है, आप आमतौर पर कुछ जानकारी ढीली करते हैं । यह डेटा के विज़ुअलाइज़ेशन में सुधार करने के लिए किया जाता है, और पेशेवर सॉफ्टवेअर एक नई फ़ाइल लिखे बिना मक्खी पर ऐसा करते हैं। यदि आप अपने डेटा को और संसाधित करना चाहते हैं, तो आपके "ब्लैक" जियोटीफ़ में आपके jp2 जैसी ही जानकारी होती है और यह संसाधित होने के लिए तैयार है। यदि आप गणना करते हैं, जैसे, वनस्पति संकेत, यह "मूल" प्रतिबिंब मूल्यों के साथ किया जाना चाहिए, न कि पुनर्विकसित लोगों के साथ। कहा जा रहा है कि, यहाँ कुछ कदम 8 विज़ुअल इमेज बढ़ाने के लिए हैं।

@बेन ने आपको 0-1 से प्रतिबिंबित (इस उत्पाद के साथ 10000 से गुणा करके) को 0-255 तक पहुंचाने के लिए एक सामान्य तरीका दिया। यह सुरक्षित है (कोई बहिष्करण) नहीं है, लेकिन केवल बादलों और कुछ नंगी मिट्टी में वास्तव में उच्च प्रतिबिंब हैं, इसलिए आपको जमीन पर बहुत कुछ नहीं दिखता है (नंगे मिट्टी को छोड़कर) और पानी में कुछ भी नहीं है। इसलिए, आमतौर पर छवियों पर लागू विपरीत संवर्द्धन पूरी श्रृंखला का केवल सबसेट लेने में शामिल होते हैं। सुरक्षित पक्ष पर, आप इस ज्ञान का उपयोग कर सकते हैं कि आम पृथ्वी सतह सामग्री का अधिकतम प्रतिबिंब आमतौर पर 0.5 / 0.6 से नीचे है ( यहां देखें)कुछ उदाहरणों के लिए)। बेशक, यह मानता है कि आपकी छवि को वायुमंडलीय रूप से सही किया गया है (L2A चित्र)। हालाँकि, परावर्तन की सीमा प्रत्येक वर्णक्रमीय बैंड में भिन्न होती है और आपके पास हमेशा अपने हित के क्षेत्र में सबसे चमकदार पृथ्वी की सतह नहीं होती है। यहां बताया गया है कि "सुरक्षित" विधि कैसे दिखती है (0.4 की अधिकतम परावर्तन के साथ, @RoVo द्वारा सुझाए गए 4096 की तरह)

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

दूसरी ओर, इसके विपरीत प्रत्येक बैंड के लिए अनुकूलित किया जा सकता है। आप इस सीमा को मैन्युअल रूप से परिभाषित कर सकते हैं (जैसे आप पानी के रंग में रुचि रखते हैं और आप पानी के अधिकतम अपेक्षित प्रतिबिंब मूल्य को जानते हैं) या छवि आँकड़ों के आधार पर। एक आमतौर पर इस्तेमाल की जाने वाली विधि में लगभग 95% मान रखने और "छोड़ने" (बहुत अंधेरा -> 0 या बहुत उज्ज्वल -> 255) बाकी हैं, जो कि औसत मूल्य +/- 1.96 * के आधार पर सीमा को परिभाषित करने के समान है। मानक विचलन। बेशक, यह केवल एक सन्निकटन है क्योंकि यह एक सामान्य वितरण को मानता है, लेकिन यह व्यवहार में काफी अच्छा काम करता है (सिवाय इसके कि जब आपके पास बहुत अधिक बादल हों या यदि आँकड़े कुछ नोडेटा मान का उपयोग करते हैं)।

उदाहरण के लिए अपना पहला बैंड लें:

माध्य = 320

std = 536

95% आत्मविश्वास अंतराल = [-731: 1372]

लेकिन निश्चित रूप से प्रतिबिंब हमेशा शून्य से बड़ा होता है, इसलिए आपको न्यूनतम 0 पर सेट करना होगा।

gdal_translate -scale 0 1372 0 255 -ot Byte  B01.jp2 B01-scaled.tif  

और अगर आपके पास गदल का हालिया संस्करण है, तो आप -scale_ {band #} का उपयोग कर सकते हैं (0 255 डिफ़ॉल्ट आउटपुट है, इसलिए मैं इसे दोहराता नहीं हूं) ताकि आपको सिंगल बैंड को विभाजित करने की आवश्यकता न हो। इसके अलावा मैं एक मध्यवर्ती फ़ाइल के रूप में tif के बजाय vrt का उपयोग करता था (पूरी छवि लिखने की आवश्यकता नहीं है: एक आभासी एक ही पर्याप्त है)

gdalbuildvrt -separate stack.vrt B04.jp2 B03.jp2 B02.jp2
gdal_translate -scale_1 0 1372 -scale_2 0 1397 -scale_3 0 1430 -ot Byte  stack.vrt im_rescaled.tif

ध्यान दें कि आपके आंकड़े "कलाकृतियों" जैसे बादलों और नोआदाता से बहुत प्रभावित हैं। एक तरफ, जब आपके पास अत्यधिक मूल्य होते हैं, तो विचरण को कम करके आंका जाता है। दूसरी ओर, आपके औसत को तब समझा जाता है, जब "शून्य" मानों की एक बड़ी मात्रा होती है (उदाहरण के समान स्वचालित रूप से विपरीत छवि को बहुत उज्ज्वल बना देना) और यह तब अतिरंजित हो जाएगा जब बादलों का बहुमत था (जो बना देगा) छवि भी अंधेरे)। इस स्तर पर, परिणाम इसलिए सबसे अच्छा नहीं होगा जो आप प्राप्त कर सकते हैं।

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

एक स्वचालित समाधान पृष्ठभूमि और क्लाउड मानों को "नोडटा" पर सेट करना होगा और NoData के बिना अपने आँकड़ों की गणना करना होगा ( NoData के बिना कंप्यूटिंग आँकड़ों के विवरण के लिए इस पोस्ट को देखें, और यह एक उदाहरण के लिए NoData से 4000 से अधिक बड़े मान सेट करने के लिए है )। एक एकल छवि के लिए, मैं आमतौर पर सबसे बड़े संभव क्लाउड-मुक्त सबसेट पर आँकड़ों की गणना करता हूँ। एक सबसेट के आँकड़ों के साथ, जहाँ कोई "NoData" (आपकी छवि का शीर्ष बाएँ) नहीं है, यह अंतिम परिणाम देता है। आप देख सकते हैं कि सीमा "सुरक्षित" श्रेणी का लगभग आधा है, जिसका अर्थ है कि आपके पास दो बार इसके विपरीत है:

gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte  stack.vrt im_rescaled.tif

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

अंतिम टिप्पणी के रूप में, gdal_constrast_stretch अच्छा लग रहा है, लेकिन मैंने परीक्षण नहीं किया है


इसके साथ समस्या यह है कि हर दाने में अलग चमक होगी। वह जो हासिल करना चाहता है, उसके आधार पर एक निश्चित पैमाने का उपयोग करना बेहतर है। -scale 0 4096 0 255अगर हम बादल बनावट की जरूरत नहीं है, तो बहुत अच्छा उत्पादन करता है ...
pLumo

@RoVo मैं मानता हूं कि इससे बीट वैल्यू निकलेंगे और हो सकता है कि आप रेत जैसी चमकीली सतहों पर इसके विपरीत ढीले पड़ जाएं, लेकिन यह ओपी द्वारा मर्ज की गई इमेज के आंकड़ों पर आधारित है । आप कणिकाओं पर अलग-अलग विपरीत नहीं होंगे। आमतौर पर, एनआईआर में लाल, हरे और नीले रंग की रेंज सीमा से बहुत छोटी होती है, यही कारण है कि प्रत्येक बैंड के लिए एक अलग कंट्रास्ट का उपयोग करना समझ में आता है।
राडौक्सु

7

आप बस उस TCI.jp2फ़ाइल का उपयोग कर सकते हैं जो SAFE.zipफ़ाइलों में शामिल है । ध्यान दें कि ये फाइलें अक्टूबर 2016 से पहले S2 फ़ाइलों में उपलब्ध नहीं हैं

वैकल्पिक रूप से आप GDAL का उपयोग करके बैंड बदल सकते हैं:

# Merge bands
gdalbuildvrt -separate TCI.vrt B04.jp2 B03.jp2 B02.jp2

# Convert to uncompressed GeoTiff
gdal_translate -ot Byte -co TILED=YES -scale 0 4096 0 255 TCI.vrt TCI.tif

# _OR_ Convert to JPEG - compressed GeoTiff
gdal_translate -ot Byte -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -scale 0 4096 0 255 TCI.vrt TCI.tif

-scale 0 4096प्रहरी -2 दृश्यों के लिए एक उचित मूल्य है और afaik भी TCI.jp2 छवियों के लिए उपयोग किया जाता है। 4096 को कम करें यदि आप एक लाइटर परिणाम प्राप्त करना चाहते हैं।


5

यदि आप एक समाधान की तलाश कर रहे हैं, तो आप जिस प्रश्न से जुड़े हैं, उसका पालन करना चाहिए और ट्यूटोरियल में डाउनलोड के लिए प्रदान किए गए लैंडसैट 8 प्रोसेसिंग शेल स्क्रीप्ट को समायोजित और समायोजित करना चाहिए ।

विशेष रूप से, जैसा कि वहां किया गया है, आप पहले एकल बैंड को फिर से बेचना चाह सकते हैं, उदाहरण के लिए:

gdal_translate -ot Byte -scale 0 10000 0 255 B04.jp2 B04-scaled.tif 
gdal_translate -ot Byte -scale 0 10000 0 255 B03.jp2 B03-scaled.tif
gdal_translate -ot Byte -scale 0 10000 0 255 B02.jp2 B02-scaled.tif

ध्यान दें कि आपकी छवियों का हिस्टोग्राम सुझाव देता है कि आपकी छवि में केवल बहुत ही गहरी सतह है (क्या यह मामला है?) लेकिन आमतौर पर आपकी प्रहरी -2 छवि शीर्ष-पर-वायुमंडल या सतह पर परावर्तन होगी जहां मान आमतौर पर 0 के बीच होते हैं। और 10000 - जब तक उच्च मान भी संभव नहीं है जैसे यदि आपके पास छवि में बादल हैं।

फिर आप बैंड को मर्ज कर सकते हैं और छवि उपस्थिति को ठीक कर सकते हैं:

gdal_merge.py -v -ot Byte -separate -of GTiff -co PHOTOMETRIC=RGB -o RGB-scaled.tif B04-scaled.tif B03-scaled.tif B02-scaled.tif
convert -channel B -gamma 1.05 -channel RGB -sigmoidal-contrast 20,40% -modulate 100,150 RGB-scaled.tif RGB-scaled-cc.tif

ऐसा करते समय मेरी छवि के साथ ऐसा होता है:

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


1
मैंने अपना प्रश्न अपडेट किया। मुझे यह कैसे तय करना चाहिए कि रंग को सही करते समय जियोफाई का उपयोग करने के लिए कौन से पैरामीटर हैं?
gkiko

जब इनपुट छवि से आउटपुट इमेज तक स्केलिंग हमेशा इनपुट इमेज में अधिकतम और न्यूनतम मान को देखते हैं। उदाहरण के लिए, पहले बैंड के लिए, पैमाने पैरामीटर इस -scale 0 4818 0 255 की तरह होना चाहिए
मिलोस Miletic
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.