कैसे अपने मूल्यों से रेखापुंज पिक्सल बफर करने के लिए?


28

बाईं ओर के पिक्सेल पेड़ के स्थानों और उनके संबद्ध क्राउन रेडी (यानी 2 - 5 से लेकर पिक्सेल मान) का प्रतिनिधित्व करते हैं। मैं इन रास्टर पिक्सल्स को उनके क्राउन रेडियस वैल्यू द्वारा बफर करना चाहूंगा। दाईं ओर की छवि वह है जिसे मैं केवल रास्टर प्रोसेसिंग विधियों का उपयोग करके पूरा करने की उम्मीद कर रहा हूं ।

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

उनके मूल्यों द्वारा पिक्सल को "बफर" करने के लिए एक अच्छी विधि क्या है?

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


2
क्या आपने रेखापुंज को बिंदुओं में बदलने की कोशिश की, फिर क्षेत्र द्वारा बफर फिर रेखापुंज में परिवर्तित करें?

2
यह महसूस करने में मदद करता है कि यह एक गैर-स्थानीय ऑपरेशन है, क्योंकि गैर-स्थानीयता यह दर्शाती है कि गणना कैसे की जा सकती है, इस पर अंतर्निहित सीमाएं हैं। उदाहरण के लिए, यदि आपके इनपुट में केवल एक अलग-थलग पिक्सेल बड़े पैमाने पर बदलने के लिए आपका आउटपुट लगभग हर जगह बदल जाएगा। इस प्रकार, यदि आपको इनपुट मानों पर प्रतिबंध का पता है, तो कृपया उन्हें साझा करें, क्योंकि इससे बेहतर समाधान हो सकते हैं। उदाहरण के लिए, क्या आपके सभी इनपुट मूल्य हमेशा सेट {2,3,4} में होंगे?
whuber

@ डैन पैटरसन यही है कि मैं छवि को दाईं ओर लेकर आया हूं। हालाँकि, मैं पूरी तरह से वेक्टर ऑपरेशन से बचने और उन चरणों से बचने की कोशिश कर रहा हूँ।
हारून

2
@whuber यह डाटासेट चर मुकुट व्यास के साथ पेड़ों का प्रतिनिधित्व करता है। यह देखते हुए कि, पेड़ का मुकुट त्रिज्या माप वास्तविक रूप से 1-10 से भिन्न हो सकता है। मुझे यह भी जोड़ना चाहिए कि मुकुट की अनुपस्थिति के लिए बफ़र्ड आउटपुट की आवश्यकता केवल 0 है और ताज की उपस्थिति के लिए 1 है।
हारून

1
ठीक है धन्यवाद। ऐसा लगता है कि आपने 3 आउटपुट वाले पॉइंट्स को वेल्यू 3 के साथ जोड़कर उदाहरण आउटपुट बनाया है, वैल्यू 4 वाले पॉइंट्स के 4-बफ़र्स, और वैल्यू 5 वाले पॉइंट्स के 5-बफ़र्स (आप भूल गए लगते हैं) मान 2 के साथ बिंदुओं को संसाधित करने के लिए।) यह प्रक्रिया न केवल आपके प्रश्न का उत्तर देती है, लेकिन (मेरा मानना ​​है) यह स्थानिक विश्लेषक में उपलब्ध उपकरणों का उपयोग करके सबसे सरल समाधान है।
18

जवाबों:


14

यहाँ एक शुद्ध रेखापुंज समाधान का Python 2.7उपयोग कर रहा है numpyऔर scipy:

import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt

#create tree location matrix with values indicating crown radius
A = np.zeros((120,320))
A[60,40] = 1
A[60,80] = 2
A[60,120] = 3
A[60,160] = 4
A[60,200] = 5
A[60,240] = 6
A[60,280] = 7

#plot tree locations
fig = plt.figure()
plt.imshow(A, interpolation='none')
plt.colorbar()

#find unique values
unique_vals = np.unique(A)
unique_vals = unique_vals[unique_vals > 0]

# create circular kernel
def createKernel(radius):
    kernel = np.zeros((2*radius+1, 2*radius+1))
    y,x = np.ogrid[-radius:radius+1, -radius:radius+1]
    mask = x**2 + y**2 <= radius**2
    kernel[mask] = 1
    return kernel

#apply binary dilation sequentially to each unique crown radius value 
C = np.zeros(A.shape).astype(bool)   
for k, radius in enumerate(unique_vals):  
    B = ndimage.morphology.binary_dilation(A == unique_vals[k], structure=createKernel(radius))
    C = C | B #combine masks

#plot resulting mask   
fig = plt.figure()
plt.imshow(C, interpolation='none')
plt.show()

इनपुट: यहाँ छवि विवरण दर्ज करें

आउटपुट: यहाँ छवि विवरण दर्ज करें


1
तनु दृष्टिकोण के लिए +1! यह पास के बिंदुओं के साथ भी काम करता है।
एंटोनियो फाल्कियानो

यह इस बात का एक बड़ा उदाहरण है कि क्यों पुराना जेट कोलोरशेम भयानक था। यह viridis के साथ बहुत स्पष्ट दिखता है।
दोपहर

8

वेक्टर-आधारित दृष्टिकोण

यह कार्य तीन चरणों में किया जा सकता है:

नोट: बफर क्षेत्र का उपयोग प्रत्येक ताज त्रिज्या मान के लिए एक बफर की गणना से बचा जाता है।


रेखापुंज-आधारित दृष्टिकोण

वेक्टर-आधारित समाधान से बचने पर, यह समस्या निकटतम पड़ोसियों के आधार पर एक प्रकार के सेलुलर ऑटोमेटा का उपयोग करने का सुझाव देती है। यह मानते हुए कि सभी काले पिक्सेल शून्य हैं, पिक्सेल चुकता हैं और उनका आकार 1 के बराबर है (या, वैकल्पिक रूप से, अवसर के अनुसार बढ़ाया जाता है), अपनाने के नियम बहुत सरल हैं:

  1. यदि पिक्सेल मान ( VALUE) 1 से अधिक है, तो इसका मान बन जाता है VALUE-1और फिर इसके आसपास के पिक्सेल पर विचार करें। यदि उनका मान इससे कम है VALUE-1, तो ये पिक्सेल पैदा होते हैं या बढ़ते हैं और उनका मूल्य बन जाता है VALUE-1। अन्यथा, ये पिक्सेल बच जाते हैं और अपरिवर्तित रह जाते हैं।
  2. यदि VALUE<=1, कुछ भी नहीं (पिक्सेल मृत है!)।

इन नियमों को तब तक लागू किया जाता है जब तक कि सभी पिक्सेल मर नहीं जाते हैं, अर्थात उनका मान 0 या 1 के बराबर है। इसलिए N-1, Nइनपुट रैस्टर में आपके पास अधिकतम मूल्य कहां है। इस दृष्टिकोण को थोड़ा सा पायथन और सुन्न के साथ आसानी से लागू किया जा सकता है।


1
प्रतिक्रिया afalciano के लिए धन्यवाद। यह तरीका है कि मैंने छवि को दाईं ओर कैसे बनाया और वेक्टर दृष्टिकोण का उपयोग करता है - एक मैं बचने की कोशिश कर रहा हूं।
हारून

1
ठीक है आरोन, अब यहाँ एक रेखापुंज आधारित दृष्टिकोण है। उम्मीद है की यह मदद करेगा।
एंटोनियो फाल्कियानो

7

एक अन्य विकल्प प्रत्येक पिक्सेल मूल्य के लिए अलग-अलग आपदाओं का निर्माण होगा, इस स्थिति में एक स्थिति के साथ 4 रेखापुंज। फिर रेखापुंज के मूल्य के हिसाब से एक पिक्सेल गणना के द्वारा रेखापुंज का विस्तार करें (संभवतः एक मूल्य सूची से अधिक पुनरावृत्ति करके)। अंत में, पेड़ के मुकुटों के लिए एक द्विआधारी रेखापुंज बनाने के लिए, आपदाओं (या तो बीजगणितीय या स्थानिक रूप से) में शामिल हों।


1
यह विचार सही है। विवरण में सुधार किया जा सकता है: (1) चयन किसी दिए गए मुकुट त्रिज्या के पेड़ों का एक द्विआधारी (0,1) संकेतक बनाता है। (2) उस चयन का एक केंद्र योग - दिए गए त्रिज्या के एक परिपत्र पड़ोस का उपयोग करना - एफएफटी का उपयोग करके गणना करने के लिए तेज है। (३) फोकल सूम्स (बिंदुवार) को जोड़ना और ० से तुलना करना वांछित बफर देता है।
whuber

7

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

यहां केवल 3 फिल्टर के साथ ऐसा करने के लिए एक संभावित उत्तर है (मैं कम नहीं पा सकता), लेकिन पूरी तरह से Whuber द्वारा उल्लेख नहीं किया गया: आपके बफ़र्स को काट दिया जाएगा जब पेड़ एक-दूसरे के करीब होंगे।

1) EDIT: यूक्लिडियन आवंटन (यह पूरी तरह से मुद्दे को हल नहीं करता है, क्योंकि यह छोटे पेड़ों के आसपास के क्षेत्र में बफ़र्स को काटता है, लेकिन यह मेरे पहले समाधान के कलाकृतियों से बेहतर है)।

2) प्रत्येक पिक्सेल के आसपास यूक्लिडियन दूरी

3) एक सशर्त विवरण के साथ रेखापुंज कैलकुलेटर (मानचित्र बीजगणित)

Con("allocation_result" > ("distance_result" / pixel_size) , 1 , 0)

ध्यान दें कि आप त्रिज्या के संदर्भ में अपनी आवश्यकताओं के आधार पर कंडिशन को समायोजित कर सकते हैं (केंद्रीय पिक्सेल के साथ या बंद करें)


+1 यह एक रचनात्मक दृष्टिकोण है। मैं यह देखने के लिए परीक्षण करूंगा कि क्या इस दृष्टिकोण का उपयोग करके स्केल करना संभव है।
हारून

2
यूक्लिडियन दूरी दृष्टिकोण काम नहीं करेगा, क्योंकि यह केवल निकटतम पेड़ की दूरी की गणना करता है , जो जरूरी नहीं कि एक पेड़ की दूरी जिसका मुकुट बिंदु को कवर करता है।
whuber

2

आश्चर्य है कि आप आर्कगिस के विस्तारित टूल का उपयोग क्यों नहीं करते हैं ?

import arcpy
from arcpy.sa import *

raster_in  = r'c:\test.tif'
raster_out = r'c:\test_out.tif'

outExpand1 = Expand(raster_in, 2, 2)
outExpand2 = Expand(outExpand1, 3, 3)
outExpand3 = Expand(outExpand3, 4, 4)
outExpand4 = Expand(outExpand4, 5, 5)

outExpand4.save(raster_out)

ओवरलैपिंग के मामले में: नवीनतम expandकमांड पिछले वाले को कवर करेगा।


2

यदि आपके पास पिक्सेल स्थिति, त्रिज्या और मिडपॉइंट सर्कल एल्गोरिथ्म (ब्रेशेनम अल्ग का एक संस्करण है।) आपको एक सुराग देता है। IMO इस दृष्टिकोण से बहुभुज बनाना आसान है और मुझे लगता है कि पायथन में इसे लागू करना आसान है। पॉलीगोन के इस सेट का एक संघ आपको कवरिंग क्षेत्र देता है।


मुझे पता है कि यह सवाल का विषय नहीं है, लेकिन क्या आप ग्राफिक आदिम और स्कैन लाइन बहुभुज के बारे में अधिक जानना चाहते हैं? Cirles के लिए यह बहुत आसान है। उत्तल संयोजन एक
भनभनाना है

बुनियादी रेखापुंज संचालन का उपयोग करके इसे कैसे लागू किया जाएगा?
whuber

यदि आप इसे रास्टर स्पेस में संभालने की कोशिश करते हैं, तो सर्कल पॉइंट्स को निर्धारित करें, उन्हें y या x द्वारा सॉर्ट करें और सर्कल को भरने के लिए एक सीधी रेखा (स्कैन लाइन) द्वारा स्पेस भरें। त्रिकोणीय दृष्टिकोण में, यदि आप ट्रिंगुलर सेक्टरों के एक अनुमान द्वारा सर्कल का निर्माण करते हैं और त्रिकोण को भरने की कोशिश करते हैं तो आपको एक परीक्षण की आवश्यकता होती है यदि बिंदु अंदर या बाहर (उत्तल संयोजन) है और दूसरा तरीका है। और "जीआईएस" एपोच में, बहुभुज (घड़ी के अनुकूल उन्मुख बहुभुज) का निर्माण और एक संघ बनाना तीसरा (आईएमओ सबसे कम्प्यूटेशनल महंगा है)।
23

स्पष्ट होने के लिए: और "जीआईएस" में एपोच ... संघ, चौराहे, स्पर्श जैसे एक बीजीय ऑपरेशन करें .... तीसरा आईएमओ सबसे कम्प्यूटेशनल महंगा है।
हुकफीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.