Como posso detectar (e corrigir) a inclinação das imagens?

Eu tenho uma grande coleção de imagens digitalizadas e todas elas estão um pouco distorcidas, com uma área branca ao redor delas.

Portanto, essas imagens têm retângulos de cores, cercados por uma grande área branca. O problema é que esses retângulos de cores não são paralelos à borda da imagem.

Tenho certeza de que deve haver uma maneira de detectar programaticamente esses retângulos de cores, para que eu possa girar a imagem (sem distorção) e cortá-la para que apenas a parte interessante fique. Acho que não tenho muita certeza de como esse processo é chamado, por isso estou tendo problemas para procurar uma solução no Google.

Alguém sabe de uma abordagem que me inicie? Alguma biblioteca por aí que eu deveria procurar? Ou o nome de um algoritmo que ajudaria?

Estou planejando usar Java para este projeto, mas ainda não comecei, por isso estou aberto a sugestões de bibliotecas em qualquer idioma.

questionAnswers(3)

yourAnswerToTheQuestion