Eu tenho uma forma arbitrária definida por uma máscara binária (cinza = forma, preto = plano de fundo).
Gostaria de encontrar o maior retângulo possível contendo apenas pixels cinza (esse retângulo é retratado em amarelo):
A forma é sempre "uma peça", mas não é necessariamente convexa (nem todos os pares de pontos no limite da forma podem ser conectados por uma linha reta que passa pela forma).
Às vezes, muitos desses "retângulos máximos" existem e outras restrições podem ser introduzidas, como:
- Tomando o retângulo com o centro mais próximo do centro de massa da forma (ou centro da imagem)
- Tomando o retângulo com a proporção mais próxima de uma proporção predefinida (ou seja 4: 3)
Meu primeiro pensamento sobre o algoritmo é o seguinte:
- Calcule a transformação da distância da forma e encontre seu centro de massa
- Aumente a área quadrada enquanto ela contém apenas os pixels da forma
- Aumente o retângulo (originalmente um quadrado) em largura ou altura, enquanto ele contém apenas os pixels da forma.
No entanto, acho que esse algoritmo seria lento e não levaria à solução ideal.
Alguma sugestão?