Как я могу обнаружить (и исправить) перекос в изображениях?

У меня есть большая коллекция отсканированных изображений, и все они несколько искажены, вокруг них белая область.

Итак, эти изображения имеют прямоугольники цветов, окруженные большой белой областью. Проблема в том, что эти цветные прямоугольники не параллельны границе изображения.

Я уверен, что должен быть способ программно обнаружить эти прямоугольники цвета, чтобы я мог повернуть изображение (таким образом, отодвинув его), а затем обрезать так, чтобы осталась только интересная часть. Наверное, я не совсем уверен, как называется этот процесс, поэтому у меня возникают проблемы с поиском решения в Google.

Кто-нибудь знает подход, который поможет мне начать? Есть ли какие-нибудь библиотеки, на которые мне стоит обратить внимание? Или название алгоритма, который поможет?

Я планирую использовать Java для этого проекта, но я еще не начал, поэтому я открыт для предложений библиотек на любом языке.

3 ответа

Решение
  • обнаружение границы
  • грубое преобразование (если все прямоугольники на изображении имеют одинаковый перекос)
  • Обнаружение контура прямоугольника (контур подключенного компонента, затем прямоугольник, ограничивающий минимальную площадь)

Alyn - сторонний пакет для обнаружения и исправления перекосов в изображениях, содержащих текст. Он использует Canny Edge Detection и Hough Transform, чтобы найти перекос.

Чтобы обнаружить перекос, просто запустите

./skew_detect.py -i image.jpg

Чтобы исправить перекос, запустите

./deskew.py -i image.jpg  -o skew_corrected_image.jpg

Вы также можете попробовать scikit-image http://scikit-image.org/docs/dev/auto_examples/.

Это отличная библиотека для грубого преобразования, но также есть другие методы, такие как преобразование Радона и геометрические преобразования для такого рода задач.

Это библиотека Python.

Другие вопросы по тегам