एक रेखापुंज / छवि प्रसंस्करण समाधान को स्पष्ट करने के लिए, मैंने पोस्ट की गई छवि के साथ शुरुआत की। यह नीले डॉट्स, ग्रे लाइनों, रंगीन क्षेत्रों और पाठ के सुपरपोजिशन के कारण मूल डेटा की तुलना में बहुत कम गुणवत्ता का है; और मूल लाल रेखाओं का मोटा होना। जैसा कि यह एक चुनौती प्रस्तुत करता है: फिर भी, हम अभी भी उच्च सटीकता के साथ वोरोनोई कोशिकाओं को प्राप्त कर सकते हैं।
मैंने लाल रेखीय विशेषताओं के दृश्य भागों को लाल चैनल से हरे को घटाकर और फिर तीन हिस्सों से सबसे उज्ज्वल भागों को पतला और मिटा दिया। यह यूक्लिडियन दूरी की गणना के लिए आधार के रूप में इस्तेमाल किया गया था:
i = Import["http://i.stack.imgur.com/y8xlS.png"];
{r, g, b} = ColorSeparate[i];
string = With[{n = 3}, Erosion[Dilation[Binarize[ImageSubtract[r, g]], n], n]];
ReliefPlot[Reverse@ImageData@DistanceTransform[ColorNegate[string]]]
(यहां दिखाया गया सभी कोड Mathematica 8. है)
स्पष्ट "लकीरें" की पहचान करना - जिसमें उन सभी बिंदुओं को शामिल करना चाहिए जो दो आसन्न वोरोनोई कोशिकाओं को अलग करते हैं - और उन्हें लाइन की परत के साथ फिर से जोड़ना सबसे अधिक प्रदान करता है जो हमें आगे बढ़ने की आवश्यकता है:
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
लाल बैंड प्रतिनिधित्व करता है कि मैं लाइन को क्या बचा सकता था और सियान बैंड दूरी परिवर्तन में लकीरें दिखाता है। (मूल पंक्ति में टूट के कारण अभी भी बहुत अधिक कबाड़ है।) इन लकीरों को साफ करने और एक और फैलाव के माध्यम से बंद करने की आवश्यकता है - दो पिक्सल करेंगे - और फिर हम निर्धारित क्षेत्रों से पहचान कर सकते हैं मूल पंक्तियाँ और उनके बीच की लकीरें (जिनमें से कुछ को फिर से समझने की आवश्यकता है):
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
वास्तव में, इसने जो काम किया है, वह पांच उन्मुख रैखिक विशेषताओं की पहचान करना है। हम संगम के एक बिंदु से निकलने वाली तीन अलग-अलग रैखिक विशेषताओं को देख सकते हैं। प्रत्येक की दो भुजाएँ हैं। मैंने दो सबसे सही विशेषताओं में से एक के रूप में सही पक्ष पर विचार किया है, लेकिन अन्यथा सभी विशेषताओं को अलग कर दिया है, पांच सुविधाएँ दे रहे हैं। रंगीन क्षेत्र इन पांच विशेषताओं से वोरोनोई आरेख दिखाते हैं।
एक यूक्लिडियन आवंटन आदेश एक परत पर आधारित है जो तीन रेखीय विशेषताओं को अलग करता है (जो कि इस चित्रण के लिए मेरे पास उपलब्ध नहीं था) प्रत्येक रैखिक सुविधा के विभिन्न पक्षों को अलग नहीं करेगा, और इसलिए यह बाईं ओर की रेखा को समतल करते हुए हरे और नारंगी क्षेत्रों को मिलाएगा। ; यह सबसे दाहिनी चैती सुविधा को दो में विभाजित करेगा; और यह उन विभाजित टुकड़ों को अपने अन्य पक्षों पर संबंधित बेज और मैजेंटा सुविधाओं के साथ जोड़ देगा।
जाहिर है, इस रेखापुंज दृष्टिकोण में मनमाना सुविधाओं के वोरोनोई टेसल्यूशन बनाने की शक्ति होती है - अंक, रैखिक टुकड़े और यहां तक कि बहुभुज, उनके आकार की परवाह किए बिना - और यह रैखिक विशेषताओं के पक्षों को भेद कर सकता है।