Как убрать дефекты выпуклости в квадрате судоку?

| | | | | | | | | |

Я занимался забавным проектом: решал судоку из входного изображения с помощью OpenCV (как в очках Google и т. д.). И я выполнил задачу, но в конце я нашел небольшую проблему, из-за которой я пришел сюда.

Я программировал с использованием Python API OpenCV 2.3.1.

Ниже вот что я сделал:

  1. Прочитайте изображение
  2. Найдите контуры
  3. Выберите тот, у которого максимальная площадь (а также несколько эквивалентен квадрату) .
  4. Найдите угловые точки.

    например, указано ниже:

    введите здесь описание изображения

    (Обратите внимание, что зеленая линия правильно совпадает с истинной границей судоку, поэтому судоку можно правильно деформировать. Проверьте следующее изображение)

  5. преобразовать изображение в идеальный квадрат

    например, изображение:

    введите описание изображения здесь

  6. Выполните распознавание символов (для чего я использовал метод, который у меня есть дано в простое распознавание цифр OCR в OpenCV-Python )

И этот метод работал хорошо.

Проблема:

Посмотрите это изображение.

Выполнение шага 4 для этого изображения дает следующий результат:

введите описание изображения

Нарисованная красная линия – это исходный контур, который является истинным контуром границы судоку.

Нарисованная зеленая линия – приблизительный контур, который будет контур искаженного изображения.

Конечно, есть разница между зеленой линией и красной линией на верхнем краю судоку. Поэтому во время деформирования я не получаю исходную границу судоку.

Мой вопрос:

Как я могу деформировать изображение на правильной границе судоку, т.е. красная линия ИЛИ как убрать разницу между красной линией и зеленой линией? Есть ли способ для этого в OpenCV?