У меня есть произвольная форма, определяемая бинарной маской (серый = форма, черный = фон).
Я хотел бы найти максимально возможный прямоугольник, содержащий только серые пиксели (такой прямоугольник изображен желтым цветом):
Форма всегда "одна часть", но она не обязательно выпуклая (не все пары точек на границе формы могут быть соединены прямой линией, проходящей через форму).
Иногда существует много таких «максимальных прямоугольников», и тогда могут быть введены дополнительные ограничения, такие как:
- Взятие прямоугольника с центром, ближайшим к центру масс фигуры (или центру изображения)
- Взятие прямоугольника с соотношением сторон, ближайшим к заранее заданному соотношению (т.е. 4: 3)
Моя первая мысль об алгоритме заключается в следующем:
- Вычислить расстояние преобразования формы и найти ее центр масс
- Увеличьте площадь, пока она содержит только пиксели фигуры
- Увеличьте прямоугольник (изначально квадрат) по ширине или высоте, пока он содержит только пиксели формы.
Однако я думаю, что такой алгоритм будет медленным и не приведет к оптимальному решению.
Какие-либо предложения?