यह होमवर्क प्रश्न नहीं है :)किसी छवि में आयत के सेट को मर्ज करने का सबसे अच्छा तरीका क्या है?
मेरे पास एक छवि में बिखरे आयतों का एक सेट है। मैं छेड़छाड़ वाले आयत के प्रत्येक समूह के विलय (संघ बनाना) बनाना चाहता हूं। यदि एक आयत अपने पड़ोसियों को छेड़छाड़ नहीं करता है, तो यह छूटे रहेंगे।
समस्या यह है कि विलय आयताकार आयताकारों को छेड़छाड़ कर सकते हैं जो पहले विचार नहीं किए गए थे; विलय आयताकार नए विलय वाले आयताकारों को भी छेड़छाड़ कर सकते हैं। मैं उन मामलों को पकड़ना चाहता हूं।
तो, मेरे दिमाग में, इसे पुनरावृत्त करने की आवश्यकता है (सेट में हर दूसरे रेक्ट के खिलाफ प्रत्येक आयत की कोशिश करें) और रिकर्सिव (मर्ज किए गए रीक्ट सहित सेट के खिलाफ प्रत्येक मर्ज किए गए रेक्ट को आजमाएं)।
मैं इसके बारे में कैसे जा सकता हूं? मैं जावा में काम कर रहा हूं, लेकिन यह भाषा-उन्मुख एक की तुलना में एक एल्गोरिदमिक प्रश्न है।
धन्यवाद!
संपादित करें: खराब तरीके से बेहतर तरीके से चित्रित करने के लिए प्रासंगिक कोड जोड़ा गया जिसमें मैं इसे अभी प्रबंधित कर रहा हूं।
public static List<BinaryRegion> mergeRegions(List<BinaryRegion> regions)
{
List<BinaryRegion> merged = new ArrayList<BinaryRegion>();
geoModel = new GeometryFactory();
Polygon polys[] = new Polygon[regions.size()];
for (int i = 0; i < regions.size(); i++)
{
Polygon p = convertRectangleToPolygon(regions.get(i)
.getBoundingBox());
polys[i] = p;
}
System.out.println("Converted " + regions.size() + " polys");
for (int i = 0; i < regions.size(); i++)
{
System.out.println("Sending in poly " + i);
ArrayList<Polygon> result = mergePoly(polys[i], polys);
System.out.println("After run, size=" + result.size());
}
return merged;
}
private static ArrayList<Polygon> mergePoly(Polygon p, Polygon[] polys)
{
ArrayList<Polygon> merges = new ArrayList<Polygon>();
for (int i = 0; i < polys.length; i++)
{
if (p.equals(polys[i]))
System.out.println("found the exact match at " + i);
else if (p.intersects(polys[i]))
{
System.out.println("Found intersection at " + i);
System.out.println("Other poly is area "+polys[i].getArea());
Polygon u = (Polygon) p.union(polys[i]);
System.out.println("Merge size="+u.getArea());
merges.add(u);
}
else
merges.add(polys[i]);
}
return merges;
}
यह स्पष्ट है कि यह होमवर्क प्रश्न नहीं है :) – dasblinkenlight
आपके पास कितने आयताकार हैं? दसियों? सैकड़ों? लाखों? .. – dasblinkenlight
"संघ बनाते हुए" क्या आपका मतलब है "एक आयताकार बनाएं जो दोनों छेड़छाड़ वाले आयतों को कवर करता है", या "एक आकार बनाएं जो दो अंतरंग आयताकारों के ज्यामितीय संघ की तरह दिखता हो"? – dasblinkenlight