क्या यह देखने के लिए जाँच करने का कोई साधन है कि क्या किसी भी 2 रास्टर परतों में समान सामग्री है ?
हमें अपने कॉरपोरेट शेयर्ड स्टोरेज वॉल्यूम पर एक समस्या है: अब यह इतना बड़ा हो गया है कि इसे पूरा बैकअप लेने में 3 दिन का समय लगता है। प्रारंभिक जांच से पता चलता है कि सबसे बड़ी जगह लेने वाले दोषियों में से एक / बंद चूहों पर है जिन्हें वास्तव में CCITT संपीड़न के साथ 1-बिट परतों के रूप में संग्रहीत किया जाना चाहिए।
यह नमूना छवि वर्तमान में 2bit (इसलिए 3 संभावित मान) और LZW संपीड़ित टिफ़, फ़ाइल सिस्टम में 11 एमबी के रूप में सहेजी गई है। 1bit (इसलिए 2 संभावित मान) में परिवर्तित होने और CCITT ग्रुप 4 कंप्रेशन को लागू करने के बाद, हम इसे 1.3 एमबी तक घटा देते हैं, लगभग बचत के परिमाण का एक पूरा क्रम।
(यह वास्तव में बहुत अच्छी तरह से व्यवहार किया गया नागरिक है, वहाँ अन्य लोगों को 32 बिट फ्लोट के रूप में संग्रहीत किया जाता है!)
यह शानदार खबर है! हालाँकि इसे लागू करने के लिए लगभग 7,000 चित्र हैं। उन्हें संपीड़ित करने के लिए स्क्रिप्ट लिखना सीधा होगा:
for old_img in [list of images]:
convert_to_1bit_and_compress(old_img)
remove(old_img)
replace_with_new(old_img, new_img)
... लेकिन यह एक महत्वपूर्ण परीक्षा याद आ रही है: क्या नया संकुचित संस्करण सामग्री-समान है?
if raster_diff(old_img, new_img) == "Identical":
remove(old_img)
rename(new_img, old_img)
क्या कोई उपकरण या विधि है जो स्वचालित रूप से (डिस) साबित कर सकती है कि छवि-ए की सामग्री छवि-बी की सामग्री के समान है?
मेरे पास आर्कजीआईएस 10.2 और क्यूजीआईएस तक पहुंच है, लेकिन ओवरराइटिंग से पहले शुद्धता सुनिश्चित करने के लिए इन सभी छवियों को मैन्युअल रूप से निरीक्षण करने की आवश्यकता को कम करने के अलावा सबसे ज्यादा कुछ भी खुला हो सकता है। यह एक ऐसी छवि को गलत तरीके से परिवर्तित करने और अधिलेखित करने के लिए भयानक होगा जो वास्तव में उस पर / बंद मूल्यों से अधिक था । अधिकांश को इकट्ठा करने और उत्पन्न करने के लिए हजारों डॉलर खर्च होते हैं।
अद्यतन: सबसे बड़े अपराधी 32bit फ़्लोट्स हैं जो कि एक साइड में 100,000px तक होते हैं, इसलिए ~ 30GB असम्पीडित होते हैं।
NoData
बातचीत में उचित संचालन सुनिश्चित करने के लिए @whuber धन्यवाद ।
len(numpy.unique(yourraster)) == 2
, तो आप जानते हैं कि इसके 2 अद्वितीय मूल्य हैं और आप सुरक्षित रूप से ऐसा कर सकते हैं।
numpy.unique
अधिक कम्प्यूटेशनल रूप से महंगा होने वाला है (समय और स्थान दोनों के संदर्भ में) अधिकांश अन्य तरीकों की तुलना में यह जांचने के लिए कि अंतर एक स्थिर है। जब दो बहुत बड़े फ्लोटिंग पॉइंट रस्टर्स के बीच अंतर होता है, जो कई अंतरों को प्रदर्शित करता है (जैसे कि एक ओरिजिनल की तुलना एक हानिपूर्ण संपीड़ित संस्करण से) तो यह हमेशा के लिए नीचे गिर जाएगा या पूरी तरह विफल हो जाएगा।
gdalcompare.py
महान वादा दिखाया ( जवाब देखें )
raster_diff(old_img, new_img) == "Identical"
जांचना होगा कि अंतर के पूर्ण मान का जोनल अधिकतम 0 के बराबर है, जहां पूरे ग्रिड हद तक ज़ोन लिया गया है। क्या यह उस तरह का समाधान है जिसकी आप तलाश कर रहे हैं? (यदि हां, तो यह परिष्कृत करने की जांच करने के लिए है कि किसी भी NoData मूल्यों के अनुरूप भी हैं की आवश्यकता होगी।)