這不是一個作業問題:)在圖像中合併一組矩形的最佳方式是什麼?
我有一組散佈在圖像上的矩形。我想合併(創建一個聯合)每組相交矩形。如果矩形不與其鄰居相交,則它保持不變。
問題是合併的矩形可以與先前未考慮的矩形相交;合併的矩形也可以與新合併的矩形相交。我想抓住這些情況。因此,在我看來,它需要迭代(對集合中的每個其他矩形嘗試每個矩形)和遞歸(再次嘗試每個合併的矩形對集合,包括合併的矩形)。
我該怎麼辦?我正在使用Java,但這更像是一個算法問題,而不是面向語言的問題。
謝謝!
編輯:添加相關的代碼,以更好地說明我現在處理它的糟糕方式。
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