GDAL के साथ नैनोस्केल डेम का निर्माण


14

थोड़ा अजीब सवाल शायद, लेकिन मैं आपको अपने वास्तविक सवालों से पहले पृष्ठभूमि का संक्षिप्त विवरण दे दूं:

परमाणु बल माइक्रोस्कोपी (एएफएम) एक ऐसी विधि है, जो संक्षेप में (और मेरे सीमित ज्ञान के लिए) शोधकर्ताओं को माइक्रो और नैनोस्केल पर क्षेत्रों को स्कैन करने की सुविधा देती है। यह एक तरह की जांच का उपयोग करके एक क्षेत्र को "स्कैन" करके काम करता है। अधिक यह मेरे लिए समझाना मुश्किल है, क्योंकि मुझे इसकी कोई वास्तविक समझ नहीं है। मुझे क्या पता है, और मेरी जिज्ञासा को क्या ट्रिगर किया गया था कि परिणाम वास्तव में "ऊंचाई" मूल्यों का एक "ग्रिड" है (उस बिंदु पर जांच की ऊंचाई का वर्णन करते हुए 512x512 मूल्यों का एक मैट्रिक्स)।

मैंने तब सोचा: ठीक है, पैमाने के अलावा, यह वास्तव में एक डिजिटल उन्नयन मॉडल है! और, इसका मतलब यह है कि अगर मैं जीआईएस टूल द्वारा समझे गए डीईएम फ़ाइल बनाने का प्रबंधन कर सकता हूं तो मैं जीआईएस विश्लेषण को लागू कर सकता हूं!

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

मैं आगे क्या योजना बना रहा हूं, और मुझे कुछ मदद की जरूरत है "उचित डेम के लिए मैपिंग"। मुझे DEMS के बारे में कुछ जानकारी है, लेकिन जब उनकी वास्तविक पीढ़ी की बात आती है तो मैं काफी नया हूं।

जो मैं सोच रहा हूं वह यह है कि मुझे अपने डेटा को किसी तरह से जियोस्टोरेंस करना है, और इसके लिए मुझे कस्टम (प्लानर) कोऑर्डिनेट सिस्टम की जरूरत है। मैं कल्पना करता हूं कि मेरी समन्वय प्रणाली इकाइयों के रूप में सूक्ष्म या नैनो-मीटर का उपयोग करेगी। तब यह एएफएम के साथ स्कैन किए गए क्षेत्र के आकार को खोजने की बात है (यह मेरा मानना ​​है कि बाइनरी फ़ाइल में कहीं है, इस ज्ञात को मान लें)।

अद्यतन : मेरे पास विभिन्न प्रस्तावों पर कई स्कैन हैं, लेकिन एक ही क्षेत्र के। उदाहरण के लिए मुझे दो स्कैन के बारे में यह जानकारी है:

बड़ी छवि:

Scan Size: 51443.5 nm
X Offset: 0 nm
Y Offset: 0 nm

छोटी (विस्तार) छवि:

Scan Size: 5907.44 nm
X Offset: 8776.47 nm
Y Offset: 1486.78 nm

मैं क्या सोच रहा हूं, यह है कि मेरे कस्टम कोऑर्डिनेट सिस्टम में 0,0 में एक मूल होना चाहिए और बड़ी छवि के लिए मैं कैमकोर्डर 0,0 को समन्वयित करता हूं (0,0) के समन्वय मूल्य और पिक्सेल 512,512 समन्वय मूल्य (51443.5, 51443.5) ) (अनुमान है कि आपको आवश्यक अन्य बिंदुओं के लिए चित्र मिलता है)।

फिर, बड़ी छवि पिक्सेल (0,0) से (8776.47, 1486.78) और (512,512) से (8776.47 + 5907.44, 1486.78 + 5907.44) मैप करेगी।

1 प्रश्न तो यह है : मैं इस तरह के एक समन्वय प्रणाली के लिए एक प्रोज 4 डीईएट कैसे बनाऊं? Ie: मैं अपने कस्टम समन्वय प्रणाली को ये "वास्तविक दुनिया निर्देशांक" कैसे निर्दिष्ट करता हूं (या, अगर मैं व्हबर्स सुझाव का पालन करता हूं और एक स्थानीय समन्वय प्रणाली का उपयोग कर रहा हूं और इकाइयों के बारे में झूठ बोल रहा हूं (अर्थात किलोमीटर के रूप में मेरे नैनोमीटर का इलाज करना)

तब मुझे अपने सुन्न 2-आयामी एरे को एक जियोफेरेन्सड डीईएम फ़ाइल प्रारूप में स्थानांतरित करना होगा। मैं GDAL (या, बल्कि पायथन बाइंडिंग) का उपयोग करने के बारे में सोच रहा था।

दूसरा प्रश्न यह है : मैं "मनमाना" डेटा जैसे कि मेरा एक भू-आकृत डेम कैसे बना सकता हूं? अधिमानतः अजगर में और खुले स्रोत पुस्तकालयों का उपयोग करना।

बाकी तो काफी आसान होना चाहिए, बस सही विश्लेषण उपकरण का उपयोग करने की बात है। समस्या यह है, यह कार्य मेरी अपनी जिज्ञासा से प्रेरित है, इसलिए मुझे यकीन नहीं है कि मुझे वास्तव में नैनोस्केल डेम के साथ क्या करना चाहिए। यह भीख माँगता है

तीसरा सवाल : नैनोस्केल डेम के साथ क्या करना है? किस तरह का विश्लेषण किया जा सकता है, डीईएम विश्लेषण के लिए उपयुक्त उपकरण क्या हैं और आखिरकार: क्या इस डेटा से पहाड़ियों और समोच्च लाइनों के साथ एक नक्शा बनाना संभव है? :)

मैं सभी सुझावों और बिंदुओं का स्वागत करता हूं, लेकिन ध्यान रखें कि मैं मुफ्त विकल्प की तलाश कर रहा हूं, क्योंकि यह एक सख्त शौक-आधारित परियोजना है जिसमें कोई बजट या धन नहीं है (और मेरे पास किसी भी जीआईएस-एप्लिकेशन का उपयोग नहीं है)। इसके अलावा, मुझे पता है कि ब्रूकर, जो कंपनी इन AFM मशीनों को बेचती है, कुछ सॉफ़्टवेयर को शिप करती है, लेकिन इसका उपयोग करने में कोई मज़ा नहीं आएगा।


मजेदार और दिलचस्प! क्या आप कुछ नमूना डेटा पोस्ट कर सकते हैं? क्या प्रक्षेपण पर नैनोमीटर का पैमाना होना आवश्यक है? यह सोचकर कि शायद इसे स्केल करना आसान है, हालांकि यह "धोखा" है। Btw मुझे लगता है कि आप GDAL / ogr के साथ एक लंबा रास्ता तय कर सकते हैं, हालांकि प्रक्षेपण मुद्दे को अभी भी संबोधित करने की आवश्यकता होगी। gdal.org/gdal_grid.html
एलेक्सनो

धन्यवाद! लगता है कि यह एक उत्तर की तुलना में अधिक टिप्पणी है। जहां तक ​​नैनोमीटर के पैमाने पर मैं कहूंगा कि जो भी काम करता है वह बहुत अच्छा है, लेकिन एक सच्चा नैनोस्कॉले पियोजिशन सबसे अच्छा होगा। जब सैंपल डेटा की बात आती है तो मुझे जांच करनी होगी कि क्या कुछ प्रतिबंध हैं, लेकिन यह मूल रूप से int16 मूल्यों का 2 मंद मैट्रिक्स है।
atlefren

3
आपको proj4 मापदंडों की आवश्यकता क्यों होगी? आप इस डेटा को किसी अन्य समन्वय प्रणाली (esp। भौगोलिक) में स्थानांतरित नहीं करेंगे। Imho आप किसी भी समन्वय प्रणाली के बिना अपने सभी विश्लेषण करने में सक्षम होना चाहिए। आप एक डेम से क्या समझते हैं? त्रिभुजित सतहों जैसे कई प्रकार हैं (जैसे एक विलंबित त्रिभुज) या रेखापुंज मानचित्र (आपके पास यह पहले से है)। यह पाठ्यक्रम विश्लेषण सॉफ्टवेयर पर अत्यधिक निर्भर करता है। यदि आप जांच को समझने के लिए आउटपुट के रूप में आवश्यक हैं, तो निश्चित रूप से आप अन्य मानचित्र बना सकते हैं। आप अनाज संबंधी बीमारी के लिए code.google.com/p/mtex पर एक नज़र डाल सकते हैं ।
गलती

3
कारण मुझे लगता है कि (मुझे लगता है) एक सीआरएस की आवश्यकता है: यदि मैं बस बनाता हूं, तो सीआरएस को बताए बिना जियो टीआईएफएफ, माप की इकाई पिक्सल होगी। अगर मैं दूरियों को मापना चाहता हूँ तो क्या होगा? और, क्या होगा अगर मेरे पास दो एएफएम स्कैन हैं और जानते हैं कि वे एक-दूसरे से कैसे संबंधित हैं (कुछ बिंदु से पैमाने और ऑफसेट के संदर्भ में)। सीआरएस सौंपा जाने से एक साथ कई स्कैन देखने में सुविधा होगी
atlefren

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

जवाबों:


4

वैसे, ऐसा लगता है कि मैंने 1 और 2 समस्याओं को कम से कम हल किया है। गितुब में पूर्ण स्रोत कोड , लेकिन यहाँ कुछ स्पष्टीकरण:

एक कस्टम CRS के लिए मैंने (प्रति Whubers सुझाव) "धोखा" और यूनिट के रूप में मीटर का उपयोग करने का फैसला किया। मुझे apatialreference.org ( SR-ORG: 6707 ) पर एक "स्थानीय सीआरएस" मिला।

LOCAL_CS["Non-Earth (Meter)",
    LOCAL_DATUM["Local Datum",0],
    UNIT["Meter",1.0],
    AXIS["X",NORTH],
    AXIS["Y",EAST]]

पायथन और GDAL का उपयोग करना यह पढ़ने में काफी आसान है:

def get_coordsys():
    #load our custom crs
    prj_text = open("coordsys.wkt", 'r').read()
    srs = osr.SpatialReference()
    if srs.ImportFromWkt(prj_text):
        raise ValueError("Error importing PRJ information" )

    return srs

इसके अलावा, GDAL के साथ एक डीईएम को महान बनाना वास्तव में सीधा था (मैंने एकल-बैंड जियो-टिफ़ के साथ समाप्त किया)। लाइन parser.read_layer (0) मेरे पहले वर्णित 512x512 मैट्रिक्स को लौटाता है।

def create_dem(afmfile, outfile):

    #parse the afm data
    parser = AFMParser(afmfile)

    #flip to account for the fact that the matrix is top-left, but gdal is bottom-left
    data = flipud(parser.read_layer(0))

    driver = gdal.GetDriverByName("GTiff")
    dst_ds = driver.Create(
        outfile,
        data.shape[1],
        data.shape[0],
        1 ,
        gdal.GDT_Int16 ,
    )

    dst_ds.SetGeoTransform(get_transform(parser, data))
    dst_ds.SetProjection(get_coordsys().ExportToWkt())
    dst_ds.GetRasterBand(1).WriteArray(data)
    dst_ds = None

Triockiest हिस्सा समझ में आया कि कैसे ठीक से मेरी फाइल "georeference", मैं SetGeoTransform का उपयोग कर समाप्त हो गया , मापदंडों के रूप में हो रही है:

def get_transform(parser, data):
    #calculate dims
    scan_size, x_offset, y_offset = parser.get_size()
    x_size = data.shape[0]
    y_size = data.shape[1]
    x_res = scan_size / x_size
    y_res = scan_size / y_size

    #set the transform (offsets doesn't seem to work the way I think)
    #top left x, w-e pixel resolution, rotation, 0 if image is "north up", top left y, rotation, 0 if image is "north up", n-s pixel resolution
    return [0, x_res, 0, 0, 0, y_res]

यह अंतिम भाग शायद एक है जिसके बारे में मैं सबसे अधिक अनिश्चित हूं, जो मैं वास्तव में देख रहा था वह कुछ लाइन * gdal_transform -ullr * थी, लेकिन मुझे यह प्रोग्राम करने का तरीका नहीं मिला।

मैं Qgis में अपना जियोटीफ़ खोलने में सक्षम हूं और इसे देख सकता हूं (और नेत्रहीन इसकी तुलना ब्रूकर कार्यक्रम के परिणाम के साथ सही लगता है), लेकिन मैंने वास्तव में अपने प्रश्न 3 का उत्तर नहीं दिया है; इस डेटा के साथ क्या करना है। तो, यहाँ मैं सुझाव के लिए खुला हूँ!


एक दिलचस्प चुनौती यह हो सकती है कि दर्शकों को डेम पर दूरियों की तुलना दुनिया के उन स्थानों के बीच की दूरी से की जाए जो दर्शकों को यह समझने का मौका दे कि छोटा नैनोस्कोप कैसा है। Eg htwins.net/scale2
blah238
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.