2012-11-14 20 views
9

मैं अपने सी # कार्यक्रम के लिए एक बिटमैप छवि में खिला रहा हूँ चित्र के वर्णों को पहचान करने के लिए ओसीआर प्रदर्शन करने के लिए सक्षम होने के लिए। यदि छवि घुमाया नहीं गया है तो मैं इसे काफी अच्छी तरह से कर सकता हूं। हालांकि, कार्यक्रम की आवश्यकताओं में से एक यह है कि प्रोग्राम स्वचालित रूप से निर्धारित करता है कि छवि घुमाया गया है या नहीं, और यह स्वचालित रूप से इन घूर्णन को ठीक करता है।छवि के घूर्णन कोण को कैसे ढूंढें?

मैं एक सरल तरीका है, जहां लाइनों छवि और अंक जो एक चरित्र से संपर्क दर्ज हैं, और फिर लाइन बिंदुओं पर एक सरल रेखीय प्रतीपगमन प्रदर्शन भर में पता लगाया जाता है को लागू करने की कोशिश की है। यह एक हद तक काम करता है, हालांकि यह पात्रों की वक्रता की वजह से बहुत ही सटीक साबित नहीं हुआ है, आदि

मैं अगर वहाँ इस समस्या को हल करने के लिए एक बेहतर तरीका था सोच रहा था? अग्रिम में बहुत धन्यवाद! :)

उत्तर

2

मैं अपने प्रोग्राम में एक छवि को डेस्क करने के लिए gmseDeskew एल्गोरिदम का उपयोग करता हूं। ये अच्छी तरह काम करता है।

+1

इस एल्गोरिदम ने मेरे लिए चाल की है। मुझे एक महान सी # कार्यान्वयन मिला [यहां।] (Http://mdb-blog.blogspot.com/2010/10/c-how-to-deskew-image.html) दुर्भाग्यवश, ऐसा लगता है कि लिखित रूप में एल्गोरिदम है ± 20 डिग्री के लिए हार्डकोडेड। मैंने ± 45 डिग्री और कुछ अन्य लाइनों की खोज के लिए कोड की रेखाओं को बदलने की कोशिश की, जैसे 'डबल cAlphaStart = -20;' to -45, लेकिन अनिवार्य रूप से कुछ तोड़ देगा। मुझे यह सुनना अच्छा लगेगा कि क्या अधिक लचीला एल्गोरिदम है, या कोई यह बता सकता है कि परिणामों को तोड़ने के बिना एल्गोरिदम को अधिक लचीला बनाने के लिए कैसे ट्विक किया जाए। –

+0

मैंने इसे भी आजमाया और यह अच्छी तरह से काम करता है। @MacSigler कोण "रेंज" को बढ़ाने के लिए (-45, + 45) ऐसा लगता है कि आपको बस लाइनों को बदलना होगा: डबल cAlphaStart = -45; int cSteps = 90 * 5; मैंने जल्दी से परीक्षण किया लेकिन यह ठीक लगता है। – AFract

2

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

+0

इस पर जोड़कर, यदि आप "ओ" कह सकते हैं, तो आप मूल रूप से एक दिशा में विस्तार कर सकते हैं और यह देख कर आसानी से अपना अभिविन्यास निर्धारित कर सकते हैं कि पत्र आपकी रेखा –

+0

पर हैं या नहीं, सबसे बड़ी समस्या यह है कि मुझे यह मिल रहा है घूर्णन से पहले अक्षर अलग करना असंभव नहीं है, क्योंकि मैं पात्रों के बीच ऊर्ध्वाधर और हॉर्टिज़ोंटल व्हाइटस्पेस की तलाश में हूं। अगर छवि घूर्णन की जाती है, तो अक्सर इस सफेद जगह से इस व्हाइटस्पेस को बाधित नहीं किया जाता है। चूंकि मैं पात्रों को अलग नहीं कर सकता, इसलिए मैं उन्हें पहचानने की कोशिश नहीं कर सकता। –

+0

@MacSigler कैसे एक मजबूत-पर्याप्त धुंध के बारे में है जो पाठ की रेखाएं कम से कम मिश्रित पहचान के लिए पर्याप्त रूप से मिश्रित दिखाई देगा या एक आटा परिवर्तन में खड़े हो जाएगा? –

0

यह खड़ी-ish लाइनों है कि पाठ (जैसे कि, बाईं मार्जिन) के निकट हैं खोजने के लिए आसान हो सकता है। प्रत्येक स्कैनलाइन के लिए, पहला काला पिक्सेल रिकॉर्ड करें। उन सभी को एक रैखिक प्रतिगमन में रखें, और आपको एक निकट लंबवत रेखा मिलनी चाहिए। अपने कोण को वास्तविक वर्टिकल से मापें और आपको टेक्स्ट को तोड़ने में सक्षम होना चाहिए। आप कल्पना कर सकते हैं कि शीर्ष, नीचे और दाएं किनारे के लिए भी वही काम करना, और औसत लेना।

2

यदि यह पाठ की रेखाओं को पहचानता है, तो छवि को धुंधला करने का प्रयास करें ताकि लाइनें अधिकतर ठोस हों और लाइनों की दिशा पाएं (या तो फूरियर ट्रांसफॉर्म या रिज डिटेक्शन के विश्लेषण के साथ)।

1

यदि पाठ मुद्रित दस्तावेज़ (कॉलम और टेक्स्ट की रेखाओं) की तरह स्वरूपित है तो आप इसका लाभ उठा सकते हैं।

एक दृष्टिकोण है कि मैं अक्सर दस्तावेज़ पाठ के लिए उपयोग देखा गया है प्रक्षेपण प्रोफाइल करना है:

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

फिर इस कोण को खोजने के बाद आप अपनी छवि को तदनुसार समायोजित कर सकते हैं और अपना अद्भुत ओसीआर कर सकते हैं।

0

हमें पहले भी इसी तरह की समस्या का सामना करना पड़ा, और हमने एक आसान और त्वरित समाधान की खोज की, और हम एक वाणिज्यिक टूलकिट (लीडटोल्स) का उपयोग करके समाप्त हो गए। आप इसे ओसीआर से पहले छवि पर स्वत: प्रसंस्करण करने के लिए उपयोग कर सकते हैं।छवियों को संसाधित करने और स्कैन करने के लिए इस टूलकिट का उपयोग करने के तरीके के बारे में जानने के लिए आप यह help topic देख सकते हैं।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है (और वास्तव में यह * घूर्णन कोण * पर प्रश्न का उत्तर क्यों देता है) और संदर्भ के लिए लिंक प्रदान करता है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य (और डाउनवॉटेड) हो सकते हैं। देखें [कैसे जवाब दें] (http://superuser.com/questions/how-to-answer) क्यों यह महत्वपूर्ण है। – bytebuster

संबंधित मुद्दे