6

मैं पिछले दो दिनों से पदों और उदाहरणों के माध्यम से जा रहा हूं और कम से कम मेरे स्निपेट्स की कोशिश की गई है और व्यापक रूप से परीक्षण किए गए हैं, कम से कम मेरे उद्देश्यों के लिए।वेक्टर छवियों के लिए छवि तुलना (किनारे का पता लगाने के आधार पर)?

मैं जो करना चाहता हूं वह एक दीवार वेक्टर या कागज के टुकड़े (बुरी तरह स्कैन की गई छवियों के समान गुणवत्ता) की तुलना में एक काले वेक्टर प्रतीक की तुलना करना है और इसकी तुलना उसी या समान प्रतीक के इलेक्ट्रॉनिक संस्करण से करें (जो होगा स्थानीय रूप से संग्रहीत किया जाना चाहिए और तस्वीर की तुलना में)। कृपया दो संलग्न छवियों पर एक नज़र डालें, पहला साफ एक (संदर्भ छवि) प्रतीक का डेटाबेस संस्करण है और दूसरा पेपर के टुकड़े पर बना एक क्रैपी ड्रॉइंग है जिसे मैंने अपने आईपैड के साथ फोटो खिंचवाया था।

Reference Image

Test Image

मैं इस प्रकार जाना प्रक्रिया चाहता था:

  • दो छवियों लोड किए गए हैं और फिर इस ट्रिमिंग एल्गोरिथ्म मैं यहां पाया का एक संशोधित संस्करण का उपयोग कर छंटनी: Trimming images with PIL । मैंने पाया कि एक 'सीमा' 50 के मूल्य और एक 'प्रत्यक्षता' 20 (लिंक किए गए लिपि में पैरामीटर) का मूल्य इन छवियों
  • छवियों तो एक ही आकार में बदल और तुलना की जाएगी के लिए अच्छा परिणाम दे

अब तुलना के लिए, मैंने विभिन्न सुझाए गए दृष्टिकोणों का एक टन आजमाया है लेकिन अब तक परिणाम भयानक हैं। मैं वास्तव में परीक्षण किए गए एक की तुलना में एक यादृच्छिक छवि के साथ बेहतर तुलना परिणाम प्राप्त कर सकते हैं। मैंने RMS difference comparison को वास्तविक छवियों, उनके किनारों (छवि फ़िल्टरर के साथ 'फ़िल्टर' फ़ंक्शन के साथ बनाया गया है), Pixel-Based Comparison के साथ बनाया गया है लेकिन अब तक मुझे कुछ भी नहीं मिला है (मेरे निरंतर गुगलिंग के बावजूद) या यहां स्टैक ओवरव्लो में मुझे सभ्य परिणाम दिए।

मुझे विश्वास है कि समस्या परीक्षण छवि की शोर पृष्ठभूमि में निहित है, लेकिन मैं इसे साबित करने में सक्षम हूं। क्या किसी को पता है कि इन छवियों में किनारों से वेक्टरियल रूपरेखा प्राप्त करने का कोई तरीका है और न केवल छवियों के रूप में बल्कि छवि-वैक्टर के रूप में उनकी तुलना करें? मेरी क्रैपी ड्राइंग के बावजूद, मुझे लगता है कि ये दो छवियां काफी समान हैं और इससे अच्छी तुलना करना संभव होना चाहिए।

+0

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

उत्तर

4

बेहतर प्रतिक्रिया प्राप्त करने के लिए आपको अपने आवेदन के दायरे को बेहतर तरीके से सीमित करने की आवश्यकता है। यहां कुछ ऐसा है जो आपकी मदद कर सकता है। मुझे लगता है कि आपका "क्रैपी ड्रॉइंग" इनपुट हमेशा आपके द्वारा प्रदान किए गए एक जैसा है, जिसमें यह मजबूत किनारों है, और उस पर मौजूद रंग अप्रासंगिक है। अपनी समस्या को सरल तरीके से हल करने के लिए (या बेहतर, समाधान के करीब पहुंचने के लिए), आपको स्केल इनवेरिएंट डिस्क्रिप्टर के संदर्भ में दोनों छवियों का वर्णन करने की आवश्यकता है।

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

तो, बिनराइज चरण: एक मॉर्फोलॉजिकल ढाल करें और कमजोर ढाल को छोड़ दें। यह बहुत आसान है अगर इनपुट पोस्ट किए गए समान हैं। यहाँ है कि मैं क्या तीव्रता 60 पर एक सीमा के साथ मिलता है (मैं भी [, 255 0] संभालने कर रहा हूँ अपने इनपुट सीमा में है) है:

enter image description here enter image description here

मैं जल्दी से 90 तक लेकर थ्रेसहोल्ड साथ प्रयोग किया, और वे सभी इन छवियों के लिए काम किया। इन फसल आसान है, और आप भी पृष्ठभूमि और वस्तु को भरने बाढ़ कर सकते हैं:

enter image description here enter image description here

अब आप सफेद में जुड़ा घटकों को निकालने और उन पर विश्लेषण कर सकते हैं। इस मामले में, उन्हें करने के लिए सबसे सरल बात यह है कि उन्हें गिनना है। इन इनपुट के लिए, हमें "सही" छवि में 12 और "खराब" में 14 मिलते हैं। लेकिन, "खराब" में, हमारे पास आकार 1 के 2 घटक होते हैं (उनमें से प्रत्येक में केवल एक पिक्सेल होता है), जिन्हें तुच्छ रूप से समाप्त किया जाता है। कनेक्टेड घटकों की तुलना करने के कई अन्य तरीके हैं, लेकिन मुझे उम्मीद है कि यह आपको शुरू कर सकता है। यदि आपको इन कार्यों के लिए कोड की आवश्यकता है तो मैं इसे शामिल कर सकता हूं।

+0

वाह आपने मुझे अभी उड़ा दिया :) कुछ मुझे बताता है कि यह आपका पहला समय नहीं था: पी क्या आप कृपया अपने परीक्षणों के लिए कोड शामिल कर सकते हैं ताकि मैं इसके साथ प्रयोग कर सकूं (आपको इसे पेस्ट करने की ज़रूरत नहीं है, एक संलग्न फ़ाइल बहुत अच्छी होगी)? आपको बहुत बहुत धन्यवाद! – somada141

+0

यह अच्छा है, मुझे उम्मीद है कि आप इसका उपयोग कर सकते हैं। कोड दो फाइलों में विभाजित है: http://pastebin.com/SGhw0fMZ और http://pastebin.com/mRZ0mzVa, यह बहुत आसान है और कई तरीकों से इसे बेहतर किया जा सकता है। – mmgp

0

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

+0

वोरोनोई प्रतिक्रिया के लिए धन्यवाद, क्या आप किसी भी मौके से जानते हैं कि आप क्या सुझाव दे रहे हैं? मुझे पीआईएल – somada141

+0

के साथ वेक्टर छवियों पर कोई जानकारी नहीं मिल सकती है http://codeboje.de/pysvg/ एक सभ्य एसवीजी लाइब्रेरी है जिसे आप आजमा सकते हैं। आप क्या कर रहे हैं fyi बहुत मुश्किल है, तो लकीर का सबसे अच्छा है। किनारे का पता लगाने के लिए – VoronoiPotato

+0

मैं विपरीत पिक्सल के बाद सफेद पिक्सेल/ग्रे पिक्सल के बगल में काले पिक्सल की तलाश करता हूं। बाहरी लूप को बोलने के लिए परिभाषित करें, आंतरिक किनारों को ढूंढें, पिक्सल की एक पंक्ति लेकर और सफेद (काला, काला, सफ़ेद, काला) का विश्लेषण करके – VoronoiPotato

1

मुझे यकीन नहीं है कि पीआईएल के साथ यह कैसे करना है, लेकिन मैं आपको कुछ अच्छे काम करने वाले उदाहरणों के बारे में बता सकता हूं ताकि आप स्वयं सीख सकें (यह छवि प्रसंस्करण के लिए एक गैर-मामूली कार्य है!)।

एक अच्छा काम करने वाला उदाहरण DeTeXify है, एक प्रोग्राम जो ज्ञात प्रतीकों की एक बड़ी लाइब्रेरी के साथ माउस से खींचे गए प्रतीक से मेल खाता है (इस मामले में प्रतीकों को टाइपसेटिंग प्रोग्राम लाटेक्स में बना सकते हैं)। सामने और बैक-एंड दोनों के लिए स्रोत कोड उपलब्ध हैं।

... इसलिए "आकार संदर्भों" कहा जाता है का उपयोग करता है दो आकृतियों के बीच समानता खोजने के लिए:

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

आकार संदर्भों के लिए एक स्वतंत्र रूप से उपलब्ध शोध पत्र उनके Berkeley site पर पाया जा सकता है।

+0

आपके सुझावों के लिए धन्यवाद, दुर्भाग्यवश, मैं चाहता हूं कि यह कोड पाइथोनिस्टा, आईओएस पायथन पर्यावरण पर चलाना चाहें जो दुर्भाग्यवश तीसरे पक्ष के पुस्तकालयों को स्थापित करने की अनुमति नहीं देता है और यहां तक ​​कि numpy या scipy के साथ भी नहीं आता है, इसलिए मुझे उपरोक्त काम को मानक पायथन पुस्तकालयों के साथ बनाने का एक तरीका ढूंढना होगा। मुझे आशा है कि यह पीआईएल के साथ एक आसान काम होगा लेकिन मैं खुद को बेवकूफ़ बनाने की जांच कर रहा था :) – somada141

+1

@ somada141 समझा (हालांकि सवाल में बाधाओं को जानना अच्छा होगा!)। मुझे अभी भी लगता है कि संदर्भ वैध हैं क्योंकि आप उत्पादन स्तर कार्यान्वयन में शामिल एल्गोरिदम देख सकते हैं। – Hooked

0

SIFT नामक एक विधि है। ओपनसीवी इसका उपयोग करता है और पाइथन ओपनसीवी में भी एक कार्यान्वयन है। कार्यान्वयन ओपनसीवी में एसयूआरएफ है, विभिन्न प्रश्न और उदाहरण मिल सकते हैं, और यह अच्छी तरह से काम करता है। this प्रश्न में एक उदाहरण है।

0

मैं जानता हूँ कि यह पहले से ही उत्तर दिया गया है (एक अतिरिक्त संदर्भ के रूप में इस उत्तर पोस्ट कर रहा है), लेकिन शायद किसी को अभी भी इस मिल जाएगा।

स्वीकार्य उत्तर के विपरीत, मैं द्विआधारीकरण करने के लिए ढाल के साथ सौदा नहीं करता, बल्कि इसके बजाय Otsu's Thresholding देखेंगे। यह अच्छी तरह से काम करना चाहिए यदि आपकी सभी छवियों में केवल बहुत ही अंधेरे और बहुत हल्के क्षेत्र होते हैं, क्योंकि यह छवियों में हिस्टोग्राम (सभी प्रकाश पिक्सल के लिए एक, सभी अंधेरे पिक्सेल के लिए एक) और फिर मूल्य में थ्रेसहोल्ड में दो चोटियों की तलाश करता है दो चोटियों के बीच।