मनमाने आकार की स्वचालित फसल


14

मेरे पास एक मनमाना आकार है जिसे बाइनरी मास्क (ग्रे = आकार, काला = पृष्ठभूमि) द्वारा परिभाषित किया गया है।

मैं एक सबसे बड़ा संभव आयत ढूंढना चाहता हूँ जिसमें केवल ग्रे पिक्स हों (ऐसी आयत पीले रंग में चित्रित हो):

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

आकार हमेशा "एक टुकड़ा" होता है, लेकिन यह जरूरी नहीं कि उत्तल हो (आकार की सीमा पर सभी बिंदु जोड़े आकृति के माध्यम से जाने वाली सीधी रेखा से नहीं जुड़े हो सकते हैं)।

कभी-कभी ऐसे "अधिकतम आयतें" मौजूद होती हैं और फिर आगे के अवरोधों को पेश किया जा सकता है, जैसे:

  • आयत को अपने केंद्र के साथ आकार के द्रव्यमान के केंद्र (या छवि के केंद्र) पर ले जाना
  • पूर्वनिर्धारित अनुपात के निकटतम पहलू अनुपात के साथ आयत लेना (अर्थात ४: ३)

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

एल्गोरिथ्म के बारे में मेरा पहला विचार निम्नलिखित है:

  1. आकृति के दूरी परिवर्तन की गणना करें और इसके द्रव्यमान का केंद्र खोजें
  2. वर्गाकार क्षेत्र विकसित करें जबकि इसमें केवल आकार के पिक्सेल हों
  3. आयत (मूल रूप से एक वर्गाकार) को चौड़ाई या ऊँचाई में बढ़ाएँ जबकि इसमें केवल आकार के पिक्सेल हों।

हालाँकि, मुझे लगता है कि इस तरह का एल्गोरिथ्म धीमा होगा और इससे इष्टतम समाधान नहीं होगा।

कोई सुझाव?


2
क्या यह मददगार है? mathworks.com/matlabcentral/fileexchange/…
अतुल इंगले

@AtulIngle बिल्कुल! धन्यवाद। क्या आप उत्तर जोड़ सकते हैं ताकि मैं इसे स्वीकार कर सकूं? मैं एल्गोरिथ्म पर अधिक विस्तार से उत्तर को संपादित करने का प्रयास करूंगा - लेकिन मैं आपके द्वारा दिए गए लिंक का उपयोग करके अपने प्रश्न का उत्तर नहीं देना चाहता ...
Libor

महान! मैं आपके विस्तृत उत्तर को पढ़ने के लिए उत्सुक हूँ क्योंकि मैंने कोड के माध्यम से नहीं पढ़ा है।
अतुल इंगले

@AtulIngle ठीक है, मैंने जवाब में कुछ चर्चा जोड़ी है और मेरा एक पूरा लेख लिंक किया है।
लिबोर

जवाबों:


10

Matlab Fileexchange पर एक कोड है जो आपकी समस्या के लिए प्रासंगिक है: http://www.mathworks.com/matlabcentral/fileexchange/28155-inscrectangle/content/html/Inscribed_Recture_demo.html

अपडेट करें

मैंने अतुल इंगल से उपरोक्त लिंक के आधार पर सबसे बड़े उत्कीर्ण आयतों की गणना करने पर यह ट्यूटोरियल लेख लिखा ।

एल्गोरिथ्म पहले एक बाइनरी मास्क पर सबसे बड़े वर्गों की खोज करता है। यह सरल गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग करके किया जाता है। पहले से ज्ञात तीन पड़ोसियों का उपयोग करके प्रत्येक नया पिक्सेल अपडेट किया जाता है:

squares[x,y] = min(squares[x+1,y], squares[x,y+1], squares[x+1,y+1]) + 1

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

नमूना बाइनरी मास्क और गणना नक्शा इस तरह दिखता है:

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

नक्शे में अधिकतम लेने से सबसे बड़ा खुदा हुआ वर्ग पता चलता है:

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

आयत खोज एल्गोरिथ्म मास्क की तुलना में दो बार आयत की दो वर्गों की तलाश में स्कैन करता है:

  • चौकोर आकार से अधिक चौड़ाई (और संभवतः छोटी हो)
  • वर्गाकार आकार से अधिक ऊँचाई (और चौड़ाई संभवतः छोटी हो)

दोनों वर्ग सबसे बड़े वर्गों से बंधे हुए हैं क्योंकि किसी दिए गए बिंदु पर कोई आयताकार अंकित वर्ग से अधिक नहीं हो सकता है (हालांकि एक आयाम बड़ा हो सकता है)।

आयताकार आकारों के लिए कुछ मीट्रिक का चयन करना होता है, जैसे क्षेत्र, परिधि या आयामों का भारित योग।

यहाँ आयतों के लिए परिणामी नक्शा दिया गया है:

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

यह सबसे अच्छा आयत की स्थिति और आकार को स्टोर करने के लिए सुविधाजनक है जो अब तक नक्शे के निर्माण के बजाय एक चर में पाया जाता है और फिर मैक्सिमा की तलाश में है।

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

इस एल्गोरिथ्म का व्यावहारिक अनुप्रयोग गैर-आयताकार छवियों को क्रॉप कर रहा है। मैंने अपनी छवि सिलाई लाइब्रेरी SharpStitch में इस एल्गोरिथ्म का उपयोग किया है :

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.