Numpy: आकार कोनों के आधार पर चयन abritrary आकार

वोट
1

मैं अब थोड़ी देर के लिए numpy अनुक्रमण का उपयोग कर रहा है। लेकिन मैं ही कभी इस तरह के रूप बुनियादी आकार का चयन करने के लिया है आयतों या डिस्क

हालांकि, मैं अब और अधिक मनमाना आकृतियां चुनने के लिए सक्षम होना चाहिए मैं ऐसा करने का एक अच्छा तरीका नहीं मिल रहा। आदर्श रूप में, मैं कोनों में से है और उन कोनों के भीतर निहित सूचकांक के सभी के लिए चुने जाने की कोई सूची देने में सक्षम होने के लिए करना चाहते हैं। हम यह मान सकते हैं दिए गए आकार उत्तल है

उदाहरण के लिए,, (कोनों ((2,2), (6,3), (4,8) और भीतर मूल्यों को निर्धारित करने की कोशिश कर 7.9 से) आकार (10, 10) के शून्यों से भरा एक सरणी दिया ) 1 करने के लिए इस तरह के तरह एक मुखौटा वापसी होगी

  [[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 1., 1., 1., 0., 0., 0., 0., 0.],
   [0., 0., 1., 1., 1., 1., 0., 0., 0., 0.],
   [0., 0., 1., 1., 1., 1., 1., 1., 1., 0.],
   [0., 0., 0., 1., 1., 1., 1., 1., 1., 0.],
   [0., 0., 0., 1., 1., 1., 1., 1., 1., 1.],
   [0., 0., 0., 0., 0., 0., 1., 1., 1., 1.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]

अब समस्याओं में से एक यह है कि आम तौर पर इस समस्या का कोई अनूठा समाधान है, लेकिन एक प्रशंसनीय एक विकेट मेरे लिए काफी अच्छा है। मैं हालांकि इस numpy का उपयोग कर करने का एक तरीका नहीं सोच सकते हैं, के रूप में केवल बुनियादी slicings और स्पष्ट गणितीय समीकरणों का समर्थन किया जा लगते हैं।

क्या कभी किसी ने इस तरह के एक चुनौती में चलाने की है? मैं छोरों के लिए और अधिक परंपरागत अजगर का सहारा लेना है?

09/10/2019 को 12:51
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

बेशक एक बदसूरत समाधान है, लेकिन कैसे OpenCV के माध्यम से अपने बहुभुज से चयन के लिए एक द्विआधारी मुखौटा पैदा करने और है कि एक का उपयोग कर के बारे में?

import cv2
import numpy as np

corners = np.asarray([(2,2), (6,3), (4,8), (7,9)])

target = np.zeros([10,10])
mask = cv2.fillPoly(np.zeros_like(target, dtype=np.uint8), [corners], 255).astype(bool)

target[mask] = 1

उत्पन्न करता है:

>>> target
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 1., 1., 1., 0., 0., 0.],
       [0., 0., 0., 1., 1., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 1., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 1., 0., 0.]], dtype=float32)

नोट : मैं आदेश आप उन्हें दे दी है में कोनों उपयोग कर रहा हूँ। OpenCV के लिए, एक आकार में बिन्दु (मेरी उत्पादन और तुम्हारा के बीच आकार में इसलिए अंतर) में से आदेश में व्याख्या कर रहे हैं। वास्तव में आकार आप की जरूरत है (जैसे, दक्षिणावर्त) प्राप्त करने के लिए तदनुसार कोनों पुन: व्यवस्थित करें।

नोट (2) : के बाद से यह अंक के लिए सवाल और OpenCV उपयोग करता है (एक्स, वाई) सम्मेलन में निर्दिष्ट नहीं किया गया मैं, के रूप में नहीं के रूप में अपने कोनों (एक्स, वाई), (पंक्ति, स्तंभ) की व्याख्या कर रहा हूँ (जबकि numpy का उपयोग करता है (पंक्ति, स्तंभ))।


उत्पादन आप चाहते हैं उत्पन्न करने के लिए कोने के निर्देशांक स्वैप और उन्हें पुन: व्यवस्थित इस प्रकार है:

corners = np.asarray([(2,2), (6,3), (7,9), (4,8) ])[:,(1,0)]

इस के साथ (और ऊपर कोड) आप प्राप्त:

>>> target
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 1., 1., 1., 0., 0., 0.],
       [0., 0., 1., 1., 1., 1., 1., 1., 1., 0.],
       [0., 0., 0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 0., 0., 1., 1., 1., 1., 1., 1., 1.],
       [0., 0., 0., 0., 0., 0., 0., 1., 1., 1.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32)
09/10/2019 को 13:08
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more