लास्पी के साथ एलएएस डेटा को डाउनसैंपलिंग करने की प्रक्रिया को समझना
पायथन में बड़ी LAS या LAZ फ़ाइलों के साथ काम करते समय, कुशल प्रसंस्करण और विश्लेषण के लिए डाउनसैंपलिंग आवश्यक है। लास्पीएलएएस डेटा को पढ़ने, लिखने और बदलने के लिए एक पायथन पैकेज, पॉइंट क्लाउड डेटा में हेरफेर करने के कई तरीके प्रदान करता है, जैसे एलएएस हेडर बनाना और संपादित करना।
यह उदाहरण दिखाता है कि प्रत्येक दसवें बिंदु को निकालकर किसी डेटासेट का डाउनसैंपल कैसे किया जाए लाज़ फ़ाइल करें और मौजूदा का पुन: उपयोग करें लासहैडर. इसके लिए यह समझने की आवश्यकता है कि हेडर डेटा के साथ कैसे इंटरैक्ट करते हैं, खासकर जब विभिन्न बिंदु गणनाओं के साथ काम करते हैं।
एक नया स्थापित करते समय लासडेटा किसी मौजूदा हेडर से ऑब्जेक्ट, उपयोगकर्ताओं को अक्सर बेमेल सरणी आकार का सामना करना पड़ता है। यह असमानता हेडर के कारण होती है बिंदु_गिनती नए डेटा के साथ स्वचालित रूप से संरेखित नहीं हो सकता है.
चुनौती यह मूल्यांकन करना है कि क्या ऑफसेट, स्केल और पॉइंट_काउंट जैसी हेडर विशेषताओं को मैन्युअल रूप से संशोधित करना आवश्यक है, या क्या कोई अधिक स्वचालित समाधान है। यह पोस्ट बताती है कि डाउनसैंपलिंग का उपयोग करते समय इन मानों को ठीक से कैसे अपडेट किया जाए लास्पी, जिसके परिणामस्वरूप एक प्रभावी प्रक्रिया होगी।
आज्ञा | उपयोग का उदाहरण |
---|---|
laspy.read() | यह कमांड LAS या LAZ फ़ाइल को LasData ऑब्जेक्ट में परिवर्तित करता है। यह फ़ाइल से पॉइंट क्लाउड डेटा और हेडर जानकारी निकालता है, जिससे पायथन में संशोधन और प्रसंस्करण की अनुमति मिलती है। |
np.arange() | नियमित अंतराल पर स्थित सूचकांकों की एक श्रृंखला बनाता है। इस परिदृश्य में, np.arange(0, len(las.points), 10) लोड किए गए पॉइंट क्लाउड डेटा से हर 10वें पॉइंट को चुनता है, जो डाउनसैंपलिंग के लिए आवश्यक है। |
laspy.LasHeader() | यह कमांड LAS और LAZ डेटा के लिए एक नया हेडर जेनरेट करता है। हेडर बिंदु प्रारूप, संस्करण, ऑफ़सेट और स्केल सहित प्रमुख मेटाडेटा प्रदान करता है, जो बनाते या संपादित करते समय महत्वपूर्ण होते हैं लासडेटा. |
header.offsets | बिंदु क्लाउड डेटा के लिए न्यूनतम x, y और z निर्देशांक निर्धारित करता है। यह पॉइंट क्लाउड के लिए संदर्भ बिंदु को बदलने में सहायता करता है, जिसके परिणामस्वरूप डाउनसैंपलिंग के बाद सही डेटा प्रतिनिधित्व होता है। |
header.scales | स्केल कारकों को परिभाषित करके x, y और z मानों की सटीकता निर्दिष्ट करता है। डाउनसैंपलिंग के बाद, डेटा अखंडता बनाए रखने के लिए स्केल कारकों की पुनर्गणना और संशोधन महत्वपूर्ण हो सकते हैं। |
copy() | किसी वस्तु की उथली प्रतिलिपि बनाता है। इस मामले में, इसका उपयोग मौजूदा हेडर को मूल बिंदु क्लाउड से स्थानांतरित करने के लिए किया जाता है, यह गारंटी देता है कि नए डेटासेट में कोई भी बदलाव मूल डेटा को नुकसान नहीं पहुंचाता है। |
downsampled_las.write() | यह कमांड डाउनसैंपल्ड पॉइंट क्लाउड को अपडेटेड या नवगठित लिखकर नई LAS या LAZ फाइल के रूप में सेव करता है लासडेटा किसी फ़ाइल पर आपत्ति. |
unittest.TestCase | यह पायथन के यूनिटेस्ट फ्रेमवर्क के लिए फाउंडेशन क्लास है, जिसका उपयोग टेस्ट केस बनाने के लिए किया जाता है। यह आलेख इसका उपयोग अंकों की सही मात्रा बनाए रखने की गारंटी देकर डाउनसैंपलिंग प्रक्रिया का परीक्षण करने के लिए करता है। |
self.assertEqual() | एक इकाई परीक्षण दो मानों की तुलना करता है और यदि वे समान नहीं हैं तो एक त्रुटि देता है। उदाहरण में, यह सुनिश्चित करता है कि डाउनसैंपल किए गए बिंदुओं की संख्या अनुमानित संख्या से मेल खाती है। |
लास्पी के साथ प्वाइंट क्लाउड डाउनसैंपलिंग का अनुकूलन
इस पोस्ट की पहली स्क्रिप्ट डाउनसैंपलिंग पर केंद्रित है एलएजेड फ़ाइल, जो बड़े बिंदु क्लाउड डेटासेट के प्रबंधन के लिए आवश्यक है। का उपयोग करके मूल फ़ाइल आयात करके laspy.read() फ़ंक्शन, हम बिंदु डेटा और हेडर तक पहुंच सकते हैं जिसमें बिंदु क्लाउड के बारे में मेटाडेटा शामिल है। डाउनसैंपलिंग तकनीक में हर दसवें बिंदु को चुनना शामिल है, जो महत्वपूर्ण भौगोलिक गुणों को बनाए रखते हुए डेटासेट के आकार को कम करता है। इसका प्रयोग करके किया जाता है एनपी.अरेंज() सूचकांकों की एक श्रृंखला बनाने के लिए। अंक चुनने के बाद, मेटाडेटा में अनुकूलता सुनिश्चित करने के लिए मूल फ़ाइल से हेडर को कॉपी करें, जैसे बिंदु_प्रारूप और संस्करण.
हालाँकि, एक सामान्य समस्या तब होती है जब मूल हेडर में अंकों की संख्या डाउनसैंपल किए गए डेटा के अनुरूप नहीं होती है। इसे ठीक करने के लिए, हम इसका उपयोग करते हैं प्रतिलिपि() मूल हेडर की एक उथली प्रतिलिपि बनाने और मैन्युअल रूप से संशोधित करने का कार्य बिंदु_गिनती डाउनसैंपल किए गए बिंदुओं की संख्या दर्शाने के लिए फ़ील्ड। नया हेडर बनाने के बाद, डाउनसैंपल्ड पॉइंट एक नए को आवंटित किए जाते हैं लासडेटा वह वस्तु जिसमें वास्तविक x, y और z निर्देशांक हों। अंततः लासडेटा का उपयोग करके एक नई LAZ फ़ाइल के रूप में सहेजा जाता है लिखना() तरीका। यह स्क्रिप्ट उन उपयोगकर्ताओं के लिए कुशल है जिन्हें बड़े बिंदु क्लाउड से छोटे डेटासेट निकालने की आवश्यकता होती है।
दूसरी स्क्रिप्ट डाउनसैंपल किए गए डेटा के लिए ऑफसेट और स्केल को स्वचालित रूप से पुनर्गणना करके पहले का विस्तार करती है। बिंदु बादलों के साथ काम करते समय, सटीक ऑफसेट होना महत्वपूर्ण है क्योंकि वे 3डी स्पेस में डेटा की उत्पत्ति का संकेत देते हैं। हेडर.ऑफ़सेट विशेषता को डाउनसैंपल बिंदुओं से न्यूनतम x, y और z निर्देशांक के साथ अद्यतन किया जाता है। इसी प्रकार, बिंदु डेटा की सटीकता को प्रभावित करने वाले स्केल कारक का उपयोग करके सेट किए जाते हैं शीर्ष लेख.तराजू गुण। यह स्क्रिप्ट न केवल पॉइंट क्लाउड के आकार को कम करती है, बल्कि यह यह भी सुनिश्चित करती है कि डेटा सटीक और संरेखित है, जिससे यह व्यावहारिक उपयोग के लिए अधिक उपयुक्त हो जाता है।
अंत में, अंतिम स्क्रिप्ट पायथन के साथ इकाई परीक्षण को प्रदर्शित करती है इकाई परीक्षण रूपरेखा। इस स्क्रिप्ट में, एक परीक्षण मामला यह निर्धारित करता है कि क्या डाउनसैंपल बिंदु गणना अनुमानित मूल्य से मेल खाती है। यह सुनिश्चित करने के लिए महत्वपूर्ण है कि डाउनसैंपलिंग प्रक्रिया संदर्भों और डेटासेटों में लगातार निष्पादित हो। परीक्षण केस का उपयोग करके परिभाषित किया गया है परीक्षण मामला कक्षा, और तुलना का उपयोग करके आयोजित की जाती है self.assertEqual() तरीका। वर्कफ़्लो में परीक्षण को शामिल करके, हम यह सुनिश्चित कर सकते हैं कि डाउनसैंपलिंग प्रक्रिया बड़ी परियोजनाओं या पाइपलाइनों पर तैनात करने से पहले ठीक से काम करती है। यह स्क्रिप्ट उपयोगकर्ताओं को कई बिंदु क्लाउड फ़ाइलों के साथ काम करते समय समस्याओं और विसंगतियों से बचने में मदद करती है।
Laspy का उपयोग करके LAZ फ़ाइलों को डाउनसैंपलिंग करना: प्वाइंट क्लाउड डेटा को संभालना
यह विधि पुरानी LAZ फ़ाइल से प्रत्येक दसवें बिंदु को निकालने और नए डेटासेट के लिए हेडर परिवर्तनों को प्रबंधित करने के लिए Python और Laspy पैकेज का उपयोग करती है।
import laspy
import numpy as np
from copy import copy
# Load the existing LAZ file
las = laspy.read("input_file.laz")
# Downsample by taking every 10th point
indices = np.arange(0, len(las.points), 10)
downsampled_points = las.points[indices]
# Copy the header and adjust the point count
header = copy(las.header)
header.point_count = len(downsampled_points)
# Create new LasData with downsampled points
d_las = laspy.LasData(header)
d_las.points = downsampled_points
# Write to a new LAZ file
d_las.write("downsampled_output.laz")
LAZ फ़ाइलों को डाउनसैंपलिंग करते समय ऑफसेट और स्केल समायोजन को स्वचालित करना
पायथन का यह संस्करण स्वचालित रूप से डाउनसैंपल किए गए डेटा के आधार पर ऑफसेट और स्केल की पुनर्गणना करता है।
import laspy
import numpy as np
# Load the original LAZ file
las = laspy.read("input_file.laz")
# Downsample by taking every 10th point
indices = np.arange(0, len(las.points), 10)
downsampled_points = las.points[indices]
# Create new header and adjust offsets/scales
header = laspy.LasHeader(point_format=las.header.point_format, version=las.header.version)
header.offsets = np.min([las.x[indices], las.y[indices], las.z[indices]], axis=1)
header.scales = np.array([0.01, 0.01, 0.01]) # Set new scales
# Create new LasData and write to file
downsampled_las = laspy.LasData(header)
downsampled_las.points = downsampled_points
downsampled_las.write("downsampled_with_scales.laz")
डाउनसैंपलिंग LAS/LAZ फ़ाइलों के लिए यूनिट परीक्षण
इस पायथन स्क्रिप्ट में यह सुनिश्चित करने के लिए एक यूनिट परीक्षण शामिल है कि डाउनसैंपलिंग प्रक्रिया कई संदर्भों में ठीक से काम करती है।
import unittest
import laspy
import numpy as np
class TestDownsampling(unittest.TestCase):
def test_downsample_point_count(self):
las = laspy.read("input_file.laz")
indices = np.arange(0, len(las.points), 10)
downsampled_points = las.points[indices]
self.assertEqual(len(downsampled_points), len(indices))
if __name__ == "__main__":
unittest.main()
एलएएस फ़ाइल मेटाडेटा और उन्नत डाउनसैंपलिंग तकनीकों को संभालना
विशाल डेटासेट के साथ काम करते समय laspy, मेटाडेटा का प्रबंधन करना वास्तविक बिंदु क्लाउड डेटा के प्रबंधन के समान ही महत्वपूर्ण है। की सटीकता बनाए रखना लासहैडर डाउनसैंपलिंग के बाद मान एक महत्वपूर्ण कठिनाई है। क्योंकि पॉइंट क्लाउड डेटा के निर्देशांक (x, y, और z) बदलते हैं, हेडर को इन परिवर्तनों को प्रतिबिंबित करना चाहिए। की पुनर्गणना कर रहा हूँ ऑफसेट प्रत्येक आयाम के लिए न्यूनतम मानों की पुनर्गणना की आवश्यकता होती है, जबकि तराजू बिंदु डेटा की सटीकता निर्धारित करें, विशेष रूप से भंडारण के लिए।
मूल्यांकन के लिए एक अन्य कारक एलएएस फ़ाइल में अतिरिक्त आयामों की अखंडता है। अतिरिक्त बाइट्स का उपयोग आमतौर पर सामान्य x, y और z निर्देशांक के अलावा तीव्रता या जीपीएस समय जैसी जानकारी रखने के लिए किया जाता है। यदि डेटासेट में ये अतिरिक्त आयाम हैं, तो डाउनसैंपलिंग करते समय उन्हें संभाला जाना चाहिए। आपको यह गारंटी देनी होगी कि अतिरिक्त आयामों में अंकों की संख्या प्राथमिक डेटा में कम बिंदु गणना से मेल खाती है। add_extra_dim में कार्यक्षमता laspy एलएएस हेडर में कस्टम आयाम जोड़ने में सक्षम बनाता है।
अंत में, डाउनसैंपलिंग बिंदु बादलों पर विचार करने के लिए गति अनुकूलन एक महत्वपूर्ण कारक है। जबकि हेडर में मानव बदलाव की आम तौर पर आवश्यकता होती है, कुशल अनुक्रमण का लाभ उठाकर और सरणी संचालन को लागू करके प्रक्रिया को स्वचालित करना Numpy प्रक्रिया में काफी तेजी ला सकता है। की शक्ति का उपयोग करके Numpy, आप प्रदर्शन से समझौता किए बिना विशाल डेटासेट को तुरंत प्रबंधित कर सकते हैं। यह आपको बड़ी परियोजनाओं के लिए समाधानों का विस्तार करने या यहां तक कि कई एलएजेड फ़ाइलों को संसाधित करने के लिए पाइपलाइनों को स्वचालित करने की अनुमति देता है।
लास्पी के साथ डाउनसैंपलिंग के बारे में सामान्य प्रश्न
- मैं बेमेल सरणी आयामों को कैसे संभालूं? LasData?
- इसका समाधान करने के लिए, सुनिश्चित करें कि point_count हेडर में डाउनसैंपल किए गए डेटा में अंकों की वास्तविक संख्या से मेल खाती है। आवश्यकतानुसार गिनती को मैन्युअल रूप से बदलें।
- क्या मुझे हमेशा पुनः गणना करनी चाहिए offsets और scales डाउनसैंपलिंग के बाद?
- हाँ, इन मानों की पुनर्गणना करना आवश्यक है, विशेषकर विशाल डेटासेट के लिए। offsets जबकि, नए न्यूनतम मूल्यों का प्रतिनिधित्व करता है scales डेटा परिशुद्धता सुनिश्चित करता है।
- कर सकना laspy एलएएस फ़ाइलों में अतिरिक्त आयाम संभालें?
- हां, इसका उपयोग करके अधिक आयामों को प्रबंधित किया जा सकता है add_extra_dim में सुविधा LasHeader, जो आपको तीव्रता या जीपीएस समय जैसे कस्टम आयाम सेट करने की अनुमति देता है।
- है numpy डाउनसैंपलिंग के लिए आवश्यक है laspy?
- जबकि यह आवश्यक नहीं है, numpy सूचकांकों को कुशलतापूर्वक उत्पन्न करके और सरणियों में हेरफेर करके बड़े पैमाने पर डेटासेट को संभालने की सुविधा प्रदान करता है।
- मैं डाउनसैंपलिंग प्रक्रिया को कैसे तेज़ कर सकता हूँ?
- उपयोग numpy सरणी संचालन और कुशलतापूर्वक अनुक्रमणिका निष्पादित करने के लिए। विशाल बिंदु बादलों के साथ काम करते समय यह प्रदर्शन में सुधार करता है।
प्रभावी डाउनसैंपलिंग के लिए मुख्य उपाय
डाउनसैंपलिंग करते समय आयाम बेमेल से बचने के लिए एलएजेड फ़ाइलों के साथ laspy, द बिंदु_गिनती संपत्ति को हेडर में मैन्युअल रूप से समायोजित किया जाना चाहिए। ऑफसेट और स्केल की पुनर्गणना ताजा डेटा के उचित प्रतिनिधित्व की गारंटी देती है।
कुछ घटकों, जैसे हेडर संशोधनों के लिए मैन्युअल हस्तक्षेप की आवश्यकता होती है, जबकि अन्य को उपयोग करके स्वचालित किया जा सकता है Numpy गति को अधिकतम करने और विशाल डेटासेट को प्रबंधित करने के लिए। यूनिट परीक्षण आपके डाउनसैंपलिंग वर्कफ़्लो की मजबूती को बढ़ाता है, जिससे यह वास्तविक स्थितियों में अधिक कुशल हो जाता है।