Mam dowolny kształt zdefiniowany przez maskę binarną (szary = kształt, czarny = tło).
Chciałbym znaleźć największy możliwy prostokąt zawierający tylko szare piksele (taki prostokąt jest przedstawiony na żółto):
Kształt jest zawsze „jednoczęściowy”, ale niekoniecznie jest wypukły (nie wszystkie pary punktów na granicy kształtu można połączyć prostą linią przechodzącą przez kształt).
Czasami istnieje wiele takich „maksymalnych prostokątów”, a następnie można wprowadzić dodatkowe ograniczenia, takie jak:
- Przyjmowanie prostokąta o środku najbliższym środkowi masy kształtu (lub środkowi obrazu)
- Przyjmowanie prostokąta o współczynniku kształtu najbliższym predefiniowanemu współczynnikowi (tj. 4: 3)
Moja pierwsza myśl o algorytmie jest następująca:
- Oblicz transformację odległościową kształtu i znajdź jego środek masy
- Rozwijaj kwadratowy obszar, gdy zawiera on tylko piksele kształtu
- Rozwiń prostokąt (pierwotnie kwadrat) na szerokość lub wysokość, gdy zawiera on tylko piksele kształtu.
Myślę jednak, że taki algorytm byłby powolny i nie doprowadziłby do optymalnego rozwiązania.
Jakieś sugestie?