बोर्डगेम में हेक्सागोनल टाइलिंग को कैसे पहचानें?


16

मैं एक तस्वीर में हेक्सागोनल टाइलिंग की सीमाओं को पहचानना चाहूंगा, जैसे नीचे की छवि:

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

यह मुझे लगता है, कि एक वर्ग ग्रिड पर एक मानक दृष्टिकोण पहले कोनों (जैसे कैनी) का पता लगाने के लिए है और फिर एचओएफ परिवर्तन या कुछ इसी तरह के माध्यम से सबसे लंबी लाइनों को निकालना है ।

यह हेक्स टाइलिंग के साथ इष्टतम समाधान के रूप में नहीं दिखता है, क्योंकि बाहरी लाइनों की लंबाई कम है और उन्हें अन्य लाइनों से अलग करना मुश्किल है।

क्या इस समस्या को स्वीकार करने के लिए कोई एल्गोरिथ्म है? यह opencv में एक समाधान के लिए particulary अच्छा होगा, लेकिन मैं सामान्य विचारों में भी दिलचस्पी रखता हूं।

अपडेट करें:

अजगर और opencv के साथ मैं यह परिणाम प्राप्त करने में सक्षम था: आकृति

यहाँ मेरा कोड है:

import cv2
import numpy as np

imgOrig = "test1";
img = cv2.imread(imgOrig+".jpg");  
lap = cv2.Laplacian(img, cv2.IPL_DEPTH_32F, ksize = 3)  
imgray = cv2.cvtColor(lap,cv2.COLOR_BGR2GRAY)  
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
size = img.shape
m = np.zeros(size, dtype=np.uint8)
for i, cnt in enumerate(contours):
    if cv2.contourArea(cnt) >= 1:
        color = (255,255,255)
        cv2.drawContours(m, cnt, -1, color, -1)
cv2.imwrite(str(imgOrig)+"contours.jpg", m);

छवि का लाप्लासियन जैसा दिखता है: Laplacian

मैं इस दृष्टिकोण के मापदंडों को चुनने की कोशिश करूंगा और फिर चार खंडों की सीमाओं को प्रक्षेपित करने की कोशिश करूंगा।


5
सिग्नल प्रोसेसिंग यूरो-गेमिंग से मिलती है; मेरे geek इंद्रियों झुनझुनी रहे हैं!
nispio

1
यदि आप हमेशा एक ही आकार के बोर्ड का उपयोग कर रहे हैं, और छवि में बोर्ड के लगभग समान दृश्य होंगे, तो आप साइजिंग और पंजीकरण का निर्धारण करने के लिए बोर्ड की रूपरेखा को पहचानने के साथ ही समस्या को हल करने में सक्षम हो सकते हैं। बोर्ड के किनारों के संबंध में टाइलों का रख-रखाव और आकार निरंतर है, इसलिए जब आप यह जान लें कि आपके सभी किनारे कहाँ हैं, तो आपको आंतरिक टाइलों की स्थिति का सही-सही पता लगाने में सक्षम होना चाहिए।
nispio

आपके सुझाव के लिए धन्यवाद, @nispio। बोर्ड का आकार हर समय एक जैसा होता है, जबकि बोर्ड का दृश्य काफी बदल सकता है। अन्य चित्रों में पृष्ठभूमि का रंग भी भिन्न होता है, जो बहुत कम विपरीत होता है। यदि पृष्ठभूमि उदाहरण के लिए बेज है, तो रूपरेखा की स्थिति निर्धारित करना कठिन है।
स्नैलक्स

1
यदि आपको कोई अन्य उत्तर नहीं मिल रहा है, तो मुझे लगता है कि अपने संपादन को अपने प्रश्न के उत्तर के रूप में पोस्ट करना एक अच्छा विचार है। मुझे यकीन नहीं है कि कैसे इस इनाम के साथ बातचीत हालांकि!
lmjohns3

1
@ सेंसेक्स: यदि आप अपने निष्कर्षों को एक उत्तर के रूप में पोस्ट करते हैं तो मैं आपको इनाम दूंगा। हालांकि, अगले 12 घंटों में किए जाने की जरूरत है।
जनवरी

जवाबों:


6

पहला दृष्टिकोण:

इस ट्यूटोरियल http://note.sonots.com/SciSoftware/haartraining.html के अनुसार opencv की haartraining विधियों का उपयोग करें - यह सबसे अच्छा परिणाम देना चाहिए, लेकिन मैंने अब तक खुद को haartraining के साथ काम नहीं किया है ...

दूसरा दृष्टिकोण:

मैं बोर्ड की व्यक्तिगत टाइलों के "मार्कर रहित ट्रैकिंग" के तरीकों का उपयोग करने का सुझाव दूंगा। आप इसे OpenCV का उपयोग करके भी कार्यान्वित कर सकते हैं।

तैयारी

  1. इस प्रयोजन के लिए आपको प्रत्येक प्रकार की टाइल की कुछ तस्वीरों की आवश्यकता होगी। सभी टाइल प्रकारों की तस्वीर लें (प्रत्येक एक तस्वीर के रूप में), चित्र के बीच में ऊपर-नीचे-दृश्य टाइल से एक सजातीय पृष्ठभूमि के साथ।

  2. फिर कुछ फीचर डिटेक्टर का उपयोग करें (OpenCV में इसके लिए कई एल्गोरिदम हैं, लेकिन SIFT / SURF गैर-मुक्त एल्गोरिदम हैं; मैं छवियों में विशिष्ट बिंदुओं को खोजने के लिए "FAST" का उपयोग करने का सुझाव दूंगा)।

  3. छवि में पाई गई विशेषता का वर्णन करने के लिए एक सुविधा विवरणक का उपयोग करें (उदाहरण के लिए "BRIEF")।

खोज

अब आप इस इमेज में समान फीचर डिटेक्टर / डिस्क्रिप्टर एल्गोरिदम लगाकर किसी इमेज में टाइल्स का पता लगा सकते हैं। जब आप सुविधाओं / विवरणों का अधिग्रहण कर लेते हैं तो आप टाइल खोजने के लिए FlannBasedMatcher को लागू कर सकते हैं।

यहाँ OpenCV से एक कोड उदाहरण / ट्यूटोरियल है: http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html#feature-homography

टिप्पणियाँ

द मेचर मेथड आपको केवल एक मैच देगा और संभवतः बोर्ड पर पाए जाने वाले उस प्रकार की एक से अधिक टाइल होने पर समस्याएँ होंगी। आप इनपुट छवि के केवल कुछ हिस्सों को मास्क करके उस समस्या को हल कर सकते हैं। मैं यह पता लगाने की सुविधाओं के पिक्सेल निर्देशांक का उपयोग करके ऐसा करने का सुझाव देता हूं। यदि आप - किसी तरह - पहले टाइलों की रूपरेखा और आकार का पता लगाते हैं, तो आप चित्र पर टाइल की स्थिति और आकार का अनुमान लगा सकते हैं। मिलान करने से पहले अपनी पहचानी गई सुविधा-सूची (जैसे टाइल के अपेक्षित मध्य बिंदु से केवल x- पिक्सेल त्रिज्या के भीतर की विशेषताएँ) को फ़िल्टर करें और फिर मजबूत मिलान का उपयोग करें। परिणामस्वरूप आपको छवि पर टाइल की सटीक स्थिति दी जाएगी (यह अभिविन्यास सहित)। यदि नक्शा रूपरेखा का पता लगाना बहुत जटिल है, तो आप मैन्युअल रूप से रूपरेखा को चिह्नित करने के लिए कोने की टाइल पर उपयोगकर्ता को "बिंदु" दे सकते हैं ...

वैकल्पिक दृष्टिकोण

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


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

बाहरी रेखाओं का पता लगाना ज्यादातर मामलों में संभव लगता है। मैंने हाल ही में कोशिश की है कि मेरे सवाल में अंतिम परिणाम के समान छवियों पर हफ़ ट्रांसफ़ॉम के साथ। जब मुझे एक स्थिर समाधान मिला तो मैं अपने प्रश्न को अपडेट करूंगा।
स्नैलक्स

टाइल्स पर मकान और अन्य खेल के टुकड़े की समस्या नहीं होनी चाहिए। यह कुछ "सुविधाओं" को कवर करने का कारण बनता है, लेकिन उनमें से कुछ अभी भी पता लगाए जाएंगे। कम से कम 4 का पता लगाने की आवश्यकता है। आप opencv के फ़ीचर डिटेक्शन डेमो को आज़मा सकते हैं और देख सकते हैं कि प्रत्येक टाइल पर कितनी विशेषताएं हैं ...
SDwarfs

3

मैं अपने वर्तमान दृष्टिकोण का वर्णन करूंगा, जो खेल के नियमों, छवि प्रसंस्करण और सुविधा का पता लगाने के लिए संयोजन है।

प्रासंगिक खेल नियम

वसूली

सबसे पहले मैं गेम बोर्ड की स्थिति निकालने के लिए Hough ट्रांसफॉर्म का उपयोग करता हूं। स्रोत छवि प्रश्न में अंतिम छवि के समान लगती है, लेकिन मोटी रेखाओं के साथ और मैंने छोटी सीमाओं को फ़िल्टर किया। मैं केवल बहुत लंबी लाइनों का पता लगाता हूं (परिमाण का क्रम: छवि चौड़ाई / ऊंचाई का लगभग 60 प्रतिशत) और लाइन मिलान के लिए बहुत छोटी सीमा। मैं भी बस छवि के बाहरी 40 प्रतिशत की रेखाओं को देखता हूं और ऊपर, नीचे, बाएं और दाएं की पहचान की गई रेखाओं का माध्य लेता हूं। परिणाम नीचे चित्र में दिखाया गया है: पर्याप्त परिवर्तन

मुझे केवल किसी न किसी सन्निकटन की आवश्यकता है, इसलिए यह ठीक है। अब से मैं केवल Houghlines के अंदर की छवि की जांच करता हूं, साथ ही Hough के परिवर्तन की अनिश्चितता के कारण कुछ अतिरिक्त स्थान भी।

फिर मैं फ़ीचर डिटेक्शन का उपयोग करता हूँ, जैसा कि स्टीफन के। ने अपने उत्तर में प्रस्तावित किया था, ताकि छवि में उन विशेषताओं का पता लगाया जा सके, जो कि खिलाड़ियों द्वारा नहीं लिए जा सकते हैं, जैसे महल, स्थान टाइल और पहाड़। मैं opencv-python में ORB एल्गोरिथ्म का उपयोग करने के लिए ऐसा करता हूं और BruteForce-Hamming-Matcher (मैं अभी तक FlannBased मिलान चलाने में सक्षम नहीं था)। ओआरबी स्केल और रोटेशन इनवेरिएंट है। समान विशेषताओं (जैसे महल) की कई घटनाओं का पता लगाने के लिए मैं भागों में छवि को विभाजित करता हूं, जो ओवरलैप करता है। यह ठीक काम करता है क्योंकि लंबी छवि का रिज़ॉल्यूशन काफी बड़ा है और तस्वीर सीधे ऊपर से ली गई है (अभी भी कुछ परीक्षणों की आवश्यकता है)। यह भी एक तरह से धीमा है। स्थान टाइल (सराय) का पता लगाना नीचे दी गई छवि में एक उदाहरण के रूप में दिखाया गया है महल सुविधा का पता लगाने

फिलहाल मैं होमोग्राफी ट्रान्सफॉर्म को खोजने की कोशिश करता हूं ताकि पता लगने वाली विशेषताओं की सटीक स्थिति और अभिविन्यास निकाला जा सके।

मुझे आशा है कि इस जानकारी (पहाड़, महल, स्थान टाइल और अधिकांश मामलों में पानी) की ग्रिड को फिर से बनाने में सक्षम हो। धाराओं के प्रयोग आशाजनक दिखते हैं, हालांकि बहुत बढ़िया ट्यूनिंग और फीचर चित्रों की उचित तैयारी करनी पड़ती है।


मैंने कैटन के साथ भी कुछ ऐसा ही किया है, लेकिन हॉगोग्राफी के बजाय मैं किसी दिए गए टाइल के लिए माध्य रंग मान का उपयोग कर रहा हूं। किनारों को अलग करने में मदद करने के लिए प्री-प्रोसेसिंग के साथ टाइल को 6-फेस पॉली कंटूर के रूप में पहचानें, फिर उस आरओआई को मास्क में बदलें, फिर सोर्स इमेज के ऊपर बिटवाइंड_के साथ मास्क लगाएं। फिर आप औसत रंग प्राप्त कर सकते हैं, जो अधिकांश टाइलों की पहचान करने के लिए पर्याप्त हो सकता है, और फिर आप अतिरिक्त पैटर्न मिलान कर सकते हैं। मैंने अभी इसे शुरू किया: youtube.com/watch?v=0ezfyWkio6c
Rex Hardin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.