2011-08-09 8 views
14

मैं चीनी वर्णों से स्ट्रोक जानकारी निकालने के लिए एल्गोरिदम बनाने के लिए कई बार कोशिश कर रहा हूं। मैंने विभिन्न तरीकों की कोशिश की है लेकिन सामान्य रूप से ग्राफिक्स एल्गोरिदम के सीमित ज्ञान के कारण कोई भी बहुत संतोषजनक नहीं था।चीनी वर्ण से स्ट्रोक निकालने के लिए कैसे करें

असल में, मैं निम्नलिखित डेटा है:

  • चीनी चरित्र, जो या तो पिक्सल या वेक्टर (काले रंग में) हो सकता है

  • स्ट्रोक के समग्र रूपरेखा, पिक्सेल में (में लाल)

  • एक समग्र दिशा (नीला तीर)।

enter image description here

इस से, मैं स्ट्रोक निकालने के लिए कोशिश कर रहा हूँ। यदि आपको यह करना था, तो उपलब्ध डेटा दिया गया, आप किस तरीके का उपयोग करेंगे? क्या आप स्ट्रोक निकालने के किसी भी स्वचालित तरीके से सोच सकते हैं?

+0

कठिन प्रश्न के बीच यह चरण भी कर सकते हैं। –

+0

आप इसका क्या उपयोग कर रहे हैं? – Szabolcs

+1

मैं चरित्र स्ट्रोक एनिमेशन बनाना चाहता हूं। –

उत्तर

4

मैं प्रत्येक नीले पिक्सेल से निकटतम सफेद पिक्सेल की दूरी की गणना करने के साथ शुरू करूंगा। फिर आप सभी लाल पिक्सेल रख सकते हैं जो निकटतम सफेद पिक्सेल से करीब हैं। प्रभाव कुछ फ़िल्टर के बाद बाद में चिकना हो सकता है (शायद erosion की तरह कुछ close)।

2

मुझे नहीं लगता कि आप एक एल्गोरिदम के साथ आ सकते हैं जिसमें ऐसे मामले नहीं हैं जहां यह गलत होगा। कुछ पात्रों के कुछ भाग हैं जो समान हैं लेकिन समान स्ट्रोक गिनती के समान नहीं हैं। उदाहरण के लिए, तकनीकी रूप से visual एक दृश्य दृष्टिकोण से 口 भी शामिल है (निश्चित रूप से भाषाई नहीं)।

मेरे पास एकमात्र विचार है कि क्षेत्र को छोटे क्षेत्रों में अलग करना है और एक एल्गोरिथ लिखना है जो स्ट्रोक बनाने वाले सेट ऑर्डर का पालन करने का प्रयास करेगा, लेकिन मैं कल्पना नहीं कर सकता कि यह आसान होगा, और इसके आधार पर फ़ॉन्ट, कुछ लाइनों को उन क्षेत्रों में विस्तारित किया जाता है, जिनमें वे नहीं होना चाहिए।

कुछ वर्ण भी हैं जो उनके असामान्य लेआउट के कारण एल्गोरिदम के साथ अच्छी तरह से काम नहीं करेंगे - केवल आदेश के सख्त नियमों का पालन करके स्ट्रोक आप सही संख्या में जा सकते हैं: उदाहरणों में 凹 और 凸 शामिल हैं।

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

+0

मैं विश्वास करता हूं कि ओपी के पास नीले तीरों द्वारा दिए गए स्ट्रोक के बारे में अतिरिक्त जानकारी है। साथ ही उन्हें स्ट्रोक की गिनती करने में दिलचस्पी नहीं है, लेकिन उन्हें अलग करने में (शायद एनिमेटेड संस्करण बनाने के लिए?)। –

+0

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

+0

आह, मैं देखता हूं कि आपका क्या मतलब है। मेरे सिर पर यही रास्ता है! ; ओ; आपको शुभकामनाएं, ऐसा लगता है कि यह बहुत काम करेगा। – aevanko

3

आप medial axis की तलाश कर रहे हैं, जिसे topological skeleton भी कहा जाता है। संक्षेप में, आप सभी बिंदुओं को खोजने के लिए हल करेंगे जो किनारे पर एक से अधिक बिंदुओं के बराबर हैं। आपको परिणामी वक्र के कुछ चिकनाई या सरलीकरण करने की आवश्यकता हो सकती है।

मुश्किल हिस्सा एक से अधिक स्ट्रोक के लिए आम आकार के हिस्से को अलग कर रहा है। मुझे विश्वास नहीं है कि ऐसा करने के लिए एक अच्छी तरह से परिभाषित तरीका है। शायद "सामान्य क्षेत्र" को प्रत्येक कंकाल चौराहे पर केंद्रित सर्कल के रूप में परिभाषित करें, निकटतम किनारों पर टेंगेंट? तो शायद अंतराल में स्ट्रोक चौड़ाई के कुछ इंटरपोलेशन?

1

मुझे लगता है कि सबसे सरल संभव बात यह है कि काम कर सकते हैं के लिए है:

  1. साजिश नीले तीर, एक-एक करके
  2. गणना दूरी के साथ इस असतत दूरी एक दूसरे को काटना प्रत्येक नीली रेखा खंड
  3. का बदलना लाल क्षेत्रों
  4. अधिक से अधिक टी
  5. से

एक बार नीले क्षेत्र के लिए दूरी के साथ लाल क्षेत्रों को दूर यह कार्य करने के लिए, आप तो एक अच्छा, खंड निर्भर टी

2

ब्लू लाइन से और नमूना छवि मुझे लगता है कि इस तीन कदम दृष्टिकोण काफी कुछ मामलों के लिए काम कर सकते हैं का चयन करने के और अधिक परिष्कृत रणनीतियों पर काम कर सकते हैं:

  1. लाइन के साथ प्रत्येक बिंदु के लिए, निकटतम सफेद पिक्सेल की तुलना में उस बिंदु पर के करीब सभी लाल पिक्सल चुनें। यह मोटे तौर पर आपको चरित्र का स्ट्रोक देगा, लेकिन क्षेत्र के चारों ओर घूमने के साथ जहां दो स्ट्रोक पार हो जाएंगे, और आप स्ट्रोक के दोनों सिरों पर कुछ पिक्सेल बहिष्कृत करेंगे।

  2. बulg को खत्म करने के लिए, स्ट्रोक के किनारे पिक्सल को अलग करें, और उस किनारे-छवि के लिए hough transform की गणना करें। उस से दो सबसे महत्वपूर्ण लाइनों का चयन करें। यह आपको स्ट्रोक के किनारों के साथ दो लाइनों (यदि स्ट्रोक पर्याप्त रूप से स्ट्रैग है) देगा। अपने स्ट्रोक से सभी लाल पिक्सल को हटा दें जो नीली रेखा से इन दो पंक्तियों की तुलना में लंबवत दिशा में दूर हैं। अब (पर्याप्त रूप से सीधे स्ट्रोक के लिए) जो कुछ भी आप गायब हैं, वे पिक्सल के कुछ छोटे पृथक गांठ होंगे जो या तो चरण 1 या चरण 2 में समाप्त हो जाएंगे:

  3. पिक्सेल के सभी छोटे पृथक क्षेत्रों को जोड़ें जो केवल आपके स्पर्श करते हैं स्ट्रोक, और स्ट्रोक के लिए चरित्र का कोई अन्य हिस्सा नहीं है। यदि चरण 2 में आपको मिली रेखाएं नीली रेखा के बहुत करीब हैं तो आप चरण 1 और 2.

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